Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизАдрес процедуры - метод класса ? Найти похожие ветки
← →
Кот Бегемот (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c