![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где найити о inherited [D7, XP]
Keks © (2006-04-22 23:29:00)Добрый вечер. Поскажите пожалуйста где можно почитать о использовании ключевого слова inherited
Keks (2006-04-23 00:46:00) [21]Причем если вызвать только один раз конструктор, т.е. наблюдать за одним принтером, а потом вызвать для него деструктор то все нормально проходит.
А вот если подряд уже вызывать несколько конструкторов, то потом при вызове деструктора для каждого из них появляется ошибочка
Kolan (2006-04-23 00:43:00) [22]И где возникает Floating point ....ошибка?
Keks (2006-04-23 00:42:00) [23]
FNotifyThread: array of TNotifyThread;
Джо (2006-04-23 00:38:00) [24]> [18] Keks © (23.04.06 00:36)
Да нет, ты не понял. Интересно было бы взглянуть на объявление переменной FNotifyThread, т.е, ее тип.
Джо (2006-04-23 00:37:00) [25]> [17] Leonid Troyanovsky © (23.04.06 00:35)
Скорее всего так и есть. Также, скорее всего, это вообще не имеет отношение к проблеме. ИбоFNotifyThread[i] := TNotifyThread.Create(FPrinter1, PRINTER_CHANGE_JOB);наводит на всякие интересные предположения :)
Keks (2006-04-23 00:36:00) [26]
Type
TNotifyThread = class(TThread)
Private
FName:string;
FFinder: THandle;
FFlags: DWORD;
FOnNotify: TNotifyEvent;
protected
Procedure DoNotify;
Procedure Execute; override;
Public
FPrinter: THandle;
Constructor Create(APrinter: THandle; AFlags: DWORD);
Destructor Destroy; override;
Property OnNotify: TNotifyEvent read FOnNotify write FOnNotify;
Property Name:string read FNAme write Fname;
End;
Procedure TForm1.FormDestroy(SEnder: TObject);
var i: integer;
Begin
for i:=0 to Prn.Count-1 do begin
FPrinter1:=FNotifyThread[i].FPrinter;
FreeAndNil(FNotifyThread[i]);
WinSpool.ClosePrinter(FPrinter1);
end;
End;
Leonid Troyanovsky (2006-04-23 00:35:00) [27]
> Keks © (22.04.06 23:40) [4]
> inherited Create(True);
Видимо оный класс наследуется от TThread, тогда этот
вызов создает поток (в приостановленном состоянии).
--
Regards, LVT.
Джо (2006-04-23 00:31:00) [28]> А здесь автоматически в цикле для каждой созданной нити
> вызывается деструктор
> FreeAndNil(FNotifyThread[i]);
Слушай, приведи описание того, чем является FNotifyThread. И цикл.
Keks (2006-04-23 00:29:00) [29]Как я понимаю он уничтожает ранее созданные объекты
Вот так я создаю нить для наблюдения в цикле
FNotifyThread[i] := TNotifyThread.Create(FPrinter1, PRINTER_CHANGE_JOB);
А здесь автоматически в цикле для каждой созданной нити вызывается деструктор
FreeAndNil(FNotifyThread[i]);
Описание кода деструктора и конструктора я написал выше
Джо (2006-04-23 00:29:00) [30]> [7] Keks © (22.04.06 23:53)
> для чего Inherited Create(true)
Смотри исходный текст предка TNotifyThread. У него должен быть конструктор, принимающий параметр типа Boolean. Вот его-то ты и вызываешь.
Kolan (2006-04-23 00:22:00) [31]я вызываю Constructor в цикле для
Уже раз 10 прочитал, но так и не понял. А вы понимаете что делает деструктор ?
Kolan (2006-04-23 00:19:00) [32]Keks © (23.04.06 00:18) [11]
Архивчик никому не нужОн. Дай участки связаные с проблеммой.
Keks (2006-04-23 00:18:00) [33]могу дать архивчик проекта он маленький
Kolan (2006-04-23 00:09:00) [34]Keks © (22.04.06 23:59) [9]
Трудно понять что происходит нужен код...
Keks (2006-04-22 23:59:00) [35]Може ли это возникнуть из-за того что каждый раз конструктор вызывается с разными параметрами
Keks (2006-04-22 23:58:00) [36]у меня возникает проблема вот в чем: я вызываю Constructor в цикле для наблюдения за несколькими разными принтерами, а при событии FormClose в цикле вызываю Destructor но тут же вылетает ошибка Invalid Floating operation
Keks (2006-04-22 23:53:00) [37]для чего Inherited Create( true)
Джо (2006-04-22 23:48:00) [38]
TBaseClass = class
procedure A; virtual;
end;
TChildClass = class (TBaseClass)
procedure A; override;
end;
procedure TBaseClass.A;
begin
ShowMessage ('BaseClass.A');
end;
procedure TChildClass.A;
begin
inherited; // вызовет метод предка
ShowMessage ('ChildClass.A');
end;
Джо (2006-04-22 23:46:00) [39]Вызывает виртуальный метод (в данном случае, конструктор и деструктор) предка.
Keks (2006-04-22 23:40:00) [40]Для чего он вообще используется вот тут например:
Constructor TNotifyThread.Create(APrinter: THandle; AFlags: DWORD);
Begin
FPrinter := APrinter;
FFlags := AFlags;
inherited Create(True);
End;
Destructor TNotifyThread.Destroy;
Begin
inherited;
End;