![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Адрес процедуры - метод класса ? [D5, Win2k]
Кот Бегемот © (2003-01-15 16:13:00)Приветик :) Объясните популярно 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
Кот Бегемот (2003-01-15 17:18:00) [1]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;
Skier (2003-01-15 17:12:00) [2]>Digitman
Да. Велик и могуч английский язык. :))
Digitman (2003-01-15 17:09:00) [3]и тогда уж не DoFinded(), а Do Found()
для пущей "крутизны" кода)))
Skier (2003-01-15 17:07:00) [4]>Digitman
Конечно
Digitman (2003-01-15 17:05:00) [5]но если
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:03:00) [6]>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 16:56:00) [7]
> Skier
Эт почему же ? Декларация procedure T_fomMain.AddItemToList() должна в точности соответствовать декларации поля TThreadFileFind.FOnFinded, и, соответственно, типу TListSRProc
gsu (2003-01-15 16:46:00) [8]>> Skier ©
А мя не похвалили, хлюп
Skier (2003-01-15 16:44:00) [9]>Digitman
Нет, Маэстро и всё-таки Вы меня смутили мой пост (15.01.03 16:29) - правильный.
Извиняюсь перед всеми за неприличные колебания... :)
Skier (2003-01-15 16:39:00) [10]>Digitman
Ага. Точно. Моя оплошность...
Кот Бегемот (2003-01-15 16:38:00) [11]2Skier © (15.01.03 16:29)
Большое спасибо - не доглядел :( - или забыл :)))
Digitman (2003-01-15 16:34:00) [12]> TListSRProc = procedure( Sender: TObject;sr:TSearchRec) of object;
Skier (2003-01-15 16:29:00) [13]>Кот Бегемот
1) TListSRProc = procedure(sr:TSearchRec) of object;
2) procedure AddItemToList(Sender: TObject; sr:TSearchRec);
Кот Бегемот (2003-01-15 16:26:00) [14]sorry, забыл добавить:
TListSRProc = procedure(sr:TSearchRec);
TThreadFileFind = class(TThread)
private
FOnFinded: TListSRProc;
public
property OnFinded: TListSRProc write FOnFinded;
end;
gsu (2003-01-15 16:18:00) [15]не тот тип, для обр-ка, вроде можно только AddItemToList(Sender: TObject)
Skier (2003-01-15 16:17:00) [16]>Кот Бегемот
Как объявлена OnFinded ?