Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi"


Паскаль, Делфи


 #0 ID © 24.01.07 16:01:26 - 31.01.07 17:39:11

Динамическое создание Frames



создано несколько TFrame1, TFrame2,TFrame3,TFrame4 ... Теперь необходимо их выводить в основную форму, в зависимости от выбраного пункта меню

....
var
  Form1: TForm1;
    f: Tframe;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

if f<>nil then
begin
 f.Destroy
end
else
begin
   f:=TFrame3.Create(nil);
   f.Align:=alClient;
   f.Parent:=Form1;
   f.Visible:=true;
end;
....

Срабатывает только один раз, т.е. после Destroy f не принимает значение Nil
Вопрос. Как корректно проверять, f создано или нет. Цитата

 #1 Deep © 24.01.07 17:24:33

вместо

f.Destroy

попробуй

FreeAndNil(f);
 #2 ID © 24.01.07 17:32:06

спасибо, работает
 #3 ID © 25.01.07 14:36:28

Еще столкнулся с одной проблемкой. В Frame нет onCreate? Как инициализировать переменные после зоздания Frame?

f: Tframe;
...
   f:=TFrame3.Create(nil);
   f.Align:=alClient;
   f.?  // сдесь не плохо бы инициализировать переменные для f
   f.Parent:=Form1;
   f.Visible:=true;
 #4 ID © 25.01.07 15:40:42

буде ли корректно повесить инициализацию на onResize
 #5 Deep © 25.01.07 20:39:24

>    f:=TFrame3.Create(nil);
>    f.?  // сдесь не плохо бы инициализировать переменные
> для f


это как раз и есть OnCreate, вернее AfterCreate.    
и чем тебя такой вариант не устраивает?
 #6 ID © 26.01.07 12:27:06

в TFrame в списке доступных событий нет onCreate
Я вписал присвоение значений переменных в onResize. Смущает то, что при изменении размера окна переменные переприсваиваются
 #7 ID © 31.01.07 17:39:11

нашел решение

type
  TfrmDataClient = class(TFrame)
...
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
  end;

implementation

{$R *.dfm}

{ TfrmDataClient }
{это событие возникает перед созданием фрейма}
procedure TfrmDataClient.AfterConstruction;
begin
  inherited;
  ConnectDB(true);
end;

{это событие возникает перед закрытием}
procedure TfrmDataClient.BeforeDestruction;
begin
  inherited;
  ConnectDB(false);
end;





  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов