![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как проверить создавался Frame или нет? [D7, XP]
s_t_d © (2010-11-01 14:05:00)Уважаемые мастера, пожалуйста подскажите, как можно определить был создан frame, или еще не создавался?
Leonid Troyanovsky (2010-11-02 11:33:00) [1]
> s_t_d (02.11.10 04:12) [10]
> Если можно, пожалуйста чуть подробнее
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Frame: TFrame;
procedure Notification(AComponent: TComponent; oper: TOperation); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
unit2; // TFrame2
procedure TForm1.Notification;
begin
inherited;
if (oper = opRemove) then
if (AComponent = Frame) then
Frame := nil; // где бы не разрушили фрейм, ссылка будет обнилена.
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Frame) then
begin
Frame := TFrame2.Create(nil);
Frame.FreeNotification(Self);
Frame.Parent := Self;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Frame.Free;
end;
--
Regards, LVT.
s_t_d (2010-11-02 04:12:00) [2]Leonid Troyanovsky © (01.11.10 21:42) [9]
> s_t_d (01.11.10 18:08) [7]
Ссылки на фреймы не следует хранить в переменных, а токмо
в полях, в т.ч. и в списках, see also TWinControl.Controls.
See also TComponent.Notification.
--
Regards, LVT.
Если можно, пожалуйста чуть подробнее
Leonid Troyanovsky (2010-11-01 21:42:00) [3]
> s_t_d (01.11.10 18:08) [7]
> Пытался делать так:
> в обработчике нажатия на кнопке, находящейся на фрейме
> ...
> Fr_compl.Free;
Не надо рушить контролы из их методов или обработчиков.
See also: TCustomForm.Release.
Ссылки на фреймы не следует хранить в переменных, а токмо
в полях, в т.ч. и в списках, see also TWinControl.Controls.
See also TComponent.Notification.
--
Regards, LVT.
s_t_d (2010-11-01 18:30:00) [4]s_t_d (01.11.10 18:08) [7]
Юрий Зотов © (01.11.10 17:53) [6]
> s_t_d (01.11.10 17:45) [5]
При уничтожении фрейма очищать ссылку на него (переменную frame). Или руками, или используя процедуру FreeAndNil.
Разобрался, спасибо за помощь.
s_t_d (2010-11-01 18:08:00) [5]Юрий Зотов © (01.11.10 17:53) [6]
> s_t_d (01.11.10 17:45) [5]
При уничтожении фрейма очищать ссылку на него (переменную frame). Или руками, или используя процедуру FreeAndNil.
Пытался делать так:
в обработчике нажатия на кнопке, находящейся на фрейме
...
Fr_compl.Free;
где Fr_compl - имя фрейма, но, к сожалению, к ожидаемому рез-ту это не привело.
Юрий Зотов (2010-11-01 17:53:00) [6]> s_t_d (01.11.10 17:45) [5]
При уничтожении фрейма очищать ссылку на него (переменную frame). Или руками, или используя процедуру FreeAndNil.
s_t_d (2010-11-01 17:45:00) [7]Юрий Зотов © (01.11.10 15:18) [4]
> s_t_d (01.11.10 14:25) [3]
Пожалуйста подскажите, что делать, чтобы к этому не приходить.
Юрий Зотов (2010-11-01 15:18:00) [8]> s_t_d (01.11.10 14:25) [3]
Помогло, но вряд ли надолго. Следующий вопрос будет примерно таким:
"frame <> nil, но при обращении к фрейму вылетает ошибка Access Violation".
s_t_d (2010-11-01 14:25:00) [9]clickmaker © (01.11.10 14:09) [1]
(frame <> nil)
Большое спасибо, помогло.
Медвежонок Пятачок (2010-11-01 14:12:00) [10]никак.
begin
....
TMyFrame.Create(Self);
//и все. ищи свищщи его.....
end;
или
begin
....
myframe := TMyFrame.Create(Self);
myframe := TMyFrame1.Create(Self);
//и аналогично. ищи свищщи его.....
end;
как можно определить был создан frame, или еще не создавался?
Учиться структурировать свой код, чтобы не возникало подобных вопросов.
clickmaker (2010-11-01 14:09:00) [11](frame <> nil) and IsWindow(frame.Handle)