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/)
-   -   TLabel entfernen (https://www.delphipraxis.net/114255-tlabel-entfernen.html)

khh 22. Mai 2008 10:51


TLabel entfernen
 
hallo zusammen,
ich entferne im mousedown ereignis meines TLabel mit :
Application.ReleaseComponent(TComponent(self));
das entsprechende label wieder.
das funktioniert solange ich die Labels in der Reihenfolge in der sie erstellt wurden wieder entferne. Sobald ich die Reihenfolge ändere bekomme ich beim letzten Label das entfernt wird eine exception.

Was mach ich falsch?

Gruss KH

taaktaak 22. Mai 2008 11:01

Re: TLabel entfernen
 
Moin, Moin,
nehme an, dass dadurch das Array "Components" durcheinandergewürfelt wird. Vermutlich musst du das selbst nach jedem Löschvorgang reorganisieren, wenn die Reihenfolge willkürlich ist.

DP-Maintenance 22. Mai 2008 11:07

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
Ist ne VCL Frage

khh 22. Mai 2008 11:34

Re: TLabel entfernen
 
@ralph
ich danke dir, werd ich prüfen

Gruss Kh

Nuclear-Ping 22. Mai 2008 12:05

Re: TLabel entfernen
 
Delphi-Quellcode:
Application.ReleaseComponent(TComponent(self));
... ist aber auch nicht ganz sauber ... ? :gruebel:

khh 22. Mai 2008 12:27

Re: TLabel entfernen
 
@mario

ich weiss dass das nicht "ganz sauber" ist :-(


nochmal konkret, wie es gerade ist:
ich erstelle per mausklick auf einer TCustomControl eine Tlabel.
im mousedown des TLabels will ich diese Labels jeweils wieder entfernen können.

Wie würdest _du_ das denn lösen ?

Gruss KH

mkinzler 22. Mai 2008 12:28

Re: TLabel entfernen
 
Ich kenne mich in Lazarus nicht so aus aber vielleicht
Delphi-Quellcode:
Self.Free;

Nuclear-Ping 22. Mai 2008 12:31

Re: TLabel entfernen
 
Ja, aber Self verweist doch auf die Form?
Delphi-Quellcode:
procedure TForm1.LabelMouseDown(Sender: TObject);
begin
  if (Sender is TLabel) then
    FreeAndNil (Sender);
end;
So vielleicht?

khh 22. Mai 2008 17:17

Re: TLabel entfernen
 
hallo zusammen
self verweist nicht auf die Form sondern auf TLabel.
Ist ja auch in der procedure TMyLabel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Das bewirkt aber wohl dass ich mir auf beide Arten, sowohl mit
freeandNil(self) oder self.free oder eben Application.ReleaseComponent(TComponent(self));
den Boden unter den füssen wegziehe. Das Ergebnis ist immer eine exception :-(

mh, wie also krieg ich das letzte label weg ?


Gruss KH

Fussball-Robby 22. Mai 2008 17:21

Re: TLabel entfernen
 
Zitat:

Zitat von khh
hallo zusammen
self verweist nicht auf die Form sondern auf TLabel.
Ist ja auch in der procedure TMyLabel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Nein. Die Procedure lautet TForm1.MyLabel.MouseDown. Self verweist immer auf die Instanz der Klasse, in der die Methode ausgeführt wird, und da das Label auf der Form liegt, zeigt Self auf die Form.


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