![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамическое окно + динамическая кнопка
Нуб © (2007-03-03 12:35:00)Не знаю где что не так
вот код :
procedure Tuhjj.Button1Click(Sender: TObject);
var
f: TForm;
b: TButton;
begin
f := TForm.Create(Self);
with f do begin
Caption := 'my new form';
Top := 400;
Left := 400;
Height := 200;
Width := 200;
end;
b := TButton.Create(f);
with f do begin
b.Caption := 'my new form';
b.Top := 500;
b.Left := 500;
b.Height := 20;
b.Width := 20;
b.Visible := true;
end;
f.Show;
end;
Вообщем, при нажатии на клавишу хочу чтобы на динамически созданном окне появилась динамически созданная кнопка , а получается только динамически созданное окно, где я неправильно написал код и если можете напишите исправленный или просто подскажите что исправить я сам исправлю, заранее спасибо
Нуб (2007-03-03 15:45:00) [1]Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
да да тогда будет Апл , сенкс за инфу
MBo (2007-03-03 15:42:00) [2]посмотри в исходник проекта (dpr)
там автосоздаваемые формы создаются с помощью
Application.CreateForm(TFormX, FormX);
при этом владельцем формы является Application, и оно отвечает за уничтожение формы при своем окончании.
Нуб (2007-03-03 15:23:00) [3]или в чем эта некорректность может проявляться ? , вот так вот будет правильнее задан вопрос
Нуб (2007-03-03 15:22:00) [4]тогда задам вопрос по-другому :) , почему так ?
Джо (2007-03-03 15:21:00) [5]> в чем здесь правда ?
Правда в том, что MBo написал, цитирую: «А формусоздаешь некорректно, стоит Application указывать в качестве Owner».
Нуб (2007-03-03 15:19:00) [6]а почему Application ? я вот вычитал на http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342следующее :
"TButton.Create( AOwner : TObject );
где указан Owner , то есть "хозяин", создаваемого объекта. Хозяин компонента отвечает за его корректное удаление и освобождение памяти. В качестве хозяина мы передаем ему панель PanelTest, это означает, что при удалении PanelTest будет удалена и наша кнопка. Если в качестве параметра указать nil, то и заботиться об удалении кнопки придется самим."
в моем случае я хозяина сделал frm - ссылка на экземпляр класа TForm - что так работает , что так ерроров не выскакивало, в чем здесь правда ?
MBo (2007-03-03 15:09:00) [7]ошибка у тебя была в том, что не назначал Parent
Visible писать не нужно, по умолчанию и так True
А форму создаешь некорректно, стоит Application указывать в качестве Owner
(2007-03-03 15:00:00) [8]Удалено модератором
Нуб (2007-03-03 14:55:00) [9]после всяческий заморочек получился код (для новичков таких как я советую поюзать код и дописать чего то свое, получил много опыта :), сам писал хотя сегодня с утра еще не знал как создается что-то динамически :) )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tfrm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Procedure OnClickButton(Sender: TObject);
Procedure OnClickBtn1(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frm: Tfrm;
f: TForm;
b: TButton;
edt1, edt2 : TEdit;
implementation
{$R *.dfm}
procedure Tfrm.Button1Click(Sender: TObject);
begin
f := TForm.Create(frm);
with f do begin
Caption := 'my new form';
Position := poDesktopCenter;
Top := 800;
Left := 800;
Height := 300;
Width := 400;
end;
b := TButton.Create(f);
with b do begin
Parent := f;
Caption := 'close';
Top := 200;
Left := 150;
Height := 50;
Width := 100;
Visible := true;
OnClick := OnClickButton;
Position := poDesktopCenter;
end;
f.Show;
end;
Procedure Tfrm.OnClickButton(Sender: TObject);
var lbl : TLabel;
btn1 : TButton;
Begin
lbl := TLabel.Create(f);
with lbl do begin
Parent := f;
Caption := 'hello';
Top := 10;
Left := 20;
Height := 50;
Width := 100;
Font.PixelsPerInch := 20;
Font.Color := clRed;
Visible := true;
end;
edt1 := TEdit.Create(f);
edt2 := TEdit.Create(f);
with edt1 do begin
Parent := f;
Caption := 'hello';
Top := 10;
Left := 150;
Height := 30;
Width := 50;
Visible := true;
end;
with edt2 do begin
Parent := f;
Caption := 'hello';
Top := 50;
Left := 150;
Height := 30;
Width := 50;
Visible := true;
end;
btn1 := TButton.Create(f);
with btn1 do begin
Parent := f;
Caption := 'Summa';
Top := 30;
Left := 210;
Visible := true;
OnClick := OnClickBtn1;
end;
End;
Procedure Tfrm.OnClickBtn1(Sender: TObject);
var lbl: TLabel;
begin
lbl :=TLabel.Create(f);
with lbl do begin
Parent := f;
Font.PixelsPerInch := 20;
Caption := 'Summa = ' + IntToStr(StrToInt(Trim(edt1.Text)) + StrToInt(Trim(edt2.Text)));
Top := 100;
Left := 20;
Visible := true;
end;
end;
end.
MBo (2007-03-03 12:47:00) [10]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342