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

Вниз

Адрес процедуры - метод класса ?   Найти похожие ветки 

 
Кот Бегемот ©   (2003-01-15 16:13) [0]

Приветик :) Объясните популярно plz почему нельзя назначить обработчиком метод какого-то класса ???
Пример:
T_fomMain = class(TForm)
public
{ Public declarations }
procedure AddItemToList(sr:TSearchRec);
end;
...
FThreadFind.OnFinded := AddItemToList;
...

procedure TThreadFileFind.DoFinded();
begin
if Assigned(FOnFinded)
then FOnFinded(FSR);
end;{}

Получаю ошибку компилятора:
Incompatible types: regular procedure and method pointer


 
Skier ©   (2003-01-15 16:17) [1]

>Кот Бегемот
Как объявлена OnFinded ?


 
gsu ©   (2003-01-15 16:18) [2]

не тот тип, для обр-ка, вроде можно только AddItemToList(Sender: TObject)


 
Кот Бегемот ©   (2003-01-15 16:26) [3]

sorry, забыл добавить:
TListSRProc = procedure(sr:TSearchRec);

TThreadFileFind = class(TThread)
private
FOnFinded: TListSRProc;
public
property OnFinded: TListSRProc write FOnFinded;
end;


 
Skier ©   (2003-01-15 16:29) [4]

>Кот Бегемот
1) TListSRProc = procedure(sr:TSearchRec) of object;
2) procedure AddItemToList(Sender: TObject; sr:TSearchRec);


 
Digitman ©   (2003-01-15 16:34) [5]

> TListSRProc = procedure( Sender: TObject;sr:TSearchRec) of object;


 
Кот Бегемот ©   (2003-01-15 16:38) [6]

2Skier © (15.01.03 16:29)
Большое спасибо - не доглядел :( - или забыл :)))


 
Skier ©   (2003-01-15 16:39) [7]

>Digitman
Ага. Точно. Моя оплошность...


 
Skier ©   (2003-01-15 16:44) [8]

>Digitman
Нет, Маэстро и всё-таки Вы меня смутили мой пост (15.01.03 16:29) - правильный.
Извиняюсь перед всеми за неприличные колебания... :)


 
gsu ©   (2003-01-15 16:46) [9]

>> Skier ©
А мя не похвалили, хлюп


 
Digitman ©   (2003-01-15 16:56) [10]


> Skier


Эт почему же ? Декларация procedure T_fomMain.AddItemToList() должна в точности соответствовать декларации поля TThreadFileFind.FOnFinded, и, соответственно, типу TListSRProc


 
Skier ©   (2003-01-15 17:03) [11]

>Digitman

Признаю свою вину, меру, степень, глубину...:)

Окончательно :
1)
а) TListSRProc = procedure(Sender: TObject; sr:TSearchRec) of object;
б) procedure AddItemToList(Sender: TObject; sr:TSearchRec);
2)
а) TListSRProc = procedure(sr:TSearchRec) of object;
б) procedure AddItemToList(sr:TSearchRec);


 
Digitman ©   (2003-01-15 17:05) [12]

но если

TListSRProc = procedure(Sender: TObject;sr:TSearchRec) of object;

тогда уж и

procedure TThreadFileFind.DoFinded();
begin
if Assigned(FOnFinded)
then FOnFinded( self, FSR);
end;{}


 
Skier ©   (2003-01-15 17:07) [13]

>Digitman
Конечно


 
Digitman ©   (2003-01-15 17:09) [14]

и тогда уж не DoFinded(), а Do Found()
для пущей "крутизны" кода)))


 
Skier ©   (2003-01-15 17:12) [15]

>Digitman
Да. Велик и могуч английский язык. :))


 
Кот Бегемот ©   (2003-01-15 17:18) [16]

2Digitman © (15.01.03 17:09)
Спасибо преогромаднейшеее :))) - серьезно
еще один недосмотр p.p. find = found

Остановился на этом варианте:
TListSRProc = procedure(sr:TSearchRec) of object;
procedure AddItemToList(sr:TSearchRec);

Sender: TObject - как-то не особо нужен

F1 > Procedural types
type
TMethod = procedure of object;
TNotifyEvent = procedure(Sender: TObject) of object;



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

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

Наверх




Память: 0.5 MB
Время: 0.017 c
1-72189
NovyChock
2003-01-13 22:02
2003.01.23
Компоненты сторонних разработчиков


1-72351
TTCustomDelphiMaster
2003-01-12 16:08
2003.01.23
Variant Conversion


3-72032
Basil
2003-01-03 18:35
2003.01.23
Принцип работы


1-72204
БурЖуй
2003-01-11 20:38
2003.01.23
определенее нажатия кнопки DEL в stringgrid


7-72563
Konstantin
2002-11-13 19:05
2003.01.23
Помогите с программой-перехватчиком