Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.013 c
1-72391
GTR
2003-01-13 13:25
2003.01.23
Вопрос


1-72238
Alxd
2003-01-14 16:58
2003.01.23
Неужели никто не сталкивался с THotKey????


1-72189
NovyChock
2003-01-13 22:02
2003.01.23
Компоненты сторонних разработчиков


6-72441
Dmitriy Polskoy
2002-11-25 14:22
2003.01.23
OnClientWrite


1-72365
Outlander
2003-01-13 09:17
2003.01.23
Ключ программы




   Наверх