03.12.2021, 14:30
Hallo liebe Leserin, lieber Leser,
manchmal möchte man einfachen Text mit einer Messagebox darstellen und wünscht sich einen vierten Button und/oder ein anderes Icon-Bild passend zum Thema.
Geht nicht; bau Dir eine Userform, bekommt man da gesagt.
Und ja, das stimmt. Mit einer Userform kann man alle seine Wünsche individuell umsetzen.
Nur das flexible Einfügen von Bildern, z.B. von einer Tabelle aus, erfordert etwas Mehraufwand z.B. via API.
Dass es aber auch anders geht, möchte ich mit diesem kleinen Beispiel mal aufzeigen.
Man kann die Windows-Messagebox wie auch die interne Excel-MsgBox mit ein paar API-Funktionen leicht manipulieren.
Zum Beispiel die Buttontexte verändern oder ein anderes Icon anzeigen lassen. Auch das selbständige Schließen nach vorgegebener Zeit oder ein Countdown wäre möglich.
Und natürlich die Festlegung der Position der MsgBox.
Hierzu beschaffen wir uns z.B. über Hooking oder den Timer das Handle (interner Zeiger auf die Msgbox) und können nun loslegen mit unserer Manipulation.
Aber halt; da wir ja auch den vierten Button nutzen möchten, realisieren wir unser Vorhaben doch lieber mit der API-Funktion MessageBoxIndirect.
Der vierte Button ist für das Hilfesystem der MsgBox vorgesehen und muss anders gehandelt werden als die drei Standard-Buttons.
Klicke zur Demonstration jetzt einfach mal den Button in der beigefügten Mappe an, denn dadurch erklärt sich vieles von selbst...
MsgboxEx_Workshop.xlsb (Größe: 115,86 KB / Downloads: 35)
Da auch das Klicken des Systemkreuzes extra abgefangen werden kann, gibt es im Prinzip sogar fünf verschiedene Rückmeldungsmöglichkeiten.
Das Abschalten des Systemkreuzes ist natürlich auch möglich, bedarf aber der zusätzlichen Funktionen GetWindowlong und SetWindowlong für je 32 und 64 Bit-Version.
Noch ein Wort zu den Icons.
Diese können aus einer ICO-Datei, aus einer DLL oder EXE oder eben, so wie hier, aus einer Iconsammlung in einer Exceltabelle genommen werden.
Erfordert jeweils eine etwas abweichende Programmierung.
und nun viel Spaß beim Ausprobieren...
viele Grüße
Karl-Heinz
manchmal möchte man einfachen Text mit einer Messagebox darstellen und wünscht sich einen vierten Button und/oder ein anderes Icon-Bild passend zum Thema.
Geht nicht; bau Dir eine Userform, bekommt man da gesagt.
Und ja, das stimmt. Mit einer Userform kann man alle seine Wünsche individuell umsetzen.
Nur das flexible Einfügen von Bildern, z.B. von einer Tabelle aus, erfordert etwas Mehraufwand z.B. via API.
Dass es aber auch anders geht, möchte ich mit diesem kleinen Beispiel mal aufzeigen.
Man kann die Windows-Messagebox wie auch die interne Excel-MsgBox mit ein paar API-Funktionen leicht manipulieren.
Zum Beispiel die Buttontexte verändern oder ein anderes Icon anzeigen lassen. Auch das selbständige Schließen nach vorgegebener Zeit oder ein Countdown wäre möglich.
Und natürlich die Festlegung der Position der MsgBox.
Hierzu beschaffen wir uns z.B. über Hooking oder den Timer das Handle (interner Zeiger auf die Msgbox) und können nun loslegen mit unserer Manipulation.
Aber halt; da wir ja auch den vierten Button nutzen möchten, realisieren wir unser Vorhaben doch lieber mit der API-Funktion MessageBoxIndirect.
Der vierte Button ist für das Hilfesystem der MsgBox vorgesehen und muss anders gehandelt werden als die drei Standard-Buttons.
Klicke zur Demonstration jetzt einfach mal den Button in der beigefügten Mappe an, denn dadurch erklärt sich vieles von selbst...
MsgboxEx_Workshop.xlsb (Größe: 115,86 KB / Downloads: 35)
Da auch das Klicken des Systemkreuzes extra abgefangen werden kann, gibt es im Prinzip sogar fünf verschiedene Rückmeldungsmöglichkeiten.
Das Abschalten des Systemkreuzes ist natürlich auch möglich, bedarf aber der zusätzlichen Funktionen GetWindowlong und SetWindowlong für je 32 und 64 Bit-Version.
Noch ein Wort zu den Icons.
Diese können aus einer ICO-Datei, aus einer DLL oder EXE oder eben, so wie hier, aus einer Iconsammlung in einer Exceltabelle genommen werden.
Erfordert jeweils eine etwas abweichende Programmierung.
und nun viel Spaß beim Ausprobieren...
viele Grüße
Karl-Heinz