Statusbar unsauber

  • Hallo,

    ich habe ein kleines Problem mit meiner Statusbar. Sie "flackert". Ich vermute das ich hier nicht sauber code, aber mir fehlt hier noch das Knowhow

    Hier mal der Schnipsel:

    [autoit]

    $statuslabel = GUICtrlCreateLabel(" ", -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $statuslabel = GUICtrlCreateLabel($defaultstatus, -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)

    [/autoit]

    Hat mir mal bitte jemand ein Beispiel wie man sowas aufbaut. Also je nachdem ob ich Button 1, 2 oder 3 drücke möchte ich eine andere Meldung in der Status Bar

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (14. Dezember 2010 um 15:27)

    • Offizieller Beitrag

    Du kannst durchaus ein Label als Stutusbar nehmen. Dein geflacker kommt 100% daher, das ständig neu gezeichnet wird.
    Ohne einen vollständigen Code kann dir aber niemand einen Rat geben. Der Updateteil fehlt in deinem Codeschnipsel.

  • OK hier mal der Code:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 0) ; Wechsle nicht in den OnEvent Modus
    Opt("GUICoordMode", 1)

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

    _IfDate("02.11.2012")
    Signatur()

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

    Func Signatur()
    #Region
    Local $defaultstatus = "Bereit zum Signieren", $status, $varMenuDatei, $varMenuDateiOeffnen
    Local $varMenuHilfe, $varMenuHilfeInfo, $varMenuDateiBeenden
    Local $viewmenu, $viewstatusitem
    Local $statuslabel, $msg, $varFile4Signatur, $varxxxBildID
    Dim $varMainWindowHeight, $varMainWindowWidth, $varMainGUI
    #EndRegion

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

    #Region
    DirCreate(@TempDir & "\xxx\")
    $varTempDirxxx = (@TempDir & "\xxx\")
    FileInstall(".\xxxCodeSign_until_02122012.spc", $varTempDirxxx)
    FileInstall(".\signcode.exe", $varTempDirxxx)
    FileInstall(".\xxx.pvk", $varTempDirxxx)
    FileInstall("..\..\..\Bilder\BMP\xxx_ssd_roter_rahmen.bmp", $varTempDirxxx)
    #EndRegion

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

    #Region
    $varMainWindowWidth = ("700")
    $varMainWindowHeight = ("500")
    ;Hauptfenster wird erzeugt
    $varMainGUI = GUICreate("CodeSigner", $varMainWindowWidth, $varMainWindowHeight, Default, Default, $WS_SIZEBOX, $WS_EX_ACCEPTFILES); Fenster erzeugen
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    ;GUISetBkColor(0x00616561)
    ;GUISetFont(12, Default, Default, "Verdana")
    #EndRegion

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

    #Region
    ;Bild als Überschrift einfügen
    $varxxxBildID = GUICtrlCreatePic($varTempDirxxx & "\xxx_ssd_roter_rahmen.bmp", -1, -1, 200, 50)
    GUICtrlSetPos($varxxxBildID, 250, 380)
    #EndRegion

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

    #Region
    ;Menüleiste DATEI einbauen
    $varMenuDatei = GUICtrlCreateMenu("&Datei")
    $varMenuDateiOeffnen = GUICtrlCreateMenuItem("&Öffnen", $varMenuDatei)
    $varMenuDateiBeenden = GUICtrlCreateMenuItem("&Beenden", $varMenuDatei)
    ;Menüleite ? einbauen
    $varMenuHilfe = GUICtrlCreateMenu("&?")
    $varMenuHilfeInfo = GUICtrlCreateMenuItem("&Info", $varMenuHilfe)
    ;Menüleite ANSICHT einbauen
    ;~ $viewmenu = GUICtrlCreateMenu("&Ansicht", -1, 1)
    ;~ $viewstatusitem = GUICtrlCreateMenuItem("Statusbar", $viewmenu)
    ;~ GUICtrlSetState(-1, $GUI_UNCHECKED)
    $statuslabel = GUICtrlCreateLabel($defaultstatus, -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $varToDoFrame = GUICtrlCreateLabel("", -1, -1, $varMainWindowWidth - 40, 150, $SS_BLACKFRAME)
    GUICtrlSetPos($varToDoFrame, 20, 15)
    $varToDoAnleitung = GUICtrlCreateLabel(" Anleitung", -1, -1, Default, Default)
    GUICtrlSetPos($varToDoAnleitung, 40, 9)
    $varToDoText = GUICtrlCreateLabel("Mit dieser Anwendung können Softwareentwickler Ihre für Windows entwickelte Software digital signieren" & @CRLF & @CRLF & "Es können Dateien im 32 Bit und 64 Bit Benutzermodus (*.exe, *.cab, *.dll, *.ocx, *.msi und *.xpi Dateien) sowie Kernel Mode Software signiert werden" & @CRLF & @CRLF & "Hierzu haben Sie zwei verschiedene Möglichkeiten" & @CRLF & @CRLF & "1. Sie suchen über 'Datei - Öffnen' die entsprechende Datei heraus und klicken dann auf den 'Signieren' Button" & @CRLF & "2. Sie ziehen die zu signierende Datei per 'Drag && Drop' auf die entsprechende Schaltfläche (die zu bevorziehende Methode)", -1, -1, $varMainWindowWidth - 80, 120)
    GUICtrlSetPos($varToDoText, 40, 30)
    $varAnleitungSignieren = GUICtrlCreateLabel("Bitte ziehen Sie die zu signierende Datei per Drag && Drop in das unten stehende Feld", -1, -1, 400, 30)
    GUICtrlSetPos($varAnleitungSignieren, 150, 190)
    $varDragAndDropField = GUICtrlCreateInput("", 150, 220, 400, 80)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $varSignierenButton = GUICtrlCreateButton("Signieren", 150, 320, 100, 40)
    $varLoeschenButton = GUICtrlCreateButton("Löschen", 300, 320, 100, 40)
    $varBeendenButton = GUICtrlCreateButton("Beenden", 450, 320, 100, 40)

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

    GUISetState()
    #EndRegion

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

    ; Ab hier Schleife
    #Region
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $varMenuDateiOeffnen Then
    $varSystemDrive = EnvGet("SystemDrive")
    $varFile4Signatur = FileOpenDialog("Bitte zu signierende Datei auswählen...", $varSystemDrive & "\", "EXE / DLL (*.*)")
    WinWaitActive("Bitte zu signierende Datei auswählen...", "", 1)
    WinSetState("Bitte zu signierende Datei auswählen...", "", @SW_SHOW)
    ControlSend("CodeSigner", "", 16, $varFile4Signatur, 1)
    EndIf
    If $msg = $viewstatusitem Then
    If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
    GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
    GUICtrlSetState($statuslabel, $GUI_HIDE)
    Else
    GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
    GUICtrlSetState($statuslabel, $GUI_SHOW)
    EndIf
    EndIf
    If $msg = $varMenuHilfeInfo Then MsgBox(64, "Info", "Coded by xxx & @CRLF & @CRLF & "Aktuell ist das Zertifikat bis zum 02. Dezember 2012 gültig !")
    If $msg = $varSignierenButton Then
    $statuslabel = GUICtrlCreateLabel("Datei " & GUICtrlRead($varDragAndDropField) & " wird signiert", -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $varRunZeil = Run('"' & $varTempDirxxx & 'signcode.exe" -spc xxxCodeSign_until_02122012.spc -v xxx.pvk -a sha1 "' & GUICtrlRead($varDragAndDropField) & '"', $varTempDirxxx, @SW_HIDE)
    Sleep(200)
    ControlSend("Kennwort für privaten Schlüssel eingeben", "", 501, "xxx", 1)
    Sleep(200)
    ControlClick("Kennwort für privaten Schlüssel eingeben", "", 1)
    EndIf
    If $msg = $varLoeschenButton Then
    GUICtrlSetData($varDragAndDropField, "")
    $statuslabel = GUICtrlCreateLabel(" ", -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $statuslabel = GUICtrlCreateLabel($defaultstatus, -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    EndIf
    If $msg = $GUI_EVENT_CLOSE Or $msg = $varMenuDateiBeenden Or $msg = $varBeendenButton Then ExitLoop
    WEnd
    DirRemove(@TempDir & "\xxx\", 1)
    GUIDelete()
    #EndRegion

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

    EndFunc ;==>Signatur

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

    Func _IfDate($Date)
    $DateSplit = StringSplit($Date, ".")

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

    $DateMDAY = $DateSplit[1]
    $DateMON = $DateSplit[2]
    $DateYEAR = $DateSplit[3]
    $NewDate = $DateYEAR & $DateMON & $DateMDAY

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

    If $NewDate < @YEAR & @MON & @MDAY Then
    ElseIf $NewDate <= @YEAR & @MON & @MDAY Then
    MsgBox(48, "Zertifikatsprüfung", "Am 02. Dezember 2010 läuft das Zertifikat zum Signieren von Dateien aus.")
    ElseIf $NewDate > @YEAR & @MON & @MDAY Then
    MsgBox(64, "Zertifikatsprüfung", "Das Zertifikat ist noch gültig.", 2)
    EndIf
    EndFunc ;==>_IfDate

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

    Exit

    [/autoit]
    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 0) ; Wechsle nicht in den OnEvent Modus
    Opt("GUICoordMode", 1)

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

    _IfDate("02.11.2012")
    Signatur()

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

    Func Signatur()
    #Region
    Local $defaultstatus = "Bereit zum Signieren", $status, $varMenuDatei, $varMenuDateiOeffnen
    Local $varMenuHilfe, $varMenuHilfeInfo, $varMenuDateiBeenden
    Local $viewmenu, $viewstatusitem
    Local $statuslabel, $msg, $varFile4Signatur, $varxxxBildID
    Dim $varMainWindowHeight, $varMainWindowWidth, $varMainGUI
    #EndRegion

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

    #Region
    DirCreate(@TempDir & "\xxx\")
    $varTempDirxxx = (@TempDir & "\xxx\")
    FileInstall(".\xxxCodeSign_until_02122012.spc", $varTempDirxxx)
    FileInstall(".\signcode.exe", $varTempDirxxx)
    FileInstall(".\xxx.pvk", $varTempDirxxx)
    FileInstall("..\..\..\Bilder\BMP\xxx_ssd_roter_rahmen.bmp", $varTempDirxxx)
    #EndRegion

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

    #Region
    $varMainWindowWidth = ("700")
    $varMainWindowHeight = ("500")
    ;Hauptfenster wird erzeugt
    $varMainGUI = GUICreate("CodeSigner", $varMainWindowWidth, $varMainWindowHeight, Default, Default, $WS_SIZEBOX, $WS_EX_ACCEPTFILES); Fenster erzeugen
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    ;GUISetBkColor(0x00616561)
    ;GUISetFont(12, Default, Default, "Verdana")
    #EndRegion

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

    #Region
    ;Bild als Überschrift einfügen
    $varxxxBildID = GUICtrlCreatePic($varTempDirxxx & "\xxx_ssd_roter_rahmen.bmp", -1, -1, 200, 50)
    GUICtrlSetPos($varxxxBildID, 250, 380)
    #EndRegion

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

    #Region
    ;Menüleiste DATEI einbauen
    $varMenuDatei = GUICtrlCreateMenu("&Datei")
    $varMenuDateiOeffnen = GUICtrlCreateMenuItem("&Öffnen", $varMenuDatei)
    $varMenuDateiBeenden = GUICtrlCreateMenuItem("&Beenden", $varMenuDatei)
    ;Menüleite ? einbauen
    $varMenuHilfe = GUICtrlCreateMenu("&?")
    $varMenuHilfeInfo = GUICtrlCreateMenuItem("&Info", $varMenuHilfe)
    ;Menüleite ANSICHT einbauen
    $viewmenu = GUICtrlCreateMenu("&Ansicht", -1, 1)
    $viewstatusitem = GUICtrlCreateMenuItem("Statusbar", $viewmenu)
    GUICtrlSetState(-1, $GUI_UNCHECKED)
    $statuslabel = GUICtrlCreateLabel($defaultstatus, -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $varToDoFrame = GUICtrlCreateLabel("", -1, -1, $varMainWindowWidth - 40, 150, $SS_BLACKFRAME)
    GUICtrlSetPos($varToDoFrame, 20, 15)
    $varToDoAnleitung = GUICtrlCreateLabel(" Anleitung", -1, -1, Default, Default)
    GUICtrlSetPos($varToDoAnleitung, 40, 9)
    $varToDoText = GUICtrlCreateLabel("Mit dieser Anwendung können Softwareentwickler Ihre für Windows entwickelte Software digital signieren" & @CRLF & @CRLF & "Es können Dateien im 32 Bit und 64 Bit Benutzermodus (*.exe, *.cab, *.dll, *.ocx, *.msi und *.xpi Dateien) sowie Kernel Mode Software signiert werden" & @CRLF & @CRLF & "Hierzu haben Sie zwei verschiedene Möglichkeiten" & @CRLF & @CRLF & "1. Sie suchen über 'Datei - Öffnen' die entsprechende Datei heraus und klicken dann auf den 'Signieren' Button" & @CRLF & "2. Sie ziehen die zu signierende Datei per 'Drag && Drop' auf die entsprechende Schaltfläche (die zu bevorziehende Methode)", -1, -1, $varMainWindowWidth - 80, 120)
    GUICtrlSetPos($varToDoText, 40, 30)
    $varAnleitungSignieren = GUICtrlCreateLabel("Bitte ziehen Sie die zu signierende Datei per Drag && Drop in das unten stehende Feld", -1, -1, 400, 30)
    GUICtrlSetPos($varAnleitungSignieren, 150, 190)
    $varDragAndDropField = GUICtrlCreateInput("", 150, 220, 400, 80)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $varSignierenButton = GUICtrlCreateButton("Signieren", 150, 320, 100, 40)
    $varLoeschenButton = GUICtrlCreateButton("Löschen", 300, 320, 100, 40)
    $varBeendenButton = GUICtrlCreateButton("Beenden", 450, 320, 100, 40)

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

    GUISetState()
    #EndRegion

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

    ; Ab hier Schleife
    #Region
    While 1
    $msg = GUIGetMsg()
    ConsoleWrite( $msg & @CRLF)
    If $msg = $varMenuDateiOeffnen Then
    $varSystemDrive = EnvGet("SystemDrive")
    $varFile4Signatur = FileOpenDialog("Bitte zu signierende Datei auswählen...", $varSystemDrive & "\", "EXE / DLL (*.*)")
    WinWaitActive("Bitte zu signierende Datei auswählen...", "", 1)
    WinSetState("Bitte zu signierende Datei auswählen...", "", @SW_SHOW)
    ControlSend("CodeSigner", "", 16, $varFile4Signatur, 1)
    EndIf
    If $msg = $viewstatusitem Then
    If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
    GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
    GUICtrlSetState($statuslabel, $GUI_HIDE)
    Else
    GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
    GUICtrlSetState($statuslabel, $GUI_SHOW)
    EndIf
    EndIf
    If $msg = $varMenuHilfeInfo Then MsgBox(64, "Info", "Coded by xxx" & @CRLF & @CRLF & " Aktuell ist das Zertifikat bis zum 02. Dezember 2012 gültig !")
    If $msg = $varSignierenButton Then
    $statuslabel = GUICtrlCreateLabel("Datei " & GUICtrlRead($varDragAndDropField) & " wird signiert", -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $varRunZeil = Run('"' & $varTempDirxxx & 'signcode.exe" -spc xxxCodeSign_until_02122012.spc -v xxx.pvk -a sha1 "' & GUICtrlRead($varDragAndDropField) & '"', $varTempDirxxx, @SW_HIDE)
    Sleep(200)
    ControlSend("Kennwort für privaten Schlüssel eingeben", "", 501, "xxx", 1)
    Sleep(200)
    ControlClick("Kennwort für privaten Schlüssel eingeben", "", 1)
    EndIf
    If $msg = $varLoeschenButton Then
    GUICtrlSetData($varDragAndDropField, "")
    $statuslabel = GUICtrlCreateLabel(" ", -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    $statuslabel = GUICtrlCreateLabel($defaultstatus, -1, -1, $varMainWindowWidth, 17, BitOR($SS_SIMPLE, $SS_SUNKEN))
    GUICtrlSetPos($statuslabel, 0, 443)
    EndIf
    If $msg = $GUI_EVENT_CLOSE Or $msg = $varMenuDateiBeenden Or $msg = $varBeendenButton Then ExitLoop
    WEnd
    DirRemove(@TempDir & "\xxx\", 1)
    GUIDelete()
    #EndRegion

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

    EndFunc ;==>Signatur

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

    Func _IfDate($Date)
    $DateSplit = StringSplit($Date, ".")

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

    $DateMDAY = $DateSplit[1]
    $DateMON = $DateSplit[2]
    $DateYEAR = $DateSplit[3]
    $NewDate = $DateYEAR & $DateMON & $DateMDAY

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

    If $NewDate < @YEAR & @MON & @MDAY Then
    ElseIf $NewDate <= @YEAR & @MON & @MDAY Then
    MsgBox(48, "Zertifikatsprüfung", "Am 02. Dezember 2010 läuft das Zertifikat zum Signieren von Dateien aus.")
    ElseIf $NewDate > @YEAR & @MON & @MDAY Then
    MsgBox(64, "Zertifikatsprüfung", "Das Zertifikat ist noch gültig.", 2)
    EndIf
    EndFunc ;==>_IfDate

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

    Exit

    [/autoit]


    1. hast du einen Syntaxerror, wird dir auch beim compilieren angezeigt.
    2. wenn du eine Variable schon deklarierst und dann die Variablenzuweisung nicht machst(bzw. auskommentierst) hat die Variable den Wert 0.
    In der GUMsg Auswertung fragst du diese 0 Variable ab und dann flackert es halt. Wenn keine Message gesendet wir ist $msg = 0.
    Mit dem auskommentieren meine ich deine Zeilen 55-57 und der Systaxerror war in Zeile 100 da hast du ein " vergessen.