Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с CallBack-вызовами Найти похожие ветки
← →
repo (2003-09-19 13:40) [0]Наверное я просто чего-то не понимаю, вот простой пример:
...
public
procedure IncLabel(_Value:LongInt);
type
TMyCallBack = procedure (CurrValue:LongInt);
procedure ExecuteInc(CallBackFunc: TMyCallBack);
implementation
//Процедура, в которой используется CallBack
procedure ExecuteInc(CallBackFunc: TMyCallBack);
Var
i: LongInt;
Begin
For i:=1 to 1000000 do CallBackFunc(i);
End;
//Сама CallBack - ф-ия
procedure TForm1.IncLabel(Digit:LongInt);
Begin
Label1.Caption:=IntToStr(Digit);
Label1.Repaint;
End;
//Вызов процедуры
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteInc(@TForm1.IncLabel);
end;
При вызове это все говорит Access violation... Read of address FFFFFFFF
← →
Sandman25 (2003-09-19 13:41) [1]Это должна быть процедура, а не метод.
← →
repo (2003-09-19 14:17) [2]О, точно. А что, метод точно никак нельзя использовать?
← →
icWasya (2003-09-19 14:23) [3]type
TMyCallBack = procedure (CurrValue:LongInt) of object;
← →
repo (2003-09-19 14:29) [4]>TMyCallBack = procedure (CurrValue:LongInt) of object;
при вызове пишет: несовместимые типы TMyCallBack и Pointer
← →
Unknown (2003-09-19 14:44) [5]http://mazurkin.virtualave.net/papers/11callback/index.html
← →
PVOzerski (2003-09-19 14:44) [6]А зачем именно метод-то? Если надо добраться до полей.свойств объекта, Вы их все равно из метода.callback"а не увидете, даже если-таки выдерете из связки двух указателей тот, что на код. Метод получает Self как неявный параметр, кто его передаст при вызове callBack"а? Я бы присвоил значение Self глобальной переменной (или ThreadVar"у, хотя этот вариант не проверял), callback сделал бы "автономной" процедурой и из него через эту глобальную переменную до всего нужного добрался.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c