Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fomular mit Button zur Laufzeit erstellen (https://www.delphipraxis.net/110729-fomular-mit-button-zur-laufzeit-erstellen.html)

Rifman 23. Mär 2008 16:33


Fomular mit Button zur Laufzeit erstellen
 
Hallo,
ich versuche ein Formular mit Button zur Laufzeit zu erstellen, ich bekomme aber das Form ohne Button.
Delphi-Quellcode:
unit:Form2
...
procedure TForm2.FormCreate(Sender: TObject);
 var
    button:TButton;
 begin
  button := TButton.create(self);
  button.left:=10;
  button.top:=10;
  button.width:=17;
  button.height:=17;
  button.Parent := self;
 end;
dieses Formular wird auf FormMain mit einem Button Click aufgerufen
Delphi-Quellcode:
unit:TFormMain
..
procedure TFormMain.Btn1Click(Sender: TObject);
 var:
  Form: TForm2;
 begin
   Form:= TForm2.Create(self);
   Form.show;
  end;
Was mache ich denn Falsch?

Danke.

DeddyH 23. Mär 2008 16:50

Re: Fomular mit Button zur Laufzeit erstellen
 
Wieso ist button eine lokale Variable?

Dani 23. Mär 2008 16:55

Re: Fomular mit Button zur Laufzeit erstellen
 
In diesen Codezeilen ist eigentlich nichts falsch. Setz doch mal einen Haltepunkt in TForm2.FormCreate und schau, ob der Code überhaupt ausgeführt wird. Vielleicht fällt uns was auf, wenn du mal den kompletten Quellcode hochlädst.

Rifman 23. Mär 2008 22:48

Re: Fomular mit Button zur Laufzeit erstellen
 
OK, die wichtigsten Abzüge des Kodes , was das Problem betrifft sind wie folgt:
Der Aufruf im FormMain
Delphi-Quellcode:
var
  FormMain: TFormMain;

var
   FormArray :array of TVisualizeForm;
   
implementation

procedure TFormMain.StartBtnClick(Sender: TObject);
 var
   i:integer;
 begin
    for i := 0 to MBListBox.items.Count-1 do
    begin
     FormArray[i] := TVisualizeForm.Create(owner);
     FormArray[i].show;
    end;
Das Formular zum Aufrufen
Delphi-Quellcode:

type
  TVisualizeForm = class(TForm)
  procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  VisualizeForm: TVisualizeForm;
var
  button:TButton;
implementation

{$R *.DFM}
procedure TVisualizeForm.FormCreate(Sender: TObject);

 begin
  button := TButton.create(owner);
  button.left:=10;
  button.top:=10;
  button.width:=17;
  button.height:=17;
  button.Parent := self; //VisualizeForm;
 end;
Ich bin für jeden Tip Dankbar.

mkinzler 23. Mär 2008 22:50

Re: Fomular mit Button zur Laufzeit erstellen
 
Delphi-Quellcode:
constructor TVisualizeForm.[s]Form[/s]Create(Sender: TObject);
begin
    inherited Create;
...
end;

Die Muhkuh 23. Mär 2008 22:53

Re: Fomular mit Button zur Laufzeit erstellen
 
Naja, wenn er das Create Ereigniss im OI zugewiesen und umbenannt hat, dann braucht er auch kein inherited Create ;)

mkinzler 23. Mär 2008 22:54

Re: Fomular mit Button zur Laufzeit erstellen
 
Es wird aber in seinem Fall nicht aufgerufen.

Rifman 23. Mär 2008 23:12

Re: Fomular mit Button zur Laufzeit erstellen
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
constructor TVisualizeForm.[s]Form[/s]Create(Sender: TObject);
begin
    inherited Create;
...
end;

Erstmal Danke für deine Antwort,
Delphi-Quellcode:
constructor TVisualizeForm.FormCreate(Sender: TObject);

 begin
  inherited Create(self);

  button := TButton.create(owner);
  button.left:=10;
  button.top:=10;
  button.width:=17;
  button.height:=17;
  button.Parent := self; //VisualizeForm;
 end;
Das Problem besteht leider immer noch.

Die Muhkuh 23. Mär 2008 23:14

Re: Fomular mit Button zur Laufzeit erstellen
 
Hast Du mal einen Breakpoint in die Create-Procedure gesetzt und geschaut, ob der Debugger anhält?

Rifman 23. Mär 2008 23:23

Re: Fomular mit Button zur Laufzeit erstellen
 
Ja, habe ich eben grad , aber der Debugger hält gar nicht an.
Aber wieso denn?

Die Muhkuh 23. Mär 2008 23:26

Re: Fomular mit Button zur Laufzeit erstellen
 
Dann ist das Problem, dass dieses Formcreate nicht aufgerufen wird.

Klick mal die Form an, schau im OI unter Ereignisse und schaue, ob dort Dein FormCreate zugewiesen ist.

Rifman 23. Mär 2008 23:43

Re: Fomular mit Button zur Laufzeit erstellen
 
Nee, die FormCreate ist da nicht zugewiesen, und wenn ich das versuche mit dem Doppelklick zu tun, kriege ich diese Fehlermeldung:
Eigenschaft und Methode FormCreate sind nicht kompatibel
Was bedeutet das denn?

Rifman 23. Mär 2008 23:51

Re: Fomular mit Button zur Laufzeit erstellen
 
Es hat sich erledigt, und zwar wie es vorher war, aber mit der Zuweisung im OI.
Dankeschön :-D

dominikkv 24. Mär 2008 00:14

Re: Fomular mit Button zur Laufzeit erstellen
 
FormCreate ist kein Constructor, sondern ein Event das bei der Erzeugung aufgerufen wird!
Darum konntest du das im OI auch nicht zuweisen, da du daraus ein Constructor gemacht hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz