Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

процедура по имени


Vasa777 ©   (2013-07-17 15:44:00) 

Есть модуль MyMod, в нем функция MyFunct, в которой происходят долгие вычисления. Требуется вызвать эту функцию из другого модуля с указателем другой функции, которая будет отображать проценты и возможностью отмены. Без использования классов.

Сделал по аналогии с примеров из инета. Вроде все работает. Правильно ли тут все?

В Unit1;

...
var Form1: TForm1;mycan:boolean;

implementation

Uses MyMod;
...

Procedure Xx(Const Cur,All:Int64;Var Cancel:Boolean);
begin
application.ProcessMessages;
form1.caption:=inttostr(cur)+'/'+inttostr(all);
Cancel:=mycan;
end;

procedure TForm1.ButtonCancelClick(Sender: TObject);
begin
mycan:=true;
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
var h:string;
begin
mycan:=false;h:='';
if MyFunct(h,xx) then begin memo1.Clear;memo1.lines.Add('Result: '+h);end;
end;

В MyMod:

...
Type TMyPercent=Procedure(Const Cur,All:Int64;Var Cancel:Boolean); //***
...
Function MyFunc(Var s:String;Const MyPercent:TMyPercent=nil):Boolean;

Implementation
...

Function MyFunc(Var s:String;Const MyPercent:TMyPercent=nil):Boolean;
var Cur1,All1:Int64;Cancel1:Boolean;s1:string;
begin
result:=false;Cancel1:=False;s1:='';s:='';
...
.. тут цикл cur1:=0 to All1
if Assigned(MyPercent) then MyPercent(Cur1,All1,Cancel1);
if Cancel1 then Break;
.. конец цикла
if not cancel1 then begin s:=s1;result:=true;end;
end;

...

*** - вот тут не надо of Object?


Cobalt   (2013-07-17 22:35:00) [1]

Vasa777, не забудь открыть модуль в среде и нажать Ctrl+D.


Vasa777   (2013-07-17 16:04:00) [2]

остальное норм?


RWolf   (2013-07-17 16:02:00) [3]

не надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо