GUICtrlCreateCheckbox Schrift ändern

  • Hi,

    Nächste Problem!

    kann mir einer sagen wie ich bei einem GUICtrlCreateCheckbox die Schriftgröße und Farbe ändern kann??

    Ich find da nix.

    Alternativ: Ist es möglich einem gewissen Bereich einer GUI eine andere Hintergrundfarbe zu geben.

    Code
    $gui = GUICreate("BSP",1000,600)
    GUISetBkColor(0x313131)
    GUISetState(@SW_SHOW)

    Da die Farbe recht dunkel ist und der Text der Checkboxen ja schwarz (also auch recht dunkel ;) ) ist , würde ich gerne einen Bereich von ca 300x300 mit weiß hinterlegen. Nur leider weis ich nicht wie!

    Naja, ich weis ja ich nerve aber HHIIIILLLFFFFEEE :D

    cu
    Balti

    Einmal editiert, zuletzt von MrB (11. Dezember 2008 um 20:40)

  • Und wie siehts mit der Möglichkeit aus einen Teil der GUI anders einzufärben. Habs mal mit einem Label probiert. Leider wird das Label komplett ausgeblendet sobald ich da ne checkbox drauf setze

  • Hallo, das liegt wohl daran, weil deine Checkbox viel zu breit ist und somit dein Label überdeckt wird.
    Hier mal ein Beispiel von verschiedenen Farbberreichen.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    GUICreate("TEST", 200, 200)
    GUICtrlCreateGraphic(0, 100, 100, 100, 0)
    GUICtrlSetBkColor(-1, 0xFFFF00)
    GUICtrlCreateGraphic(100, 100, 100, 100, 0)
    GUICtrlSetBkColor(-1, 0x0000FF)
    GUICtrlCreateGraphic(0, 0, 100, 100, 0)
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlCreateGraphic(100, 0, 100, 100, 0)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Input = GUICtrlCreateInput("", 40, 70, 120, 20)
    $Button = GUICtrlCreateButton("Msgbox :D", 40, 120, 120, 20)
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    If $msg = $Button Then MsgBox(0, "", GUICtrlRead($Input))
    WEnd

    [/autoit]
  • Also die Schriftart änderst du mit GUICtrlSetFont(-1, 10, 400, 0, "Arial") und die Schriftfarbe ändert man eigentlich mit GUICtrlSetColor(-1, 0xff000) aber das geht da irgendwie nit, kannst aber mit GUICtrlSetBKColor(-1, 0xff000) die Hintergrundfarbe ändern!

    mfg. Jam00

  • Jep, habs geschnaggelt.
    GUICtrlSetBKColor hatte ich nicht probiert den Rest schon. :cursing:

    Hmm, wie unterscheidet man eigentlich zwischen ausgewählt und nicht bei einer Checkbox. Meine er soll die checkbox nur beachten wenn das häkchen drin ist.

    Sry arbeite das erste mal mit den dingern

  • Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Big Checkbox", 235, 138, 299, 233)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox basic", 32, 10, 145, 35)
    GUICtrlSetFont(-1, 12, 400, 0, "Wingdings")
    $Checkbox2 = GUICtrlCreateCheckbox("Grosse Checkbox", 32, 50, 145, 35, BitOR($BS_CHECKBOX,$BS_AUTOCHECKBOX,$BS_PUSHLIKE,$WS_TABSTOP))
    GUICtrlSetFont(-1, 12, 400, 0, "Wingdings")
    $Checkbox3 = GUICtrlCreateCheckbox("&s", 32, 90, 145, 35, BitOR($BS_ICON, $BS_PUSHLIKE))
    GUICtrlSetImage(-1, "shell32.dll", 7)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

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

    ;i ENDE

    [/autoit]


    Viel Erfolg ! :)

  • mit GuiCtrlRead ($ ChekBox1)
    bei 1 ist sie angekreutz bei 4 nicht (weis jetzt nit genau)
    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Zahl = 4
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 413, 298, 303, 219)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 99, 72, 97, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $Read = GUICtrlRead ($Checkbox1)
    If $Zahl = $Read Then
    Sleep (50)
    ElseIf $Read = "1" Then
    MsgBox (0,"","Makiert")
    $Zahl = 1
    ElseIf $Read = "4" Then
    MsgBox (0,"","Nicht Makiert")
    $Zahl = 4
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]


    Das mit der $Zahl ist nur damit der die MsgBox nit als anzeigt, sondern nur wenn sich was änder! ;)

    mfg. Jam00

  • RR04

    Tja, ich glaub ich sollte auch mal KODA benutzen. mache noch alles von hand ;(
    THX hat mir geholfen

    Jam00

    Da war ich schon auf dem richtigen Weg. Jetzt muss ich mir nur noch was ausdenken wie ich am einfachsten 27 Checkboxen handhabe. die Sache ist die, jede check box hat einen wert z.B. 1 bis 27 und er soll mir wenn ich auf start drücken die werte aller markierten mit einem komma dazwischen ausgeben. Also ran an die Sache!

    THX ALL

  • RR04
    Falsch verstanden bzw. ich mich schlecht ausgedrückt

    Also, ich hab die 27 Checkboxen schon erstellt. Jetzt soll er mir aber wenn ich Checkbox 3, 7, 9, 12,13 markiert habe die auch in einer reihe ausgeben z.B. in einer MSGBOX oder so. ich muss die werte hinterher in eine ini schreiben und muss die halt hintereinander haben.
    Ich hatte mir das so gedacht, dass ich über GUIGetMessage die ID auslese, dann sage wenn id z.B. 1 erkannt dann soll er einen wert in die liste aufnehmen. geht nur nicht weil der wert ja immer aufgenommen wird egal ob markiert oder unmarkiert.

    So die Abfragen klappen ja soweit ganz gut. nur weis ich nicht wie ich alles hinterher zusammen bekomme. Vor allem muss ich ja die abfrage für jede checkbox einzeln machen. UUUIII , das kostet mich noch Gehirnschmalz

  • Hier einmal etwas anschaulicher:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Dim $aCheckbox[20]

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

    $Form1 = GUICreate("Checkbox for MrB", 259, 500)
    For $i = 0 To 19
    $aCheckbox[$i] = GUICtrlCreateCheckbox("Check" & $i+1, 24, 32 + $i * 16, 65, 17)
    Next
    $Button1 = GUICtrlCreateButton("OK", 100, 40, 150, 33, 0)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    For $i = 0 To 19
    If BitAND(GUICtrlRead($aCheckbox[$i]), $GUI_CHECKED) Then
    MsgBox(0,"","Check" & $i+1 & " ist ausgewählt.")
    ExitLoop
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]


    EDIT: Ja, dann siehe BugFix Post 12 oder 9
    Viel Erfolg ! ;)

    • Offizieller Beitrag

    Hab mal ein altes Bsp. ausgekramt:

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    ExitLoop
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • Ja. soweit ganz gut und ich habs auch soweit gerallt (denk ich) nur müsste er wenn ich auf OK klicke alle markierten anzeigen und soweit ichs verstanden habe nimmt er wahrscheinlich nur den obersten und danach nix mehr. Meine also er müsste mir dann sagen das Chek1 und check4 und check7 usw. markiert sind

    SRY war am schreiben wie du dein Beispiel gepostet hast. Da brauch ich dann mal was länger um durch zu blicken :D

    Einmal editiert, zuletzt von MrB (9. Dezember 2008 um 23:33)

  • Ich habe das Script um "CheckBox color" erweitert.

    Spoiler anzeigen
    [autoit]


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

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

    $Form1_1 = GUICreate("Big Checkbox", 210, 180, 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 grosse Checkbox Schriftart und Grösse anders
    $Checkbox2 = GUICtrlCreateCheckbox("Grosse Checkbox", 30, 90, 150, 35, BitOR($BS_CHECKBOX,$BS_AUTOCHECKBOX,$BS_PUSHLIKE,$WS_TABSTOP))
    GUICtrlSetFont(-1, 12, 400, 0, "Wingdings")
    ;i grosse Checkbox mit Icon
    $Checkbox3 = GUICtrlCreateCheckbox("&s", 30, 130, 150, 35, BitOR($BS_ICON, $BS_PUSHLIKE))
    GUICtrlSetImage(-1, "shell32.dll", 7)

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

    GUISetState(@SW_SHOW)

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

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

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

    EndSwitch
    WEnd

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

    ;i ENDE

    [/autoit]


    Allen schöne Feiertage ! :)

  • Sorry, aber ich ralls nicht.
    Kannst du bitte mal einen Button einfügen, der wenn ich drauf klicke mir alle markierten Checkboxen in einer MsgBox (oder was anderes) auflistet. Gleichzeitig soll er aber nicht den Namen der Checkbox sondern einen Text ausgeben z.B: Für CheckBox_1 soll er den Text "Tier" nehmen und für ChekBox_4 den Text "Mensch" usw. . Der Text wird im Script für jede Checkbox festgelegt.

    Funktioniert das Script nur wenn ich die CheckBoxen so erstelle wie du:

    Code
    For $i = 0 To UBound($arCB) -1
    	$top += 30
    	$arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    	GUICtrlSetOnEvent(-1, '_ClickCB')
    Next

    Weil das geht bei mir nicht (denke ich) da jede Checkbox einen anderen Namen hat und nicht einfach durch nummeriert werden kann.

    Kann es sein das das ganze nur im OnEvent Modus klappt?

    Tut mir echt leid aber das übersteigt noch meine Kenntnisse von AutoIt .

    Aber ich versuchs weiter.

    CU

    Einmal editiert, zuletzt von MrB (10. Dezember 2008 um 16:15)

    • Offizieller Beitrag

    Ich habe BugFix's Beispiel mal um einen MsgBox-Ausgabe-Button erweitert:

    Spoiler anzeigen
    [autoit]


    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str, $bOutput
    Global $arCBNames = StringSplit('aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj,kkk,mmm,nnn,ooo,ppp,qqq,rrr,sss,ttt,uuu', ',')
    Global $arCB[20][3] ; Array für Handle und Dual-Wert der CB
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    $arCB[$i][0] = GUICtrlCreateCheckbox($arCBNames[$i+1], 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    $bOutput = GUICtrlCreateButton('MsgBox-Ausgabe', 250, 80, 150, 21)
    GUICtrlSetOnEvent(-1, '_Output')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    ExitLoop
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

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

    Func _Output()
    Local $str = ''
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $arCBNames[$i+1] & ', '
    Next
    MsgBox(0, 'Ausgabe', StringTrimRight($str, 2))
    EndFunc

    [/autoit]