Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

динамическое окно + динамическая кнопка   Найти похожие ветки 

 
Нуб   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
6-1160395281
progmax
2006-10-09 16:01
2007.03.25
Таймер в cgi


11-1152041629
FifteenTen
2006-07-04 23:33
2007.03.25
Как отследить отжатие кнопки мыши


1-1170327389
vtur
2007-02-01 13:56
2007.03.25
Обмен сообщениями между приложениями


1-1170172428
RASkov
2007-01-30 18:53
2007.03.25
Ярлык


11-1148150920
Виталий(гость)
2006-05-20 22:48
2007.03.25
Неожиданно возникшие Проблемы :-(