Bereiche eines Layouts festlegen
Legen Sie fest, welche Steuerelemente ein WklDockLayout anordnet, in welcher Zone und mit welcher Mindestgröße,
statt es sie anhand ihrer Lage finden zu lassen – etwa wenn zwei Bereiche sich so oder so deuten ließen oder wenn Code
Bereiche ein- und ausblendet.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
Panes listet die Bereiche in der Andockreihenfolge als Name=Zone oder Name=Zone,MinSize (Twips) auf, getrennt
durch Semikolons; die Zonen sind Left, Top, Right, Bottom und Fill. Mit Name=Zone:Group werden Bereiche zu
Karten einer Registergruppe (Seitenleiste mit Karten aufbauen); bei einer
Mindestgröße steht die Gruppe zuerst, Name=Zone:Group,MinSize (sfBearbeiten=Right:Seite,3402; Right,3402:Seite wird
abgelehnt). Eine Gruppe ist ein Bereich, und ihre Mindestgröße ist die größte ihrer Karten. Ist Panes leer, findet
das Layout die Bereiche anhand ihrer Lage. PaneNames gibt in beiden Fällen die Bereiche zurück, die das Layout
verwendet. MinPaneSize ist die Mindestgröße für Einträge ohne eigene Angabe. Refresh liest die Lage neu ein,
nachdem Code Steuerelemente dauerhaft verschoben hat.
Umsetzung
Im Designer ([...] in der Zeile Benutzerdefiniert), Seite Bereiche: Nach Lage übernehmen füllt die Liste
mit den Bereichen, die anhand ihrer Lage gefunden wurden; ändern Sie dort Zonen und Mindestgrößen. Dasselbe per Code:
' Navigation outermost on the left, a log strip at the bottom under the main area only. Me!Layout1.Object.Panes = "sfNavigation=Left,1500; sfHaupt=Fill; sfProtokoll=Bottom,800" Debug.Print Me!Layout1.Object.PaneNames ' sfNavigation;sfHaupt;sfProtokoll
Die Andockreihenfolge ist entscheidend: Ein früherer Eintrag wird weiter außen angedockt und nimmt die volle Höhe oder
Breite ein, die übrig ist, wenn er an der Reihe ist. Stünde sfProtokoll=Bottom vor sfNavigation=Left, nähme die
Protokollleiste die gesamte Breite ein, auch unterhalb der Navigation.
Einen Bereich zur Laufzeit ändern:
With Me!Layout1.Object
.PaneZone("sfProtokoll") = wdzRight ' move the log to the right edge
.PaneSize("sfNavigation") = 3000 ' width of a left or right area, height of a top or bottom one
.PaneCollapsed("sfProtokoll") = True ' take it away: the others get its room, its strip stays at the edge
End With
Klappen Sie einen Bereich mit PaneCollapsed ein, statt seine Eigenschaft Visible zu setzen: Das Layout ordnet nach
seinen Zonen, Größen und eingeklappten Bereichen an; ein über Visible ausgeblendetes Steuerelement behält deshalb
seinen Platz.
Hinweise
- Findet das Layout die Bereiche anhand ihrer Lage, nimmt es die Steuerelemente innerhalb seines Rechtecks der Reihe nach von seinen Rändern ab: Ein Steuerelement entlang eines ganzen Randes wird dort angedockt, das schmalste zuerst; das größte verbleibende Steuerelement füllt den Rest. Es zählen nur sichtbare Steuerelemente im selben Formularbereich wie das Layout.
- Jeder angedockte Bereich behält seine entworfene Breite oder Höhe. Wird das Fenster zu klein, schrumpft zuerst der Füllbereich, danach die angedockten Bereiche von innen nach außen, jeder bis auf seine Mindestgröße.
- Ein ungültiger Text in
Paneslöst sofortwkeInvalidValueaus; ein Name, den das Formular nicht hat, löst den Fehler aus, sobald das Layout zum ersten Mal anordnet. - Wird
Panesin der Formularansicht gesetzt, liest das Layout die Bereiche neu ein, wie beiRefresh, und verwirft die Anordnung des Benutzers. - Überlassen Sie die Verankerung der Bereiche dem Designer: Mit Beim Übernehmen einrichten erhält jeder Bereich die horizontale Verankerung seines Platzes, und die vertikale Verankerung bleibt oben. Setzen Sie sie nicht von Hand.