![]() |
Komponenten während der Laufzeit erstellen und löschen
Guten Tag,
ich erstelle während der Laufzeit Labels, der Code ist hierfür:
Delphi-Quellcode:
Die Labels werden auf einem 2. Form erstellt.
procedure CreateLabel (Form:TForm; Text:string; X,Y:Integer);
var Lab : TLabel; begin Lab := TLabel.Create(Form); Lab.Parent := Form; Lab.Caption := Text; Lab.Left := X; Lab.Top := Y; end; Wie kann ich es am geschicktesten anstellen, dass die Label gelöscht werden, sobald Form2 geschlossen wird und neu erstellt werden, sobald Form2 wieder aufgerufen wird? |
AW: Komponenten während der Laufzeit erstellen und löschen
Solcherlei Erzeugung gehört ins OnCreate des Formulars, und dann kann/sollte die Zerstörung der Objekte im OnDestroy (oder OnClose) gemacht werden.
Andererseits setzt du den Owner des Labels bereits auf das Formular, und daher ist selbiges dafür zuständig, es wieder zu wegzuräumen, wenn das Formular zerstört wird. Grüße Dalai |
AW: Komponenten während der Laufzeit erstellen und löschen
Notfalls in eine Liste speichern und diese im FormClose durchgehen und alle Labels entfernen.
|
AW: Komponenten während der Laufzeit erstellen und löschen
Hallo,
Zitat:
passiert das bereits im Destruktor des Forms. siehe Dalai Und zum Anlegen ist bereits alles gesagt. |
AW: Komponenten während der Laufzeit erstellen und löschen
Zitat:
Deine Labels haben alle keine Namen, dadurch sind sie leicht zu identifizieren und von Labels zu unterscheiden, die im Designer erzeugt wurden. Du könntest Dir also eine weitere Hilfsfunktion schreiben, wie
Delphi-Quellcode:
procedure ClearLabels (Form:TForm);
var LComp: TComponent; I : integer; begin for I:= Form.ComponentCount -1 downto 0 do begin LComp := Form.Components[I]; if (LComp is TLabel) and (LComp.Name = '') then LComp.Free; end; end; |
AW: Komponenten während der Laufzeit erstellen und löschen
Hallo,
Zitat:
Delphi selbst vergibt einen Namen, wenn keiner angegeben wird. |
AW: Komponenten während der Laufzeit erstellen und löschen
Zitat:
Das Problem ist also, soweit gelöst, allerdings habe ich eine weitere Frage: Ich arbeite mit der Funktion Canvas und den Labels. Das Zeichnen lasse ich in OnPaint (+ Canvas.Refresh) und OnResize stattfinden (sofern es eine bessere Möglichkeit gibt, bin ich gerne offen für Vorschläge). Scheinbar werden nun aber andauernd die Labels erstellt (sie flackern) und teilweise, sind die Labels an Positionen wo sie nicht sein sollten. Gibt es eine effektive Methode um zu verhindern, dass ganz viele Labels übereinander, an der gleichen Position erstellt werden?
Delphi-Quellcode:
Stehe momentan ziemlich auf dem Schlauch :? :(
procedure TForm2.FormPaint(Sender: TObject);
begin zeichnen(self, 1); Canvas.Refresh; end; procedure TForm2.FormResize(Sender: TObject); begin DestroyLabel; Button1.Left := Round(ClientWidth * 0.0482954545454545); Button1.Top := Round(ClientHeight * 0.8140589569160998); Button1.Width := Round(ClientWidth * 0.9034090909090909); Canvas.Brush.Color := clMenu; Canvas.FillRect(Rect(0,0, Width, Height)); zeichnen(self, 1); end; |
AW: Komponenten während der Laufzeit erstellen und löschen
Zitat:
|
AW: Komponenten während der Laufzeit erstellen und löschen
[QUOTE=Pytroxis;1430599]
Zitat:
|
AW: Komponenten während der Laufzeit erstellen und löschen
Zitat:
Deine Idee mit dem Draw Text erscheint, mir allerdings wirklich als eine bessere alternative, so erspare ich mir einiges an schreib arbeit und außerdem scheint es mir damit einfacher zu sein ein dynamisches System zu erschaffen! Edit: Durch den Vorschlag von Peterbelow konnte ich das gesamte System nun besser umsetzen, daher besteht das oben genannte Problem auch nicht mehr. Nun hatte ich eine neue Idee, wobei ich wieder einige Probleme beim realisieren habe: Beim zeichnen wird nicht nur ein Objekt sondern dynamisch viele (je nach Eingabe des Benutzers) erstellt (-> Kein Problem). Natürlich werden ab einer bestimmten Anzahl, die Objekte außerhalb des Programmes gezeichnet. Gibt es eine gute Möglichkeit zu scrollen? Habe Online die Idee gesehen, dass man jedesmal die Objekte neuzeichnet und verschiebt je nach Stellung der Scrollbar aber um ehrlich zu sein habe ich keine Ahnung wie ich das am geschicktesten umsetzen soll, bzw. gibt es womöglich eine schönere/bessere alternative? :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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