Einzelnen Beitrag anzeigen

DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#1

Panel & Label zur Laufzeit erstellen

  Alt 30. Sep 2023, 18:42
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

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;
//##############################################################################
//##############################################################################
Miniaturansicht angehängter Grafiken
panels.jpg  

Geändert von DieFliege (30. Sep 2023 um 18:46 Uhr) Grund: Tippfehler :(
  Mit Zitat antworten Zitat