![]() |
TLabel Probleme beim freigeben
Hallo @all
Ich habe ein kleines Problem mit dem ich nicht weiter komme. Während der Laufzeit des Programm erstelle ich TLabels und will die auch wieder während der Laufzeit löschen. Nun, also zum Problem... Ich kann die TLabels nicht mehr löschen da ich immer den Fehler des Index außerhalb des gültigen Bereiches komme. Der Index ist jedoch zum Zeitpunkt 5 und componentcount hat 62 Objekte zu diesem zeitpunkt...:( Ein Hinweis noch... Lösche ich den TLabel mit Namen direkt funktioniert es (z.B. Label6.free) Zur Entwurfszeit weiß ich jedoch noch nicht wieviele TLabel ich bekomme. Wo ist mein Fehler????? Hier erst einmal der Source Code zum erstllen.
Delphi-Quellcode:
procedure TForm6.BitBtn10Click(Sender: TObject);
var x,y:integer; a:TLabel; begin x:=1; for y:=0 to componentcount-1 do if components[y]is TLabel then x:=x+1; a:=TLabel.Create(Form6); a.name:='Label'+inttostr(x); a.Parent:=Form6; a.Left:=100; a.Font.Size:=12; a.Font.Style:=[fsbold]; a.Top:=50; a.tag:=37; a.OnMouseMove:=Image1Mousemove; a.OnClick:=statictext6click; end; Hier das Procedure zum löschen.
Delphi-Quellcode:
procedure TForm6.BitBtn8Click(Sender: TObject);
var x:integer; f:textfile; a:Timage; b:TMemo; c:TLabel; s:string; begin opendialog1.filterindex:=1; if OpenDialog1.Execute then begin x:=0; while x<componentcount-1 do if (components[x])is TLabel then begin with components[x]do begin if (Name<>'Label1')and(Name<>'Label2')and(Name<>'Label3') and(Name<>'Label4')and(Name<>'Label5')and(Name<>'Form6') then begin components[x].free; x:=x-1; end; end; x:=x+1; end; Danke für eure Hilfe im Vorraus Rainer Groer [edit=Phoenix]Delphi-Tags eingefügt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit] |
Re: TLabel Probleme beim freigeben
Beim Löschen die Schleife immer in umgekehrter Richtung
|
Re: TLabel Probleme beim freigeben
Hallo @mkinzler
Delphi-Quellcode:
ok, habe ich geändert, jedoch ist mein Problem noch immer das gleiche und auch die Gleiche Fehlermeldung.
x:=componentcount-1;
while x>-1 do begin if (components[x])is TLabel then begin with components[x]do begin if (Name<>'Label1')and(Name<>'Label2')and(Name<>'Label3') and(Name<>'Label4')and(Name<>'Label5')and(Name<>'Form6') then components[x].free; end; end; x:=x-1; end; Mein programmtext war nicht ganz so schön, da ich durch das löschen meiner TImages und TMemos bedingt, meinen Zähler um 1 reduziert habe, aber man weiß ja nie ob es nicht doch auswirkungen hat.... Vielen Dank auch das du dich meines Problems annimmst Grüsse Rainer Groer [edit=Matze][delphi]-Tags eingefügt. Wie bereits geschrieben wurde: Bitte schließe deinen Source zukünftig selbst in die [delphi]-Tags ein. MfG, Matze[/edit] |
Re: TLabel Probleme beim freigeben
Hast Du die Labels beim Anlegen benannt?
[edit] Denkfehler, spielt keine Rolle, sry [/edit] |
Re: TLabel Probleme beim freigeben
Mit andersrum meine ich von oben, also absteigend
Denn wenn du von vorne zählst, ändert das Löschen den Index der folgenden Elemente und sorgt dafür das die Grenze nicht mehr existiert. |
Re: TLabel Probleme beim freigeben
Delphi-Quellcode:
for x := componentcount-1 downto 0 do
begin if ((components[x])is TLabel) and (components[x].Name<>'Label1') and (components[x].Name<>'Label2') and (components[x].Name<>'Label3') and (components[x].Name<>'Label4') and (components[x].Name<>'Label5') and (components[x].Name<>'Label6') then TLabel(components[x]).free; end; |
Re: TLabel Probleme beim freigeben
Hallo @DeddyH
Ja, die Labels werden benannt und zwar in der logischen reihenfolge, d.h. ich schaue erst einmal zur Laufzeit wieviele TLabels aktuell existieren, dann setzte ich eine Variable auf diesen Punkt und dann wird der Name vergeben Label plus die Variable. @ MKinzler Hatte ich schon verstanden, da ich jedoch hochgezählt hatte, habe ich nach jedem löschen eines Objektes den Zähler wieder um eins erniedrigt, componentcount wird automatisch um einen reduziert und voila.. meine Grenze existier und funktioniert... das hatte ich gemeint mit...mein Code sah nicht so schön aus zu dem zeitpunkt Eleganter ist die Lösung von Anfang an von dir mit von oben nach unten zählen! Grüsse Rainer PS... @Matze und Phoenix kann mir einer erklären wie ich meien Code formatiere das er so nett aussieht wie bei Euch Danke Rainer Groer |
Re: TLabel Probleme beim freigeben
Code markieren und auf den Button "Delphi" klicken oder von Hand in
Delphi-Quellcode:
einschließen. Hast Du übrigens meinen Code mal ausprobiert?
und
|
Re: TLabel Probleme beim freigeben
Zitat:
|
Re: TLabel Probleme beim freigeben
@ DeddyH
Dein Code funktioniert SUPER!!! Vielen Dank Warum es bei deiner Routine geht und bei mir nicht ging ist mir jetzt auch klar geworden!!! Ich hatte nich TLabel(components[x]).free sondern nur components[x].free Bei meinen TImages und TMemos hat das gelangt.....hmmmmm... VIELEN DANK auf jeden Fall für die schnelle Hilfe Rainer Groer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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-2025 by Thomas Breitkreuz