Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
1

Процедура с командой

06.04.2013, 11:09. Показов 2301. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть Ini файлик и куча обращений к нему в программе, обращения разные: запись, чтение.
Также есть процедура crypt для шифрации файлика ini.
Но шифровать нельзя пока не закрыть файл, а читать нельзя не открыв его.
Поэтому каждый раз нужно делать следующее:
-Закрыть файл
-Расшифровать его
-Открыть файл
-Прочесть\записать
-Закрыть файл
-Зашифровать файл
-Открыть файл

Таких обращений у меня порядка 30.
И если к каждому писать такой код на 7 строк то это будет неудобно и громостко.

Я б хотел узнать у вас как сделать процедуру следующего вида:

В ней уже будут все команды открытия\закрытия\шифрации.
А по середине некая переменная которая читает или записывает в файл что то.


Примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure proc(d:comanda);
begin
Inifile.Destroy;  //закрытие 
crypt('config.ini');  //расшифровка
IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');  //открытие
d;  // команда записи\чтения которая идет как переменная в процедуре
Inifile.Destroy;  //закрытие 
crypt('config.ini');  //шифровка
IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');  //открытие
end;
А применить её можно было так:
proc( variant:=Inifile.ReadString('ВСЕ','Вариант','Ошибка чтения') );

Это как бы присваивает переменной variant величину из файла.


Всем спасибо за ранее! Надеюсь на вашу помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2013, 11:09
Ответы с готовыми решениями:

Выбор 2-сторонней печати перед командой PrintOut WordApplicayion
Приветствую всех. Писал в другие форумы, но ничего толкового не получил в ответ. ...

Выполнение команды для командой строки из под delphi
Нужно выполнить команду "shutdown -s -t ....." место точек время через которое выключиться комп....

Выбор 2-сторонней печати перед командой PrintOut WordApplicayion
Всем привет. Подскажите. Отправляю на печать вордовый документ с помощью команды PrintOut...

Можно ли закрыть приложение командой в консоле, если открыл командой system();?
Открыл system("roulette.JPG"); А как закрыть?

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.04.2013, 11:28 2
Передай свою comanda как функцию в Proc (функциональные типы + поиск = много результатов). А в новых версиях Дельфи можно вообще задать reference to function, и конструировать функцию-параметр прямо при вызове процедуры.

P.S.
Do not call Destroy directly. Call Free instead. Free verifies that the object reference is not nil before calling Destroy.
1
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
06.04.2013, 12:01  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
(функциональные типы + поиск = много результатов)
Нету много результатов

Добавлено через 11 минут
Не могу понять как оно работает, можно пример?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.04.2013, 12:56 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
type
  FuncType = function : string;
 
  // Дельфи 2009+
  RFuncType = reference to function : string;
 
function func_command_1 : string;
begin
  Result := 'первая попытка'; // Тут на самом деле происходит чтение через ReadString
end;
function func_command_2 : string;
begin
  Result := 'вторая попытка'; // тут тоже, но чтение других данных
end;
 
function proc(f : FuncType) : string;
begin
  // тут делаешь то, что надо перед чтением
  Result := f;
  // Тут - то, что после
end;
 
// Дельфи 2009+
function proc2(rf : RFuncType) : string;
begin
  // тут делаешь то, что надо перед чтением
  Result := rf;
  // Тут - то, что после
end;
 
 
procedure TForm1.Button57Click(Sender: TObject);
begin
  ShowMessage(proc(func_command_1));
  ShowMessage(proc(func_command_2));
 
  // Дельфи 2009+
  ShowMessage(proc2(function : string
                    begin result := 'Третья попытка'; { тут тоже может быть ReadString } end));
 
end;
1
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
06.04.2013, 13:59  [ТС] 5
Эх, это на лазарусе не работает...
Подскажите какие модули нужно чтобы заработал?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.04.2013, 15:14 6
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
это на лазарусе не работает...
Для Лазаруса есть отдельный раздел, надо было там сразу задавать вопрос. Кстати, работает:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type
  FuncType = procedure (var s : string) is nested;
 
function proc(f : FuncType) : string;
begin
  // тут делаешь то, что надо перед чтением
  f(Result);
  // Тут - то, что после
end;
 
// Используем глобальную процедуру
procedure func_command_1(var s : string);
begin
  s := 'первая попытка'; // Тут на самом деле происходит чтение через ReadString
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 
  // Локальная процедура также передается в Proc, начиная с версии FPC 2.6.0
  procedure func_command_2(var s : string);
  begin
    s := 'вторая попытка'; // тут тоже, но чтение других данных
  end;
 
begin
  ShowMessage(proc(@func_command_1)); // И передаешь хоть глобальную,
  ShowMessage(proc(@func_command_2)); // хоть локальную процедуру
end;
, единственное, что надо добавить - это в самом начале модуля вот эту строку:
Pascal
1
2
3
4
unit Unit1;
 
{$mode objfpc}{$H+}
{$modeswitch nestedprocvars} // <--- Вот эту самую !!!
1
06.04.2013, 15:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2013, 15:14
Помогаю со студенческими работами здесь

Процедура ПередЗаписью и Процедура ПередЗаписьюНаСервере
В документе после нажатия на кнопку Провести и закрыть надо запросить информацию у пользователя :...

Помощь с командой
Есть бд имя фамилии годи месяц рождения цвет глаз Что нужно написать чтобы выводил цветглаз тех...

Запрос с командой Like
Добрый день друзья! У меня к Вам такой вопрос: &quot;Напишите запрос, выводящий названия книг, где...

Запуск командой
Доброго времени и суток !!! Ну вот значит написал я прогу. Скомпилил и запустил. Все работает !...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru