Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Адрес процедуры - метод класса ? [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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо