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

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

Как проверить создавался 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)


Наверх

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