![]() |
Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo zusammen,
Leider geht nicht alles in den Titel. Folgende Anforderung: Für einen Videoplayer müssen verschiedene Layouts dynamisch umgeschaltet werden können. Der Gesamtmonitor kann bis zu 32 Player enthalten. Wenn die Applikation in der Grösse verändert wird muss das Seitenverhältnis beibehalten werden. Das Seitenverhältnis kann ebenfalls umgestellt werden (16:9, 4:3 oder anderes). Zur Veranschaulichung habe ich die 3 Screenshots einer solchen Applikation angehängt. Ich habe schon mit einem TGridPanel rumgespielt. Aber ich sehe auf die schnelle keinen Vorteil zu einer Variante wo alles von Hand gemacht wird. Hat vielleicht schon mal jemand so etwas realisiert? |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Zitat:
|
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Hallo Uwe,
Ich habe: noch nichts :wink: Eine Idee ist: - platziere ein Panel setze es align alclient. Dieses repräsentiert das Gesamt Display. - platziere ein GridPanel auf dieses mit align none. - erzeuge die maximal mögliche Anzahl an Playern und speichere diese in einer Objectliste. - bei jedem Layoutwechsel müssen die Rows und Cols des Gridpanels entfernt oder/und neue erzeugt werden (vorher vermutlich die Player entfernt werden). - bei jedem Layoutwechsel müssen die Playerobjekte neu den Control Collections zugeordnet werden. - bei jedem Resize muss das Gridpanel left, top, height, width in Bezug auf die Displaygrösse und dem Seitenverhältnis gesetzt werden. - bei jedem Resize müssen die Column- und RowItem Values bei Style ssAbsolute gesetzt werden. Ist dies so - bevorzuge ich es die Player als einzelne Komponenten auf dem übergeordneten Panel (Display) zu platzieren. Denn dann muss ich nicht jedes Mal Rows und Cols erzeugen oder löschen und Objekte hinzufügen oder löschen. Ausserdem könnte ich mir vorstellen dass Events (mouse move, drag drop usw.) einfacher zu verarbeiten sind. Aber vielleicht irre ich mich und das Gridpanel hat schon einige Features "onboard"? Deshalb war die Frage ob schon mal jemand so etwas mit einem Gridpanel gelöst hat. Danke und Gruss Werner |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Zitat:
|
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
|
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Versuch es doch mal mit dem Aufruf von ResizePlayerGrid im FormCreate, dem Resize-Event des Grids und bei Änderung des Seitenverhältnisses (hier beispielhaft für 4:3 und 16:9):
Delphi-Quellcode:
Update: Ach ja: AlignWithMargins muss bei dem Grid aktiv sein.
procedure ResizeControlWithAspectRatio(AControl: TControl; RatioWidth, RatioHeight: Integer);
var actWidth: Integer; actHeight: Integer; calcHeight: Integer; calcWidth: Integer; margin: Integer; margin1: Integer; margin2: Integer; begin actWidth := AControl.Margins.ControlWidth; actHeight := AControl.Margins.ControlHeight; calcHeight := MulDiv(actWidth, RatioHeight, RatioWidth); calcWidth := MulDiv(actHeight, RatioWidth, RatioHeight); if calcHeight < actHeight then begin margin := actHeight - calcHeight; margin1 := margin div 2; margin2 := margin - margin1; AControl.Margins.SetBounds(0, margin1, 0, margin2); end else begin margin := actWidth - calcWidth; margin1 := margin div 2; margin2 := margin - margin1; AControl.Margins.SetBounds(margin1, 0, margin2, 0); end; end; procedure ResizePlayerGrid(AGrid: TGridPanel; AWideScreen: Boolean); var ratioHeight: Integer; ratioWidth: Integer; begin ratioWidth := 4*AGrid.ColumnCollection.Count; ratioHeight := 3*AGrid.RowCollection.Count; if AWideScreen then begin ratioWidth := 4*ratioWidth; ratioHeight := 3*ratioHeight; end; ResizeControlWithAspectRatio(AGrid, ratioWidth, ratioHeight); end; |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Ich werfe Dir hier mal einfach meine 3 Komponenten für Control-Anordnungen rein.
Vielleicht kann Dir das Eine oder Andere als Anregung dienen (falls Dir Uwes Tipp nicht reicht)... ![]() ![]() ![]() |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
besten Dank für Deine Hilfe. Mit Deinem Vorschlag wird schon mal das Grid Proportional vergrössert und verkleinert. Aber noch nicht unter der Berücksichtigung der maximalen Grösse (siehe im Anhang rot eingezeichnet) und nicht zentriert. Vermutlich werde ich das noch hinbekommen. Was aber muss ich mit den Row- und ColItems machen? Einfach auf sspercent setzen? Oder auf ssAuto? Damit die mitziehen? Oder muss ich die Werte manuell setzen (insbesondere wenn das Layout ändert)? Danke für Deine Hilfe. Gruss Werner |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Zitat:
ich habe mir Deine Sammlung bereits angeschaut. Das sind aber andere (beeindruckende) Ansätze. Meine Anforderung ist tatsächlich eine proportionale Grössenänderung in einer übergeordneten Anzeige welche wiederum dynamisch unterschiedliche Seitenverhältnisse haben kann. Und dass Ganze mit dynamischer Layoutanpassung (sowohl von der Anzahl, der Anordnung und des Seitenverhältnisses). Eigentlich eine triviale Sache - dachte ich vorher. |
AW: Dynamische Multipanel Anordnung - Seitenverhältnis bei Resize
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
ssAuto bedeutet, dass sich die Zelle an die Größe des Controls anpasst. Das passt natürlich nicht zu dem Align. Ich habe mal ein Beispiel angehängt mit dem du ja weiter probieren kannst. Als Platzhalter für die Player verwende ich TMemo. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 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