Button "einrasten"

  • Hallo Zusammen,

    ich hab mit GUICtrlCreateButton einen Button erzeugt, den ich gerne "einrasten" würde, also beim ersten drauf drücken soll er unten bleiben und beim nochmaligen Drücken soll er wieder hoch kommen. Bei den Push Button Styles hab ich nichts gefunden.

    Geht sowas?

    Besten Dank!
    R@iner

    Einmal editiert, zuletzt von skyteddy (5. Mai 2011 um 16:05)

  • Das ist das Verhalten einer Checkbox. Dieser kannst du den Style $BS_PUSHBUTTON oder so ähnlich zuweisen, dann sieht sie wie ein Button aus ;)

  • Hallo Andy,

    danke für die schnelle Antwort. Ich hab jetzt ne CheckBox mit Style $BS_PUSHLIKE drauf gemacht, es geht aber trotzdem nicht. Brauch ich da noch nen anderen Style dazu?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $checkCN, $msg

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

    GUICreate("My GUI Checkbox") ; will create a dialog box that when displayed is centered

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

    ; $checkCN = GUICtrlCreateCheckbox("CheckBox 1", 20, 20, 120, 30, $BS_PUSHLIKE)
    $checkCN = GUICtrlCreateCheckbox("CheckBox 1", 20, 20, 120, 30, BitOR($BS_PUSHLIKE, $BS_AUTOCHECKBOX))

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

    GUISetState() ; will display an dialog box with 1 checkbox

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]


    Danke schon mal.

    Gruß
    R@iner

  • pushlike + autocheckbox machen doch genau das, was du wünschst.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $checkCN, $msg

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

    Local $hGUI = GUICreate("My GUI Checkbox") ; will create a dialog box that when displayed is centered

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

    ; $checkCN = GUICtrlCreateCheckbox("CheckBox 1", 20, 20, 120, 30, $BS_PUSHLIKE)
    $checkCN = GUICtrlCreateCheckbox("CheckBox 1", 20, 20, 120, 30, BitOR($BS_PUSHLIKE, $BS_AUTOCHECKBOX))
    Local $btnState = GUICtrlCreateButton("Get State", 20, 120, 120, 30)

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

    GUISetState() ; will display an dialog box with 1 checkbox

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

    ; Run the GUI until the dialog is closed
    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $checkCN
    If BitAND(GUICtrlRead($checkCN), 1) Then
    WinSetTitle($hGUI, "", "My GUI Checkbox - checked")
    Else
    WinSetTitle($hGUI, "", "My GUI Checkbox - unchecked")
    EndIf
    Case $btnState
    If BitAND(GUICtrlRead($checkCN), 1) Then
    MsgBox(0, '', "Button - checked")
    Else
    MsgBox(0, '', "Button - unchecked")
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>Example

    [/autoit]
  • pushlike + autocheckbox machen doch genau das, was du wünschst.


    In XP sieht man erst, wenn man mit der Maus weg geht, dass der Button etwas dunkel grauer wird. Beim nochmaligen Drücken wird er wieder etwas heller, also das grau. Das ist optisch kaum bzw. sehr schwer zu erkennen. Gibt es ne Möglichkeit, den optisch einrasten zu lassen, dass er so aussieht, als ob der Button gedrückt ist, also unten bleibt?

    Ich hab das auch in Win 7 ausprobiert. Dort wird der Button blau, wenn er gedrückt ist. Wenn er nicht gedrückt ist, ist er grau. Man kann dort aufgrund der anderen Farbe einen Unterschied sofort erkennen, in XP eher weniger.

    Hast Du noch ne Idee?

    Gruß
    R@iner

  • Dann ändere einfach die Schrift ;)

    [autoit]

    If $msg = $checkCN Then
    If BitAND(GUICtrlRead($checkCN), 1) Then
    GUICtrlSetFont($checkCN, Default, 800, 0)
    Else
    GUICtrlSetFont($checkCN, Default, 401, 0)
    EndIf
    EndIf

    [/autoit]
  • Dann ändere einfach die Schrift ;)


    Grins, dann bin ich wieder ganz am Anfang, denn genau so mache ich es bisher mit dem normalen Button. Ich wollte eigentlich nen optisch eingerasteten und gedrückten Knopf anstatt der Schrift.

    hast Du noch ne Idee?

    Dank Dir und viele Grüße!
    R@iner

  • Hi,

    hier einmal mein Checkbox-Tut:

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1_1 = GUICreate("Big Checkbox", 210, 210, 300, 233)
    ;i normale Checkbox
    $Checkbox0 = GUICtrlCreateCheckbox("Checkbox basic", 30, 10, 150, 35)
    ;i Checkbox color
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox color", 30, 50, 150, 35)
    GUICtrlSetColor(-1, 0xFF0000) ;i rot
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 7)
    ;i große Checkbox Schriftart und Größe anders
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox", 30, 90, 150, 35, BitOR($BS_CHECKBOX,$BS_AUTOCHECKBOX,$BS_PUSHLIKE,$WS_TABSTOP))
    GUICtrlSetFont(-1, 12, 400, 0, "Wingdings")
    ;i große Checkbox ALS Icon
    $Checkbox3 = GUICtrlCreateCheckbox("&s", 30, 130, 150, 35, BitOR($BS_ICON, $BS_PUSHLIKE))
    GUICtrlSetImage(-1, "shell32.dll", 7)
    ;i große Checkbox mit Icon
    $Checkbox4 = GUICtrlCreateCheckbox("button", 30, 170, 180, 35, $BS_ICON)
    GUICtrlSetImage(-1, "shell32.dll", 22)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ;i ENDE

    [/autoit]
  • Danke RR04, sehr interessant!

    Bei der $Checkbox3 mit dem Icon ist es optisch genau so, wie ich es mir für einen "normalen" Button auch wünschen würde. Da sieht man sehr schön das Eingedrückte. Aber ich will nicht noch ein icon suchen. :( Icon für "Überwachen".

    happy computing!
    R@iner

  • Hi, so vielleicht?

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $checkCN, $msg

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

    Local $hGUI = GUICreate("My GUI Checkbox") ; will create a dialog box that when displayed is centered
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    $checkCN = GUICtrlCreateCheckbox("CheckBox 1", 20, 20, 120, 30, BitOR($BS_PUSHLIKE, $BS_AUTOCHECKBOX))
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 7)

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

    Local $btnState = GUICtrlCreateButton("Get State", 20, 120, 120, 30)

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

    GUISetState() ; will display an dialog box with 1 checkbox

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

    ; Run the GUI until the dialog is closed
    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $checkCN
    If BitAND(GUICtrlRead($checkCN), 1) Then
    WinSetTitle($hGUI, "", "My GUI Checkbox - checked")
    Else
    WinSetTitle($hGUI, "", "My GUI Checkbox - unchecked")
    EndIf
    Case $btnState
    If BitAND(GUICtrlRead($checkCN), 1) Then
    MsgBox(0, '', "Button - checked")
    Else
    MsgBox(0, '', "Button - unchecked")
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>Example

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hallo,

    meinst Du das?

    Spoiler anzeigen
    [autoit]

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

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

    GUICreate("Test")
    $idBtn = GUICtrlCreateButton("Hallo", 20, 20, 150, 30)
    GUISetState()
    $BtnState = "Up"

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $idBtn
    Switch $BtnState
    Case "Up"
    GUICtrlSendMsg($idBtn, $BM_SETSTATE, 1, 0)
    $BtnState = "Down"
    Case Else
    GUICtrlSendMsg($idBtn, $BM_SETSTATE, 0, 0)
    $BtnState = "Up"
    EndSwitch
    EndSwitch
    WEnd

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

    Exit

    [/autoit]
  • Hallo Ihr Zwei,

    super vielen Dank!

    Die Lösung von RR04 brauche ich für den besagten Button, da man schön sieht, dass was eingerastet ist. Und die Lösung von Großvater kann ich für nen anderen Button gebrauchen!

    Danke Euch Drei nochmal!

    Gruß
    R@iner