Hallo,
ich möchte hier kurz etwas präsentieren, nämlich ein Control, welches prinzipiell wie eine CheckBox funktioniert, aber beliebig viele Zustände zulässt.
Man könnte es auch eine ComboBox in Buttonform nennen.
Das ist jedoch nicht das, was diese UDF sehenswert macht. Ich habe mich bemüht, mein Control so stark wie möglich in Windows/AutoIt zu integrieren. Das habe ich so bei noch keiner UDF gesehen, deswegen "sehenswert".
Das hat zur Folge, dass meine UDF eigentlich nur eine Funktion enthält, die genutzt werden muss (_MSB_Create oder GUICtrlCreateMSB).
Alles andere erfolgt über AutoIt-Interne Funktionen, oder eben Windows-Interne Funktionen.
Dazu gehören:
GUICtrlSetData
GUICtrlRead
GUICtrlSetStyle
GUICtrlSetPos (sowieso)
Internes Klick-Handling ohne Eingriff in GUIGetMsg o.Ä.
Geplant ist noch GUICtrlSetFont, allerdings bereitet mir das im Moment noch Schwierigkeiten.
Es besteht also kaum ein Unterschied zu internen Funktionen.
Edit: Beispiel.
Spoiler anzeigen
#include "MultiStateButton.au3"
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <String.au3>
$hWnd = GUICreate("", 200, 200)
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{space}", "setfont")
[/autoit] [autoit][/autoit] [autoit]$cMSB1 = _MSB_Create("", 10, 10, 80, 20)
GUICtrlSetData($cMSB1, "Exakt|0x0000ff|Teilweise|0x00ff00|RegExp|0xff0000")
$cMSB2 = _MSB_Create("Hi!|0x000000|Hallo!|0x000000", 10, 50, 50, 20, $MSBS_GREYBORDER + $MSBS_LARGEBORDER + $MSBS_INVERTFONTCOLOR)
GUISetState()
While True
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
Func setfont()
GUICtrlSetStyle($cMSB1, $MSBS_INVERTFONTCOLOR)
EndFunc
Die Verwendung ist (auch dank der Beispiele) wohl selbsterklärend... Der Quellcode der UDF selber ist noch sehr unaufgeräumt (man schaue sich allein die Kommentare an ), aber die UDF ist auch noch nicht fertig.
Gruß
chess
Styles
$MSBS_NOBORDER - Keinen Rand anzeigen
$MSBS_BLACKBORDER - Schwarzen Rand verwenden
$MSBS_GREYBORDER - Grauen Rand verwenden
$MSBS_LARGEBORDER - Dicken Rand anzeigen (3px), kombinierbar mit GREYBORDER und BLACKBORDER
$MSBS_INVERTFONTCOLOR - Die invertierte Füllfarbe als Schriftfarbe benutzen (bessere Lesbarkeit bei Farben nahe Schwarz)
$MSBS_ALLOWRCLICK - Rechtsklick zum umgekehrten Blättern erlauben
$MSBS_DEFAULT = $MSBS_BLACKBORDER + $MSBS_ALLOWRCLICK