TLabel entfernen

Rund um die LCL und andere Komponenten
khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

TLabel entfernen

Beitrag von khh »

Hallo zusammen,
ich hab schon wieder ne frage zu Tlabel.
Ich möchte auf Mausklick mein TLabel wieder entfernen können.
Mit : freeandNil(self); zieh ich mir aber ja den Boden unter den Füssen weg und bekomme eine Exception.
Wie kann ich das im onClick-event des TLabel umsetzten?

Danke Gruss
KH

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: TLabel entfernen

Beitrag von theo »

Dazu gab's heute schon mal eine Antwort auf der Mailing-Liste. Kannst es ja mal so probieren:

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ReleaseComponent(TComponent(Sender));
end;

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

@theo
danke dir,
Dazu gab's heute schon mal eine Antwort auf der Mailing-Liste.
sorry hab ich nicht gesehen

Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo zusammen,
also 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

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Beitrag von ralli »

Also ich benutze in meinem dbmaker, dessen Sourcecode ich ja mitveröffentlicht habe, folgende Routine, um TLabel und TEdit wieder von einem Frmular zu entfernen, weil ja jede neue Datenbank eine andere Struktur besitzt und bei der Umschaltung von dem Tabellenmodus zur Einzelsatzdarstellung wird diese Routine aufgerufen:

Code: Alles auswählen

procedure TForm1.form_clear;
 
var I : Integer;
 
var DBLabel : TLabel;
 
var DBEdit    : TDBEdit;
 
var DBMemo : TDBMemo;
 
begin
 
If Datenbank.Active then
 
begin
 
for i := 0 to Datenbank.FieldCount -1 do
 
begin
 
// sucht nach Name
 
DBEdit := TDBEdit(FindComponent('Editfeld_' + IntToStr(i)));
 
// entfernt Komponente
 
DBEdit.Free;
 
DBLabel := TLabel(FindComponent('Label_' + IntToStr(i)));
 
DBLabel.Free;
 
DBMemo := TDBMemo(FindComponent('Memofeld_' + IntToStr(i)));
 
DBMemo.Free;
 
end;
 
end;
 
end;
Vielleicht hilft es ja.

ralli

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Solang die Komponenten einen Parent haben z.b. ein panel braucht ihr beide nur das zu Freen und fpc kümmert sich selbständig um die Freigabe der anderen Klassen, wenn ihr das nicht sauber lösen könnt ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Aber die Frage war doch, wie man eine Komponente in ihrer eigenen Ereignisbehandlungsroutine freigibt.

Wie sinnvoll das ist, kann ich nicht beurteilen, da khh immer nur "Schrittchen-Fragen" stellt. ;-)

http://www.lugbz.org/documents/smart-qu ... .html#goal" onclick="window.open(this.href);return false;

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo!
Aber die Frage war doch, wie man eine Komponente in ihrer eigenen Ereignisbehandlungsroutine freigibt.
Geht das denn überhaupt? Oder darf das überhaupt gehen? Muss nicht eine externe Procedure eine Komponennte freigeben?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn FPK mitliest, könnte er ja mal was dazu sagen. Scheint wirklich nicht zu gehn. Nen Grund dafür fällt mir aber auch nicht ein.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Application.ReleaseComponent(); klappt nicht?

http://www.mail-archive.com/lazarus@laz ... 01847.html" onclick="window.open(this.href);return false;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

A, na da ist doch ne eindeutige Aussage dazu...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Doch "Application.ReleaseComponent(Label1)" in "procedure Form1.Label1Click(Sender)" funktioniert. Da ist was anderes nicht o.K.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

Hallo zusammen,
Doch "Application.ReleaseComponent(Label1)" in "procedure Form1.Label1Click(Sender)" funktioniert. Da ist was anderes nicht o.K
das funktioniert bis zum letzten Label, erst da schmiert das Programm ab.

PS das mit den
Wie sinnvoll das ist, kann ich nicht beurteilen, da khh immer nur "Schrittchen-Fragen" stellt

werde ich zukünfig beherzigen

Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

Hallo zusammen,
Aber die Frage war doch, wie man eine Komponente in ihrer eigenen Ereignisbehandlungsroutine freigibt.
Das ist der Kern der Frage
Gruss KH

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo khh!
Alsoo ich erzeuge zur Laufzeit mehrere :
MyLabel := TMyLabel.create(self);
Sind das die Labels? Wenn ja, dann muss ich das auch erst mal testen. Ich habe nur mit dem Formulareditor getestet und da geht alles weg, bis auf's letzte.

Brint's denn was, wenn das lezte Label nur versteckt wird?

Wenn beim lezten Label gar nix mehr geht, (also immer abstürzt) kann dann sein das kein Handle mehr da ist?

Sind das denn sehr viele Labels? So das sie nicht schon im Formulareditor erzeugt werden können (Visible := Fals;). Und erst wenn sie gebraucht werden, werden sie ein und aus geblendet. Geht das nicht?

Tschüsss erst mal!

Antworten