Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Вниздинамическое окно + динамическая кнопка Найти похожие ветки
← →
Нуб (2007-03-03 12:35) [0]Не знаю где что не так
вот код :
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;
Вообщем, при нажатии на клавишу хочу чтобы на динамически созданном окне появилась динамически созданная кнопка , а получается только динамически созданное окно, где я неправильно написал код и если можете напишите исправленный или просто подскажите что исправить я сам исправлю, заранее спасибо
← →
MBo © (2007-03-03 12:47) [1]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342
← →
Нуб (2007-03-03 14:55) [2]после всяческий заморочек получился код (для новичков таких как я советую поюзать код и дописать чего то свое, получил много опыта :), сам писал хотя сегодня с утра еще не знал как создается что-то динамически :) )
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.
← →
имя (2007-03-03 15:00) [3]Удалено модератором
← →
MBo © (2007-03-03 15:09) [4]ошибка у тебя была в том, что не назначал Parent
Visible писать не нужно, по умолчанию и так True
А форму создаешь некорректно, стоит Application указывать в качестве Owner
← →
Нуб (2007-03-03 15:19) [5]а почему Application ? я вот вычитал на http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342 следующее :
"TButton.Create( AOwner : TObject );
где указан Owner , то есть "хозяин", создаваемого объекта. Хозяин компонента отвечает за его корректное удаление и освобождение памяти. В качестве хозяина мы передаем ему панель PanelTest, это означает, что при удалении PanelTest будет удалена и наша кнопка. Если в качестве параметра указать nil, то и заботиться об удалении кнопки придется самим."
в моем случае я хозяина сделал frm - ссылка на экземпляр класа TForm - что так работает , что так ерроров не выскакивало, в чем здесь правда ?
← →
Джо © (2007-03-03 15:21) [6]> в чем здесь правда ?
Правда в том, что MBo написал, цитирую: «А форму создаешь некорректно, стоит Application указывать в качестве Owner».
← →
Нуб (2007-03-03 15:22) [7]тогда задам вопрос по-другому :) , почему так ?
← →
Нуб (2007-03-03 15:23) [8]или в чем эта некорректность может проявляться ? , вот так вот будет правильнее задан вопрос
← →
MBo © (2007-03-03 15:42) [9]посмотри в исходник проекта (dpr)
там автосоздаваемые формы создаются с помощью
Application.CreateForm(TFormX, FormX);
при этом владельцем формы является Application, и оно отвечает за уничтожение формы при своем окончании.
← →
Нуб (2007-03-03 15:45) [10]Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
да да тогда будет Апл , сенкс за инфу
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c