Checkbox deaktivieren aber nicht "ausgrauen"

  • Hallo zusammen,

    für ein Projekt müsste ich auf einer GUI Checkboxen darstellen. Diese sollen nicht ausgegraut sein, damit man den Text noch gut lesen kann.
    Aber der Benutzer darf sie auch nicht manuell setzen oder zurücksetzen können!

    Ist sowas möglich?
    PS: Ich möchte nicht mit einem Adlibregister alle paar Millisekunden die Checkboxen zurücksetzen, weil in diesem Programm laufen schon genügen "Timer" im Hintergrund, welche den PC ganz schön belasten werden.

    Vielen Dank für Eure Ideen!
    Grüsse Veronesi

    Einmal editiert, zuletzt von veronesi (21. März 2011 um 08:34)

  • Oder so?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("Checkboxen")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlCreateCheckbox("Checkbox #1", 20, 20, 200, 20)
    GUICtrlSetOnEvent(-1, "_NoChange")
    GUICtrlCreateCheckbox("Checkbox #2", 20, 50, 200, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetOnEvent(-1, "_NoChange")
    GUICtrlCreateCheckbox("Checkbox #3", 20, 80, 200, 20)
    GUICtrlSetOnEvent(-1, "_NoChange")
    GUISetState()

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

    While True
    Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _NoChange()
    If BitAND(GUICtrlRead(@GUI_CtrlId), $GUI_CHECKED) Then
    GUICtrlSetState(@GUI_CtrlId, $GUI_UNCHECKED)
    Else
    GUICtrlSetState(@GUI_CtrlId, $GUI_CHECKED)
    EndIf
    EndFunc

    [/autoit]
  • Hallo Grossvater

    Super! Genau das wollte ich! Vielen Dank.
    Das ist mir gar nicht in den Sinn gekommen.

    Danke auf den Anderen für die Antworten.
    Ich habe Grossvaters' Idee umgesetzt, weil dies die kleinste Änderung im Skript bedeutete.
    Dass ich die Checkboxen auch ohne Text machen könnte und statt dessen Labels dahinter, wäre auch eine gute Idee gewesen, aber so ist es für mich die kleinere Änderung.

    Vielen Dank!
    Grüsse Veronesi

  • Es geht noch viel einfacher:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <ButtonConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("Checkboxen")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlCreateCheckbox("Checkbox #1", 20, 20, 200, 20, $BS_CHECKBOX)
    GUICtrlCreateCheckbox("Checkbox #2", 20, 50, 200, 20, $BS_CHECKBOX)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateCheckbox("Checkbox #3", 20, 80, 200, 20, $BS_CHECKBOX)
    GUISetState()

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

    While True
    Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Hallo Progandy,

    das ist ja sehr interessant.
    Aber woher weiss ich dass $BS_Checkbox verhindert, dass das Häkchen manuell verändert werden kann?
    In der Hilfe steht bloss:

    Creates a small, empty check box with a label displayed to the right of it. To display the text to the left of the check box, combine this flag with the BS_RIGHTBUTTON style.

  • Vergleiche einfach mal die Beschreibung von BS_AUTOCHECKBOX und BS_CHECKBOX. Dann steht bei GUICtrlCreateCheckbox, dass AutoCheckBox verwendet wird, wenn kein Checkboxstil angegeben wird, also musst du BS_CHECKBOX verwenden.