Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.19;
Скачать: CL | DM;

Вниз

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

 
Guestt   (2010-09-24 18:10) [0]

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


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


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;


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

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


 
icWasya ©   (2010-09-25 16:21) [3]

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

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


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


> 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;


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

Глюкодром.


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

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


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


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


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


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


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


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;


 
Ega23 ©   (2010-09-27 19:01) [9]


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2010.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1284034531
kirat
2010-09-09 16:15
2010.12.19
Кросс-отчет в FastReport


15-1283792261
Делфиец
2010-09-06 20:57
2010.12.19
Байкал на Десктоп


15-1283946635
12
2010-09-08 15:50
2010.12.19
Надоело писать программы. Может временно?


15-1283787285
oldman
2010-09-06 19:34
2010.12.19
Дочка получила первую в жизни отметку


2-1279935355
Тыва прогер
2010-07-24 05:35
2010.12.19
Вопрос по ошибке "Окно не имеет полос прокрутки"