• 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:

    Code
    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
    [autoit]


    #include "MultiStateButton.au3"
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $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()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func setfont()
    GUICtrlSetStyle($cMSB1, $MSBS_INVERTFONTCOLOR)
    EndFunc

    [/autoit]

    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 :D ), aber die UDF ist auch noch nicht fertig. ;)

    Gruß

    chess

    Styles
    Code
    $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
  • @rynow Dann ist an deiner AutoIt-Installation was faul. Kann auch sein, dass $GWL_WNDPROC in den älteren Versionen (3.3.8.1 ?) noch nicht in der WinAPIConstants.au3 definiert war.
    Normalerweise sollte da aber

    [autoit]


    ; GetWindowLong Constants
    Global Const $GWL_WNDPROC = 0xFFFFFFFC
    Global Const $GWL_HINSTANCE = 0xFFFFFFFA
    Global Const $GWL_HWNDPARENT = 0xFFFFFFF8
    Global Const $GWL_ID = 0xFFFFFFF4
    Global Const $GWL_STYLE = 0xFFFFFFF0
    Global Const $GWL_EXSTYLE = 0xFFFFFFEC
    Global Const $GWL_USERDATA = 0xFFFFFFEB

    [/autoit]


    enthalten sein.

    @Make
    Mit welchen denn noch? :D
    Oder was meinst du?

  • Ich meine sowas hier: GUICtrlSetTip($cMSB, 'Tip')
    Das dein Control eben auf die Funktionen reagiert.
    Auf einige reagiert es ja schon. Aber trotzdem fehlen nochn paar.
    Das war damit gemeint. ^^