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

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

создать клон формы с компонентами


Страницы:   1 2

Rentgen ©   (2007-01-11 15:09:00) 

Всем привет!
Как можно создать клон созданной в DesignTime формы с компонентами и событиями?
может способ общедоступный какой есть?

BDS2006
Win2003


Anatoly Podgoretsky   (2007-01-16 23:11:00) [1]

> vidiv  (16.01.2007 22:40:18)  [18]

метод Free не увивает сам себя, он вообще никого не убивает, этим занимается деструктор Destroy


vidiv   (2007-01-16 22:52:00) [2]

А я против этого не возражаю. Я возражаю, что против того, что объект не может убивать сам себя


Palladin   (2007-01-16 22:48:00) [3]


> [18] vidiv ©

при чем тут метод Free? я тебе говорю как правильно уничтожить объект формы при ее закрытии или по определенному событию... учитывая это можно не заботиться об обязательном явном вызове Free. объект уничтожится при закрытии. это очень удобно когда количество и время жизни некоторых окон приложения неизвестны.


vidiv   (2007-01-16 22:40:00) [4]


> и они правы

а как же метод Free ?? Он как раз убивает сам себя, причем сам не является деструктором.


Palladin   (2007-01-16 22:17:00) [5]


> но некоторые борцы за справедливость утверждают, что нельзя
> убивать объект собственным же обработчиком

и они правы, и если нужно уничтожить объект формы на событии OnClose формы "борцы за справедливость" включают в код этого события строчку

Action:=caFree;


vidiv   (2007-01-16 21:44:00) [6]


> frm.(?)lbStatus.Caption := "Test"; //ессно выдает ошибку.
> ..

какж ему догадаться, что за зверь такой, двойные кавычки =)


vidiv   (2007-01-16 21:41:00) [7]


> Rentgen ©   (16.01.07 13:23) [13]

Мальчик?? А Мальчик? Оно тебе надо? Откуда? зачем? Меньше знаешь — дольше живешь =)

ЗЫ:Чтоб мой пост не удалили, скажу по теме:

var form:TForm2;

form := TForm2.Create(nil); // вместо nil можно указать хозяина формы...
form.label1.caption := 'Привет, Мальчик!'; // и компилятор знает, надо же
form.show();

только непонятно, где и когда ты будешь убивать форму, а ведь это надо будет сделать.

Можно при событии onclose убить форму (self.free), но некоторые борцы за справедливость утверждают, что нельзя убивать объект собственным же обработчиком. Да и к тому же тебе придется както отличить форму созданную тобой, от формы созданной автоматически.

И еще замечание: поскольку у твоей, вновь созданной, формы параметр name будет такойже как и у автоматически созданной формы, могут возникнуть траблы ;)


evvcom   (2007-01-16 16:11:00) [8]

Удалено модератором


Rentgen   (2007-01-16 13:23:00) [9]

Удалено модератором


Плохиш   (2007-01-16 13:23:00) [10]


> frm.(?)lbStatus.Caption := "Test"; //ессно выдает ошибку...

Ессно..., но не на то место, где ты поставил (?)


Elen   (2007-01-16 13:22:00) [11]


> frm.(?)lbStatus.Caption := "Test"; //ессно выдает ошибку.

Точно?


> в данной ситуации IDE Delphi видимо не знает, про lbStatus;

а где описан TfrmReader?


Rentgen   (2007-01-16 13:12:00) [12]

Елки палки...
вспомнил грабли то...
как мне свойства Компонентов на Созданной форме то менять?

procedure TfrmMain.FilesListDblClick(Sender: TObject);
var
frm:TfrmReader;
begin
frm:=TfrmReader.Create(Application);
frm.(?)lbStatus.Caption := "Test"; //ессно выдает ошибку...
end;


в данной ситуации IDE Delphi видимо не знает, про lbStatus;
хотя может я незнаю чего то...


evvcom   (2007-01-12 09:34:00) [13]

> [8] Rentgen ©   (12.01.07 08:01)
> не nil, а Form2

Тогда будь готов к тому, что при убийстве Form2 твоя frmNew тоже неожиданно убьется. Обычно для формы передают Application.


Rentgen   (2007-01-12 08:01:00) [14]

не nil, а Form2


Rentgen   (2007-01-12 08:00:00) [15]

Всем спасибо!
чрез Createя пробовал.
:) оказывается тупо тупил.
делал так:

var
f:TForm;
begin
f := TForm.Create(nil);
f.Show;
end;


т.е. я не указывал TForm2;
блин...


GrayFace   (2007-01-12 02:09:00) [16]

Rentgen ©   (11.01.07 15:16) [1]
Если посмотреть код TCustomForm.Create:
 GlobalNameSpace.BeginWrite;
 try
   CreateNew(AOwner);
   if (ClassType <> TForm) and not (csDesigning in ComponentState) then
   begin
     Include(FFormState, fsCreating);
     try
       if not InitInheritedComponent(Self, TForm) then
         raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
     finally
       Exclude(FFormState, fsCreating);
     end;
     if OldCreateOrder then DoCreate;
   end;
 finally
   GlobalNameSpace.EndWrite;
 end;

То видно, что он вызывает CreteNew и делает кое-что еще. Это кое-что - загрузка .dfm-файла из ресурсов, при этом создаются все лейблы и т.п. Это если они созданы в Design-Time - просто замени CreateNew на Create.

Функции клонирования в VCL нет, есть возможность записи и чтения объектов из потока. Если надо скопировать свойства, измененные в Design-Time и компоненты, созданные в Design-Time, то
 Form2:=TForm1.CreateNew(Application);
 with TMemoryStream.Create do
   try
     WriteComponent(self);
     Position:=0;
     ReadComponent(Form2);
   finally
     Free;
   end;

Здесь, как раз, нужен CreateNew, т.к. состояние формы мы читаем сами.


RASkov   (2007-01-12 00:20:00) [17]

procedure Form2.Button1Click();
var
frmNew:TForm2;
...
frmNew:=  TForm2.Create(nil);
frmNew.ShowModal;
FreeAndNil(frmNew);


Alkid   (2007-01-11 16:19:00) [18]

Нет, не орех. Просто товарищ не понимает объектно-ориентированного программирования и как его форма с ним соотносится.
Автору топика:
Форма - это класс, который может иметь много экземпляров. Один создаётся по умолчанию и ты его видишь. Но могут быть и другие экземпляры.
Поучи объектно-ориентированное программирование и поймёшь глубинный смысл сказнного.


tesseract   (2007-01-11 15:43:00) [19]


> Как можно создать клон созданной в DesignTime формы с компонентами
> и событиями?


Create вобще то создаёт форму со всеми контролами созданными в DesignTime. Вызываеться сколько хочешь раз.......

Орех ИМХО.


clickmaker   (2007-01-11 15:27:00) [20]


> [1] Rentgen ©   (11.01.07 15:16)

ты справку-то почитай для начала по CreateNew, а?


Страницы:   1 2

Наверх

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