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 TLabel Probleme beim freigeben (https://www.delphipraxis.net/118559-tlabel-probleme-beim-freigeben.html)

RaGro 10. Aug 2008 12:36


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]

mkinzler 10. Aug 2008 12:44

Re: TLabel Probleme beim freigeben
 
Beim Löschen die Schleife immer in umgekehrter Richtung

RaGro 10. Aug 2008 13:14

Re: TLabel Probleme beim freigeben
 
Hallo @mkinzler

Delphi-Quellcode:
   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;
ok, habe ich geändert, jedoch ist mein Problem noch immer das gleiche und auch die Gleiche Fehlermeldung.

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]

DeddyH 10. Aug 2008 13:18

Re: TLabel Probleme beim freigeben
 
Hast Du die Labels beim Anlegen benannt?

[edit] Denkfehler, spielt keine Rolle, sry [/edit]

mkinzler 10. Aug 2008 13:19

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.

DeddyH 10. Aug 2008 13:23

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;

RaGro 10. Aug 2008 13:32

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

DeddyH 10. Aug 2008 13:34

Re: TLabel Probleme beim freigeben
 
Code markieren und auf den Button "Delphi" klicken oder von Hand in
Delphi-Quellcode:
 und
einschließen. Hast Du übrigens meinen Code mal ausprobiert?

mkinzler 10. Aug 2008 13:35

Re: TLabel Probleme beim freigeben
 
Zitat:

kann mir einer erklären wie ich meien Code formatiere das er so nett aussieht wie bei Euch
Code markieren und Delphi-Code unter Oft benutzt anklicken

RaGro 10. Aug 2008 13:45

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 03:28 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