![]() |
GridPanel für TImages and Memo
Ich baue gerade so eine Art ImageExplorer.
Ich habe mir schon ein schönes TTreeView Bäumchen gebaut mit Ordnerstrukturen, jetzt möchte ich, das beim Klicken auf einen Ordner in einem Zweiten Frame alle Verfügbaren Bilder schön angezeigt werden. Und zwar vier Bilder nebeneinander und das Reihe für Reihe nach unten. Erster Ansatz war vier Panels und das Frame mit Autosize zu verwenden, dynamisch ein Panel zu erzeugen mit Aliment Top und dadrin ein TImage, und dann ein TMemo Aliment Top und Client. Der Ansatz hat mich in den Wahnsinn getrieben. Jetzt versuche ich es mit einem Gridpanel. Das will aber auch nicht so wie ich will. Immer das selbe mit diesen Komponenten! :stupid: Also dann mal zum Code: Hier die Komponenten:
Delphi-Quellcode:
Hier das Panel:
procedure TForm1.CreateImageFields(ANumber: Integer);
var LNewPanel: TPanel; LNewPanelIn : TPanel; LNewImage: TImage; LNewMemo : TMemo; i: Integer; test : string; begin AddLinesToGridPanel(ANumber); DestroyImages; FPanelDictionary.Clear; test := 'hallo'; for i := 0 to ANumber-1 do begin LNewPanel := TPanel.Create(FramePictureList.GridPanelToAdd); LNewPanel.Parent := FramePictureList.GridPanelToAdd; LNewPanel.Name := 'NewPanel'+IntToStr(i); LNewPanel.Height := 200; LNewPanel.Align := alClient; LNewPanel.Caption := IntToStr(i); LNewImage := TImage.Create(LNewPanel); LNewImage.Name := 'NewImage'+IntToStr(i); LNewImage.Parent := LNewPanel; LNewImage.Align := alTop; //LNewImage.Height := 141; LNewImage.Stretch := true; LNewImage.Width := 200; LNewImage.Height := 150; LNewImage.Proportional := true; LNewImage.Center := true; LNewImage.Tag := i; try if FSelectedPath <> '' then LNewImage.Picture.LoadFromFile(FSelectedPath+FPicturePath.Strings[i]); LNewImage.OnClick := Frame21ToolButton3Click; except end; LNewMemo := TMemo.Create(LNewPanel); LNewMemo.Parent := LNewPanel; LNewMemo.Align := alClient; LNewMemo.Name := 'NewMemo'+IntToStr(i); LNewMemo.Text := ''; LNewImage.Tag := i; LNewMemo.Height := 50; LNewMemo.Width := 200; LNewPanel.Visible := true; FPanelDictionary.Add(i, LNewPanel); end; FramePictureList.Align := alClient; end;
Delphi-Quellcode:
Das Resultat ist, das die obersten zwei Reihen nur halb so groß sind und man nur Teile des Bildes, aber nicht des Memo. Ab der dritten Reihe sieht es gut aus.
procedure TForm1.AddLinesToGridPanel(ANumbersOffields: Integer);
var LColums : integer; i: Integer; LRowitem : TRowItem; LMagicNumber : Integer; j: Integer; begin LMagicNumber := 200; LColums := Round((ANumbersOffields/4)); FramePictureList.GridPanelToAdd.RowCollection.BeginUpdate; FramePictureList.GridPanelToAdd.ColumnCollection.BeginUpdate; for i := 0 to -1 + FramePictureList.GridPanelToAdd.ControlCount do FramePictureList.GridPanelToAdd.Controls[0].Free; FramePictureList.GridPanelToAdd.Height := LMagicNumber*LColums; FramePictureList.GridPanelToAdd.Height := LMagicNumber*LColums; FramePictureList.GridPanelToAdd.ColumnCollection.Clear; FramePictureList.GridPanelToAdd.ColumnCollection.BeginUpdate; for i := 1 to 4 do with FramePictureList.GridPanelToAdd.ColumnCollection.Add do begin SizeStyle := ssPercent; Value := LMagicNumber ; //have cells evenly distributed end; for i := 1 to LColums do with FramePictureList.GridPanelToAdd.RowCollection.Add do begin SizeStyle := ssPercent; Value := LMagicNumber; //have cells evenly distributed end; for i := 0 to FramePictureList.GridPanelToAdd.ControlCount -1 do FramePictureList.GridPanelToAdd.Controls[i].Height:= LMagicNumber; FramePictureList.GridPanelToAdd.RowCollection.EndUpdate; FramePictureList.GridPanelToAdd.ColumnCollection.EndUpdate; end; Ideen? |
AW: GridPanel für TImages and Memo
Wie ist dein GridPanel grundsätzlich eingestellt?
z.B. in welcher Einheit wird die Zeilenhöhe angegeben? |
AW: GridPanel für TImages and Memo
Liste der Anhänge anzeigen (Anzahl: 3)
Anhang 51874Anhang 51875Anhang 51876
z.B. in welcher Einheit wird die Zeilenhöhe angegeben? - Wo lese ich den das heraus? |
AW: GridPanel für TImages and Memo
Liste der Anhänge anzeigen (Anzahl: 1)
Hier nochmal ein Beispiel mit dem Resultat. (Musste erst einen Ordner finden, mit unproblematischen und ausreichenden Bildern) Anhang 51877
|
AW: GridPanel für TImages and Memo
Letztendlich habe ich es dann noch manuell mit Panels gemacht. Ich habe ein paar andere Forenbeiträge gefunden, die auch ohne Antwort blieben, aber insgesamt. Die Komponente scheint nicht so bliebt zu ein. Ich habe mir dann ein eigenes Grid aus Panels gebaut. Habe es in einer vom Frame abgleiteten Komponente gemacht, der ich noch zwei Felder mitgeben und initialisiert habe; NumberPanels und Skalefaktor;
Hier der Code, falls es jemanden interessiert
Delphi-Quellcode:
function TFrame2.AddPannel: TPanel;
var LRow : Integer; LColumn : Integer; MyNewPanel : TPanel; begin self.NumberPanels := self.NumberPanels+1; LColumn := (Self.NumberPanels-1) mod 4; LRow := (Trunc(((self.NumberPanels-1)/4))); Panel1.Height := (self.Skalefaktor*LRow)+self.Skalefaktor+2; MyNewPanel := TPanel.Create(Panel1); MyNewPanel.Parent := Panel1; MyNewPanel.left := self.Skalefaktor*LColumn+2; MyNewPanel.top := self.Skalefaktor*LRow+2; MyNewPanel.Height := self.Skalefaktor; MyNewPanel.Width := self.Skalefaktor; MyNewPanel.Visible := true; MyNewPanel.Caption := IntToStr(self.NumberPanels); Result := MyNewPanel; end; procedure TFrame2.DeleteAllPanels; var i: Integer; panelname : string; begin while Panel1.ControlCount > 0 do Panel1.Controls[0].Free; self.NumberPanels := 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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