![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
процедура по имени
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]не надо.