Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1172911428
Chaval'
2007-03-03 11:43
2007.03.25
panel


15-1172580322
palva
2007-02-27 15:45
2007.03.25
Что читают в метро


15-1172575389
Empleado
2007-02-27 14:23
2007.03.25
"Blood Diamond"


2-1172841183
Sapos
2007-03-02 16:13
2007.03.25
Сохранность данных


1-1169977395
так себе
2007-01-28 12:43
2007.03.25
Добавить кнопку в диалог





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский