Mehrfach-Schaltflächen
Schaltflächen im XP-Design
"Originale" XP-Schaltflächen
Wenn Sie aber dem abgerundeten Design von Windows XP näher kommen möchten, können Sie mit einem Bitmap-Grafik-Programm (z. B. Photoshop, PaintShop Professional) das Bild einer solchen geteilten Schaltfläche aus einer Bildschirm-Hardcopy herausschneiden und den Text darauf löschen.
Ausgeschnittene Hardcopy der Original-Schaltflächen ohne deren Text
Dieses Bild fügen Sie auf dem Formular als imgSchaltflaeche ein. Dann legen Sie auf den linken Teil davon ein Bezeichnungsfeld lblToClick, welches für die dynamische Beschriftung und das Anklicken der "Schaltfläche" zuständig ist. Auf die rechte "Hälfte" kommt zudem ein Bezeichnungsfeld mit dem Namen lblToDropDown.
Da diese Bezeichnungsfelder natürlich alles verdecken würden, müssen Sie beide durchsichtig machen, indem Sie die BackStyle-Eigenschaft auf fmBackStyleTransparent stellen. Außerdem muss die Caption leer bleiben.
Schaltfläche mit markierten Bezeichnungsfeldern darauf und dem Listenfeld unterhalb
Da so noch keine ausklappbare Liste vorhanden ist, legen Sie darunter noch eine Listbox lstSchaltflaeche an. Damit haben Sie alle vier Komponenten, wie sie im Bild zu sehen sind.
Jetzt gilt es, die drei bedienbaren Elemente btnToClick, btnToDropDown und lstSchaltflaeche zu programmieren. Dabei soll der Klick auf das Listenfeld lstSchaltflaeche nur die Caption von lblToClick anpassen. Erst der anschließende Klick auf lblToClick, also der linken Teil-Schaltfläche, soll die tatsächliche Aktion auslösen, wie es auch unter Office XP üblich ist.
Pseudo-DropDown
Die Schaltfläche btnToDropDown ist entsprechend ihrem Namen nur dazu da, das Listenfeld lstSchaltflaeche "auszuklappen". In Wirklichkeit wechselt nur dessen Sichtbarkeit, aber der Eindruck aus Benutzersicht bleibt derselbe. Entsprechend einfach gestaltet sich auch der zugehörige Code:
Private Sub lblToDropDown_Click() Me.lstSchaltflaeche.Visible = Not Me.lstSchaltflaeche.Visible End Sub
Dabei wird mit .Visible = Not .Visible die Sichtbarkeit jeweils umgeschaltet. Auch das Listenfeld lstSchaltflaeche hat nur wenige Aufgaben:
Private Sub lstSchaltflaeche_Click() With Me.lstSchaltflaeche Me.lblToClick.Caption = .Value .Visible = False End With End Sub
Vorbereitung
Da Listenfelder ja nie zur Entwurfszeit mit Werten gefüllt werden können, muss typischerweise in UserForm_Initialize die Vorbesetzung erfolgen:
Private Sub UserForm_Initialize() With lstSchaltflaeche .AddItem "Öffnen" .AddItem "Schreibgeschützt" .AddItem "Als Kopie" .ListIndex = 0 End With Me.lblToClick.Caption = "Öffnen" End Sub
Fertiger Dialog mit Schaltfläche/Kombinationsfeld
Der Dialog präsentiert sich anschließend wie im obigen Bild und lässt sich so benutzen, wie ein geübter WindowsXP-Benutzer das erwartet.
Leider nicht perfekt
So gut das alles funktionieren mag, wenn Sie es wie im Beispiel angeordnet haben, so hat es doch zwei gravierende Nachteile gegenüber dem Original:
Die Listbox kann nicht über die Dialog-Begrenzung hinweg angezeigt werden.
Es ist nur ein Listenfeld und kein echtes Menü wie im Original.
Gerade wenn Sie sich den FormatvorlageÄndern-Dialog im folgenden Bild ansehen, werden Sie zugeben müssen, dass beides dort unbedingt benötigt wird.
Dialog FormatvorlageÄndern mit Schaltfläche/PopUp-Menü
Mit ein ganz klein wenig API-Hilfe ist diese letzte Hürde auch zu nehmen. Sie werden sehen, dass der Programmieraufwand sogar deutlich sinkt.
Als Mitglied können Sie diesen Beitrag weiterlesen!
Werden Sie Mitglied und testen Sie akademie.de 14 Tage lang kostenlos!
In den ersten 14 Tagen haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Sie können in dieser Zeit ohne Angabe von Gründen stornieren. Eine E-Mail an service@akademie.de genügt. Nur wenn Sie Mitglied bleiben, wird der Mitgliedsbeitrag nach Ende der 14tägigen Stornofrist abgebucht.
Ich bin bereits Mitglied
