Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Create(Self) undefiniert? (https://www.delphipraxis.net/111986-create-self-undefiniert.html)

Privateer3000 12. Apr 2008 21:14


Create(Self) undefiniert?
 
Hallo mit folgender Procedur sollen Buttons auf ein Panel
gezeichnet werden. Die PRoc ist aber keiner Komponente
zugeordnet, sonder wird wie eine funktion aufgerufen.
Nun meldet der Compiler das "Self undefiniert" sei?
Warum?
Eine Nebenfrage, wenn die Buttons neugezeichnet werden sollen
müssen die "alten" gelöscht werden. Wie wird dies
bewerkstelligt?

Delphi-Quellcode:
procedure buttonsetzen(setzq:TADOQuery);
var j,spalte,zeile: Integer; aBut:TXiButton;
begin
setzq.Close; setzq.SQL.Clear;
setzq.SQL.Add('SELECT * FROM buttons ORDER BY posit');
setzq.Open; setzq.First;
j:=0;
while not setzq.Eof do begin
Spalte := j mod 6;
  Zeile := j div 6;
  aBut:=TXiButton.Create(Self);
  aBut.Parent:=panelen.pans.FindComponent(setzq.fieldbyname('eben_name').AsString)as TPanel;
  aBut.Visible:=True;
  aBut.Left:=Spalte*115; aBut.Top:=Zeile*45;
  aBut.Width:=113;
  aBut.Height:=43;
  aBut.ShowHint:=True;
  aBut.Font.Size:=setzq.fieldbyname('fogr').AsInteger;
  //aBut.Font.Style:=[fsbold];
  aBut.Hint:=setzq.fieldbyname('anzeige').asString;
  aBut.ColorScheme:=GetCoSche(setzq.fieldbyname('farbe').AsString);
  aBut.Caption:=setzq.fieldbyname('anzeige').AsString;
  aBut.Tag:=setzq.FieldByName('wert').AsInteger;
  //aBut.OnClick:=p1_1click;
   setzq.Next;
  inc(j);
end;
end;
Grüße

mkinzler 12. Apr 2008 21:16

Re: Create(Self) undefiniert?
 
Ausserhalb einer Klasse gibt es natürlich kein Self

Privateer3000 12. Apr 2008 21:58

Re: Create(Self) undefiniert?
 
Danke für die Antwort.
Was aber dann? Name des Form auf dem
die Buttons kreiert werden?

mkinzler 12. Apr 2008 22:01

Re: Create(Self) undefiniert?
 
Also entweder Nil, das Formular oder die Prozedur zur Methode machen (am Besten)

Privateer3000 12. Apr 2008 22:11

Re: Create(Self) undefiniert?
 
Welche Methode eignet sich am besten?
Wie im 2. Teil der Frage gesagt:
die buttons müssen zwangsläufig während der Laufzeit
auch mal neu gezeichnet werden.
Wie zerstört man die Buttons am Besten, bevor
sie mit der gleichen procedure (wie oben) neu
gezeichnet werden?
Wie müsste obiger Procedure aussehen?

Danke für die Antworten

mkinzler 12. Apr 2008 22:14

Re: Create(Self) undefiniert?
 
Zitat:

Welche Methode eignet sich am besten?
Wandle die Prozedur einfach in eine Methode um.
Zitat:

die buttons müssen zwangsläufig während der Laufzeit
auch mal neu gezeichnet werden.
Wie zerstört man die Buttons am Besten, bevor
sie mit der gleichen procedure (wie oben) neu
gezeichnet werden?
Warum willst du diese zerstötrn, um sie neuzuzeichnen?

Privateer3000 12. Apr 2008 22:31

Re: Create(Self) undefiniert?
 
Was meinst du mit umwandeln?
Was und wie?

Da die Positionen der Buttons sich ändern können
müssen aller neu gezeichnete werden.
Die Buttons haben als parent ein Panel,
kann das vielleicht eine Rolle spielen?
Fakt ist, dass mit obiger Procedure nicht
nur Buttons neu, sondern auch wieder gezeichnet
werdem sollen, nämlich dann wenn eine Änderung
in der Anzahl oder Position der Button vorgenommen
wurde.

Fussball-Robby 12. Apr 2008 22:32

Re: Create(Self) undefiniert?
 
Verwalte die Buttons doch in einem Array, dann musst du bei Änderungen nur auf die einzelnen Buttons zugreifen und deren Position ändern.

mkinzler 12. Apr 2008 22:39

Re: Create(Self) undefiniert?
 
Zitat:

Was meinst du mit umwandeln?
Delphi-Quellcode:
procedure TForm1.buttonsetzen(setzq:TADOQuery);
Zitat:

Da die Positionen der Buttons sich ändern können
müssen aller neu gezeichnete werden.
Dann verschiebst man diese und braucht sie nicht Neuerzeugen.
Ich würde das Erzeugen und Verschieben trennen.

Dunkel 12. Apr 2008 23:41

Re: Create(Self) undefiniert?
 
Zitat:

Zitat von Fussball-Robby
Verwalte die Buttons doch in einem Array, dann musst du bei Änderungen nur auf die einzelnen Buttons zugreifen und deren Position ändern.

Eine TObjectList ist dafür wesentlich komfortabler.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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