![]() |
Wie kann man ein Array leeren?
Wie kann man ein Array leeren?
Deklaration:
Delphi-Quellcode:
Labels: Array [0 .. 100] of TLabel;
Mein Versuch
Delphi-Quellcode:
Aber nicht alle Labels sind mit Inhalt gefüllt.
zahl3 := 0;
while zahl3 <= 100 do begin If Assigned(Labels[zahl3]) then FreeAndNil(Labels[zahl3]); zahl3 := zahl3 + 1; end;
Delphi-Quellcode:
Es gibt leider eine Fehlermeldung.
Labels[zahl] := TLabel.Create(Form1);
Labels[zahl].Parent := panels[zahl]; Labels[zahl].Font.Name := 'Bauhaus'; Labels[zahl].Font.Size := 12; Labels[zahl].Caption := '-Nicht verfügbar-'; Labels[zahl].Top := 8; Labels[zahl].Left := 250; Labels[zahl].OnMouseEnter := Form1.PanelsOver; Labels[zahl].OnMouseLeave := Form1.PanelsLeave; Labels[zahl].Tag := zahl; Was mache ich falsch oder gibt es eine andere Lösung. |
AW: Wie kann man ein Array leeren?
Und welche Fehlermeldung? Ist der Array-Inhalt initial genullt worden?
|
AW: Wie kann man ein Array leeren?
hmm
Delphi-Quellcode:
Fillchar(Labels[0],Sizeof(Labels],0);
Mavarik |
AW: Wie kann man ein Array leeren?
Es gibt übrigens höherwerte Datentypen als Arrays: Listen.
Der Kopf ist rund damit das Denken die Richtung ändern kann. Bei einer Liste kann man einfach Elemente (z.B. TLabels) hinzufügen oder entfernen ohne dass man sich um die Löcher kümmern müsste die beim Löschen aus einem Array zurückbleiben. Eine Liste ändert dynamisch und automatisch seine Grösse während die Grösse eines Arrays vom Programmierer explizit geändert werden muss. |
AW: Wie kann man ein Array leeren?
Zitat:
Zitat:
|
AW: Wie kann man ein Array leeren?
Er meint eine Liste. Für Labels bietet sich z.B. eine TObjectList bzw. TComponentList an. Dafür musst Du die Unit Contnrs einbinden.
|
AW: Wie kann man ein Array leeren?
Solche Listen gibt es aber im normalen Delphi gar net.
Wo finde ich die? und kann man auch dort Buttons reinmachen???? |
AW: Wie kann man ein Array leeren?
Was ist ein "normales" Delphi? Hast Du die Unit Contnrs eingebunden?
[edit] ![]() ![]() [/edit] |
AW: Wie kann man ein Array leeren?
Natürlich gibt es die in Delphi. Und was ist für dich ein nicht normales Delphi?
|
AW: Wie kann man ein Array leeren?
achso ich dachte es wäre eine Vcl Komponente.
Aber wie kann ich sie benutzen bzw. ein Objekt hinzugüfen, z.b einen Button oder ein Label? |
AW: Wie kann man ein Array leeren?
Google, Sucher, erster Treffer: "delphi TObjectList"
|
AW: Wie kann man ein Array leeren?
Ist das zuviel verlangt, einmal einen Blick in die Hilfe oder die DP-Suchfunktion zu werfen? Ich meine, XE 2 Architect im Profil und sich dann alles vorkauen zu lassen geht irgendwie nicht zusammen, oder?
|
AW: Wie kann man ein Array leeren?
Oder
![]() |
AW: Wie kann man ein Array leeren?
Hab ich doch sogar schon verlinkt ;)
|
AW: Wie kann man ein Array leeren?
|
AW: Wie kann man ein Array leeren?
Sorry aber in all diesen Links war keine einzige Antwort zu meiner Frage :(.
Ich habe auch schon in google gesucht. |
AW: Wie kann man ein Array leeren?
So?
Zitat:
|
AW: Wie kann man ein Array leeren?
Danke ich weiß aber immer noch net.
Ich ich ein bestimmtes objekt einbinde. Add(TButton) funktioniert net Add(Labels[zahl]) funktioniert auch net wie mache ich das? |
AW: Wie kann man ein Array leeren?
Hier die Deklaration
Delphi-Quellcode:
uses
Contnrs; // statt Labels : array[0..100] of TLabel; type TForm1 = class( TForm ) .. private Labels : TList; end; .. implementation .. procedure TForm1.FormCreate( Sender : TObject ); begin Labels := TObjectList.Create; end; procedure TForm1.FormDestroy( Sender : TObject ); begin // Alle enthaltenen Objekte (hier die Labels) werden automatisch entsorgt Labels.Free; end; procedure TForm1.Button1Click( Sender : TObject ); var idx : integer; lbl : TLabel; begin for idx := 1 to 100 do begin lbl := TLabel.Create( nil ); // keinen Owner angeben!!! Die Labels-Liste kümmert sich um die Freigabe! lbl.Parent := Self; // oder wer auch immer lbl.Caption := 'Hallo'; .. Labels.Add( lbl ); end; end; |
AW: Wie kann man ein Array leeren?
Poste mal deinen Code.
Ich glaube, Du hast die 100 Label erzeugt und willst nun, das sie wieder verschwinden. Da reicht es natürlich nicht das Array oder die Liste oder die Objektliste oder was auch immer dein Container ist, zu nullen. Um die Label zu erzeugen, instantiierst Du sie mit dem Konstruktor. Um die Label zu entfernen, gibst Du es mit dem Destruktor frei. Um ein Label unsichtbar zu machen, setzt Du Visible auf False oder entfernst den Text (Caption). Der Konstruktor heißt Create, und der Destruktor heißt... Destroy. Und weil Delphi nun mal ein wenig rumgefrickelei ist, verwendet man nicht den Destruktor direkt, sondern etwas, das viel toller ist, nämlich "Free". Das macht das Gleiche, prüft aber vorher auf Nil. Wenn Du das hier nicht verstanden hast, solltest Du erst einmal die grundlegenden Grundlagen von Delphi lernen. |
AW: Wie kann man ein Array leeren?
Vielen Dank
Sir Rufo Furtbichler ich werde das jetzt mit TObjectList machen. |
AW: Wie kann man ein Array leeren?
Zitat:
Zumindestens wenn man eine passende Liste verwendet. Und die ![]() Man erstellt diese mit OwnsObjects = True und schon kümmert sich die Liste um die Freigabe, wenn man einen Eintrag aus der Liste rauslöscht. |
AW: Wie kann man ein Array leeren?
Stimmt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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