![]() |
Probleme mit Form.Create
Hi habe ein kleines Problem. Möchte der Form.Create Prozedur noch einen Parameter übergeben zum weiterarbeiten, das lehnt mein Programm ab: der Code:
type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject; uebergabe: Byte); private { Private-Deklarationen } public { Public-Deklarationen } Panel : array of TPanel; end; var Form2, FormKnopf1, FormKnopf2 : TForm2; implementation {$R *.DFM} procedure TForm2.Button1Click(Sender: TObject); begin close; end; procedure TForm2.FormCreate(Sender: TObject; uebergabe : byte); var i : Byte; begin for i := 1 to uebergabe do begin Panel[i] := TPanel.Create(self); with Panel[i] do begin parent := self; top := 100; left := 25 +((i-1)*35); height := 33; width := 33; caption := IntTo Str(i); end; end; end; Danke schon mal |
Re: Probleme mit Form.Create
Warum das nicht geht, kann ich auch nicht sagen. Anscheinend darf man die Create-Procedure nicht verändern. Aber ein Vorschlag zum Workaround:
Mach dir eine Procedure, die genau die erweiterung deiner Create-Procedure ernthält und rufe in dieser die FormCreate Procedure auf:
Delphi-Quellcode:
/// Dies muss in Die TForm1:
procedure CreateFormWithPanels( uebergabe: Byte); type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public Panel : array of TPanel; end; var Form2, FormKnopf1, FormKnopf2 : TForm2; implementation {$R *.DFM} procedure TForm2.Button1Click(Sender: TObject); begin close; end; procedure TForm2.FormCreate(Sender: TObject); begin //Stay end; procedure TForm1.CreateFormWithPanels(uebergabe : Byte); var i : Byte; begin Form2 := TForm2.Create(); for i := 1 to uebergabe do begin Panel[i] := TPanel.Create(self); with Panel[i] do begin parent := self; top := 100; left := 25 +((i-1)*35); height := 33; width := 33; caption := IntTo Str(i); end; end; end; |
Re: Probleme mit Form.Create
Ich glaub du hast da einen kleinen Denkfehler :gruebel:
procedure FormCreate(Sender: TObject;); ist doch ein Ereignis der Klasse TForm und wird vom Objekt ausgeführt in diesem fall also wenn das Form erstellt wird, wann also willst du da einen weiteren Parameter übergeben wenn du die Funktion gar nicht manuell aufrufst zumindest bei FormCreate macht das meiner Meinung nach keinen Sinn oder :?: Kannst du mal genau schreiben was du machen willst :zwinker: Ich bin allerdings auch kein Profi :roll: Gruß Andreas |
Re: Probleme mit Form.Create
Stimmt, Andreas hat recht! Das ist mir garnicht aufgefallen :roll: Da hilft dann wirklich nur eine genuaere Beschreibung weiter,..
|
Re: Probleme mit Form.Create
Liste der Anhänge anzeigen (Anzahl: 1)
siehe anhang.
|
Re: Probleme mit Form.Create
@ nailor: Was sind denn die Vorzüge deines Beispiels. Ich erkenne den Sinn des Quelltextes nicht (nicht böse gemeint). Ich denke wir können im ohne genaue beschreibung seines Ziels nicht helfen. Sag das nur, damit Flofu das nicht mißversteht und verwirrt wird.
|
Re: Probleme mit Form.Create
Also bei mir geht das, aber nur, wenn ich dort noch ein bissl was Wichtiges einfüge/anpasse...
Code:
und dann noch ein bissl (rück)optimieren - da ja ein dynamische Array bei 0 beginnt und nicht bei 1.
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]var[/b] i : Byte; [b]begin[/b] [color=red]SetLength(Panel, uebergabe);[/color] [b]for[/b] i := 1 [b]to[/b] uebergabe [b]do begin[/b] Panel[i[color=red] - 1[/color]] := TPanel.Create(self); [b]with[/b] Panel[i [color=red]- 1[/color]] [b]do begin[/b] parent := self; top := 100; left := 25 + ((i - 1) * 35); height := 33; width := 33; caption := IntToStr(i); [b]end;[/b] [b]end;[/b] [b]end;[/b]
Code:
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]var[/b] i : Byte; [b]begin[/b] [color=red]SetLength(Panel, uebergabe);[/color] [b]for[/b] i := [color=blue]0[/color] [b]to[/b] uebergabe [color=blue]- 1[/color] [b]do begin[/b] Panel[[color=blue]i[/color]] := TPanel.Create(self); [b]with[/b] Panel[[color=blue]i[/color]] [b]do begin[/b] parent := self; top := 100; left := 25 + ([color=blue]i[/color] * 35); height := 33; width := 33; caption := IntToStr(i [color=blue]+ 1[/color]); [b]end;[/b] [b]end;[/b] [b]end;[/b] ach ja - nicht vergessen: in Uses muß natürlich auch die ExtCtrls mit drin sein. |
Re: Probleme mit Form.Create
das mein code eine form enthält, der man im create einen paramter übergeben kann, mit dem man dann machen kann, was man will, also auch eine entsprechende zahl panels erstellen. wenn keine zahl übergeben wird, wird ein defaultwert genutzt.
|
Re: Probleme mit Form.Create
Dem Form1.Create einen Parameter zu übergeben, geht meines wissens nicht.
(Kann sein, dass ich jetzt ins Fettnäpfchen trete, Ich versuchs trotzdem.) Das was in der Unit erscheint, ist nur die Vorwärtsdeklaration und die Prozedur. Ergo, müsste der Parameter, wenn man ihn sowohl in der Vorwärtsdeklaration, als auch in der Prozedur, als auch im Aufruf (Programmquelltext) einbaut, zum Zeitpunkt des Aufrufs (siehe Programmquelltext) bereits vorhanden sein. Da zu diesem Zeitpunkt aber so gut wie noch nichts vorhanden ist, kannst du auch nichts übergeben. Hoffe das war (in den Grundzügen) richtig. Die Lösung wäre eine Prozedur, die diese Panels erstellt, und im Form1.Create aufgerufen wird. |
Re: Probleme mit Form.Create
Das mit der extra Prozedure wäre auch möglich. (siehe jfheins)
Und eine [b]globale/b[] Variable geht auch - so hatte ichs jedenfallt gemacht. Läuft Beides auf was Ähnliche hinaus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz