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

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

Динамическое создание формы


Mr.Grey ©   (2006-07-24 04:09:00) 

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


GrayFace   (2006-07-26 06:05:00) [1]

Чтобы обратиться извне - array of TForm2, SetLength и все дела. Еще все переменные формы 2 надо описывать в ней (в секции public, private или protected), а не var'ами. (к локальным переменным функций не относится) И переменную Form2 убери, все функции вноси в класс формы.


Джо   (2006-07-26 02:59:00) [2]

> [6] ApColEr   (25.07.06 22:40)
> А как теперь к ним обратиться?  Например,при нажатии на
> динамически созданную форму на ней создавался label?

В дизайнере переходишь на нужную форму, переключаешься на вкладку "Events" в Object Inspector'е, дважды шелкаешь на OnClick. В открывшемся редакторе кода пишешь (между begin и end):
 with TLabel.Create (Self) do
 begin
   Parent := Self;
   Left := Random (Self.Width);
   Top := Random (Self.Height);
   Caption := 'My label'
 end

При необходимости добавить StdCtrls в uses.


ApColEr   (2006-07-25 22:40:00) [3]

Loginov Dmitry, спасибо..
А как теперь к ним обратиться?  Например,при нажатии на динамически созданную форму на ней создавался label?


Loginov Dmitry   (2006-07-25 22:11:00) [4]

with TForm.Create(Self) do
begin
 Left := Random(Screen.Width);
 Top := Random(Screen.Width);
 Show;
end;

Компактнее, имхо


Zeqfreed   (2006-07-25 22:10:00) [5]

> [2] ApColEr   (25.07.06 21:58)


procedure TForm1.Button1Click(Sender: TObject);
begin
Tag := 1;

while (MessageBox(Handle, 'Создать ещё одну форму?', 'Вопрос жизни и смерти', MB_YESNO or MB_ICONQUESTION) = IDYES) do
 with TForm1.Create(Application) do begin
  Caption := 'Form #' + IntToStr(Self.Tag);
  Left := Random(Screen.Width - 100);
  Top := Random(Screen.Height - 100);
  Width := Min(Screen.Width - Left, Random(Screen.Width));
  Height := Min(Screen.Height - Top, Random(Screen.Height));
  Visible := True;
  BringToFront;
  Self.Tag := Self.Tag + 1;
 end;
end;


TForm   (2006-07-25 22:07:00) [6]

Типа так
procedure CreateForm(const X, Y: Integer);
var
Frm: TForm2;
begin
Application.CreateForm(TForm2, Frm);
Frm.Left := X;
Frm.Top := Y;
Frm.Show
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CreateForm(Random(Screen.Width), Random(Screen.Heigth));
end;


ApColEr   (2006-07-25 21:58:00) [7]

Как сделать, чтобы по нажатию на кнопку создавались каждый раз новые формы с новыми координатами неограниченное число раз?


Джо   (2006-07-24 04:11:00) [8]

Например, так:
procedure TForm1.Button1Click(Sender: TObject);
var
 Frm: TForm2;
begin
 Application.CreateForm(TForm2, Frm);
 Frm.Left := 10;
 Frm.Top := 10;
 Frm.Show
end;


Наверх

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