Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Panel & Label zur Laufzeit erstellen (https://www.delphipraxis.net/213817-panel-label-zur-laufzeit-erstellen.html)

DieFliege 30. Sep 2023 18:42

Panel & Label zur Laufzeit erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöchen :-)

Und wieder stehe ich mal wieder auf dem Schlauch :(

Ich versuche anhand vorhandener Anzahl von Dateien entsprechend viele Panel auf einer Form zu erstellen. Also ich habe zum Beispiel 8 Dateien in einem Verzeichnis, somit benötige ich 8 Panels.

Also habe ich die sich im Verzeichnis befindlichen Dateien in eine ListBox eingelesen und kann so ermitteln wieviele Dateien sich im Verzeichnis befinden. Die Listbox sehe ich als sofern sinnvoll, weil ich die Namen der Dateien später noch im Programm verwenden möchte und diese so schon mal aufgelistet habe und darauf zugreifen kann.

Das Erstellen der 8 Panels funktioniert ohne Probleme, jedoch möchte ich in jedem Panel noch Labels hinzufügen, die den Namen der jeweiligen Datei anzeigen - Und da stockt es nun. Es ist war möglich den Namen der Datei im Label darzustellen, aber immer nur der letzte Eintrag aus der Listbox. Also muss ich irgendwo einen Denkfehler haben. Normal bin ich davon ausgegangen, dass die Erstellung in einer Schleife die Panels und die gewünschten Labels pro Panel erfolgt.

Dabei verstehe ich nicht, warum ich den jeweiligen Panels eigene Namen vergeben kann, aber den Labels nicht dem zugehörigen Text, obwohl ich in einer Schleife sowohl den Namen für das Panel als auch den Text für das Label zuweise. Meine Vermutung dabei ist, dass hier die "Parents" eine maßgebliche Rolle spielen, ich konnte bisher nur noch nicht mein Denkfehler finden - Habt Ihr eine Idee?

Über etwas Hilfe oder Denkanstoß wäre ich dankbar :-D

LG DieFliege

Delphi-Quellcode:
//##############################################################################
//##############################################################################
//------------------------- Panel per Klick erstellen --------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  Panel      : TPanel;
  DF_Label   : TLabel;
  Hintergrund : TImage;
  i          : Integer;
  panel_name : String;

begin
  for i := 1 to anzahl do
    begin
      //--------- Panel erstellen ---------
      Panel           := TPanel.Create(Self);
      Panel.Parent    := Self;
      Panel.Caption   := 'Panel-' + Format('%.*d', [4, i]);
      Panel.Left      := 10;
      Panel.Top       := von_oben;
      Panel.Height    := 50;
      Panel.Width     := 480;
      Panel.BevelOuter := bvNone;
      panel_name      := 'panel_' + Format('%.*d', [4, i]);
      Panel.Name      := panel_name;
      Panel.ShowHint  := True;
      Panel.Hint      := panel_name;
      //-----------------------------------

      //------ Hintergrund erstellen ------
      Hintergrund        := TImage.Create(Self);
      Hintergrund.Parent := Panel;
      Hintergrund.Left   := 0;
      Hintergrund.Top    := 0;
      Hintergrund.Height := 50;
      Hintergrund.Width  := 480;
      Hintergrund.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'header.jpg');
      //-----------------------------------

      //-------- Labels erstellen ---------
      DF_Label           := TLabel.Create(Self);
      DF_Label.Parent    := Panel;
      DF_Label.Left      := 50;
      DF_Label.Top       := 18;
      DF_Label.Font.Color := RGB(0 ,120, 215);
      DF_Label.Caption   := 'Dies ist ein Label für Panel -> ' + UpperCase(ListBox1.Items[anzahl -1]);
      //-----------------------------------

      von_oben      := von_oben + 50;
    end;
end;
//##############################################################################
//##############################################################################

Aliquis 30. Sep 2023 18:52

AW: Panel & Label zur Laufzeit erstellen
 
Hallo, unter "Labels erstellen" heißt es am Schluss
Delphi-Quellcode:
DF_Label.Caption := 'Dies ist ein Label für Panel -> ' + UpperCase(ListBox1.Items[anzahl -1]);
.
Items[anzahl-1] ändert sich nicht mit der Laufvariablen i. Müsste es nicht
Delphi-Quellcode:
ListBox1.Items[i-1]
heißen?
Gruß G.

DieFliege 30. Sep 2023 19:04

AW: Panel & Label zur Laufzeit erstellen
 
Hallo Aliquis,

vielen Dank für Deinen Hinweis.

... Treffer - Danke! Manchmal sollte man doch mal etwas Pause machen!

LG DieFliege

Kas Ob. 1. Okt 2023 08:38

AW: Panel & Label zur Laufzeit erstellen
 
Also don't trigger file read (LoadFromFile) for each TImage if it is the same, that is just a waste of time.
Code:
Hintergrund.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'header.jpg');
Load it once before the loop then assign/copy it for each item.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr.

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