Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Form.Create (https://www.delphipraxis.net/28708-probleme-mit-form-create.html)

Flofu 28. Aug 2004 23:11


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

Christopher 28. Aug 2004 23:34

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;

Andreas2k 28. Aug 2004 23:43

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

Christopher 28. Aug 2004 23:55

Re: Probleme mit Form.Create
 
Stimmt, Andreas hat recht! Das ist mir garnicht aufgefallen :roll: Da hilft dann wirklich nur eine genuaere Beschreibung weiter,..

nailor 29. Aug 2004 00:04

Re: Probleme mit Form.Create
 
Liste der Anhänge anzeigen (Anzahl: 1)
siehe anhang.

Christopher 29. Aug 2004 00:15

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.

himitsu 29. Aug 2004 01:18

Re: Probleme mit Form.Create
 
Also bei mir geht das, aber nur, wenn ich dort noch ein bissl was Wichtiges einfüge/anpasse...

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 := 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]
und dann noch ein bissl (rück)optimieren - da ja ein dynamische Array bei 0 beginnt und nicht bei 1.
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.

nailor 29. Aug 2004 01:43

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.

jfheins 29. Aug 2004 11:50

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.

himitsu 29. Aug 2004 12:26

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 01:25 Uhr.
Seite 1 von 2  1 2      

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