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

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

Как передать в функцию ссылку на другую функцию?


Guestt ©   (2010-09-24 18:10:00) 

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


Ega23   (2010-09-27 19:01:00) [1]


> Где именно и каким образом использовать?


И эти люди потом говорят, что юниты у них по нескольку десятков тыщ строк. И утверждают, что уменьшить их - невозможно. И что-то там ещё про нарциссизм было.

Это же основы. Не понимаю, как можно браться писать что-то серьёзное, не зная элементарных вещей.


_Юрий   (2010-09-27 18:52:00) [2]


> Где именно и каким образом использовать?


TFormA = class
X1 : Integer;
end;

TFormB = class

end;

procedure TFormA1.Button1Click(Sender: TObject);
begin
X1 := 1;
FormB2.F(X1);
ShowMessage(IntToStr(X1); // Надо, чтобы показывало 2.
end;

function TFormB2.F(var aX1 : integer): boolean;
begin
aX1 :=2;
end;


Guestt   (2010-09-27 05:24:00) [3]


> _Юрий   (26.09.10 21:56) [6]
> Достаточно var - параметра.


Где именно и каким образом использовать?


_Юрий   (2010-09-26 21:56:00) [4]

Достаточно var - параметра.


Плохиш   (2010-09-26 21:39:00) [5]

Глюкодром.


Guestt   (2010-09-26 19:58:00) [6]


> icWasya ©   (25.09.10 16:21) [3]
>
> А если функция на самом деле метод то
> type
> TCallback = function(A, B: integer): boolean of Object;


Да, "of object" я нашёл в исходниках. Но всё равно спасибо!

Ещё вопрос, вот такая передача нормальна? Нужно, чтобы через Y1 читать и ставить значение в X1.

TFormA = class
 X1 : Integer;
end;

TFormB = class
 Y1 : ^Integer;
end;

procedure TFormA1.Button1Click(Sender: TObject);
begin
 X1 := 1;
 FormB2.F(X1);
 ShowMessage(IntToStr(X1); // Надо, чтобы показывало 2.
end;

function TFormB2.F(var aX1 : integer): boolean;
begin
 Y1 := @aX1;
 Y1^ := 2;
end;


icWasya   (2010-09-25 16:21:00) [7]

А если функция на самом деле метод то
type
TCallback = function(A, B: integer): boolean of Object;

function TForm1.F(A, B: integer): boolean;
begin
Result := A = B
end;


Guestt   (2010-09-24 18:40:00) [8]

Большое спасибо! :)


Юрий Зотов   (2010-09-24 18:28:00) [9]


type
 TCallback = function(A, B: integer): boolean;

procedure CallFunc(A, B: integer; Func: TCallback);
begin
 if Func(A, B) then
   ShowMessage('Yes')
 else
   ShowMessage('No')
end;

function F(A, B: integer): boolean;
begin
 Result := A = B
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CallFunc(3, 5, F);
end;


Наверх

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