Toolbar mit eigenen Bildern

  • Hey,

    ich möchte gerne eine Toolbar einbauen und zwar nicht mit den Standard-Bildern, sondern mit meinen eigenen.
    Gibts dafür eine einfache Lösung, die UDF ist mir noch ziemlich unklar :(

    Hier mal das Beispielskript:

    Spoiler anzeigen
    [autoit]


    #include <GuiToolbar.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>

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

    $Debug_TB = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

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

    Local $hGUI, $hToolbar
    Local Enum $idNew = 1000, $idOpen, $idSave, $idHelp

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

    ; Create GUI
    $hGUI = GUICreate("Toolbar", 400, 300)
    $hToolbar = _GUICtrlToolbar_Create($hGUI)
    GUISetState()

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

    ; Add standard system bitmaps
    _GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)

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

    ; Add buttons
    _GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_REDOW )
    _GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
    _GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILENew)

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

    While 1
    If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $idSave), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then
    MsgBox(0, "", "Save-Button")
    EndIf
    If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $idNew), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then
    MsgBox(0, "", "-Button")
    EndIf
    If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $idOpen), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then
    MsgBox(0, "", "Open-Button")
    EndIf

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

    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_Close
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Gruß nuts

    \edit: Ähm dazu muss ich mir eine bitmap resource datei (.dll?) erstellen? Gibts dazu einfache Programme oder muss sowas selbst in einer Hochsprache programmiert werden?

    2 Mal editiert, zuletzt von nuts (16. Juli 2009 um 22:32)

    • Offizieller Beitrag

    Wenn die BMP aus EXE od. DLL stammen, geht es so:
    (Muster mit SciTE.exe)

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GuiToolbar.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GDIPlus.au3>

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

    Local $hGUI, $hToolbar
    Local $idSciTE = 1000 ; ID für ToolbarButton vergeben, 1000 - damit kein Konflikt mit Standard-Controls entsteht

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

    Local $ressource = 'C:\Programme\AutoIt3\SciTE\SciTE.exe' ; Datei mit dem(n) BMP
    Local $resID = 100 ; ID des BMP in der Ressourcendatei (kannst du im Reshacker sehen)

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

    ; Datei laden als Ressource
    Local $hInstance = _WinAPI_LoadLibrary($ressource)

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

    ; Create GUI
    $hGUI = GUICreate("Toolbar", 400, 300)
    $hToolbar = _GUICtrlToolbar_Create($hGUI)
    GUISetState()

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

    ; BMP aus SciTE laden zur Toolbar
    _GUICtrlToolbar_AddBitmap($hToolbar, 1, $hInstance, $resID)

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

    ; Button auf Toolbar mit diesem BMP erstellen
    _GUICtrlToolbar_AddButton($hToolbar, $idSciTE, 0)

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

    While 1
    If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $idSciTE), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then
    MsgBox(0, "", "SciTE-Button")
    EndIf

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

    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_Close
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • falls Du Deine eigene .dll erstellen willst...

    Ich hab da mal irgendwo ein ganz praktisches .au3-Script entdeckt.
    Damit kannst Du Dir deine eigene .dll erstellen und Resourcen hinzufügen.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • So funktioniert doch nicht so wie gewollt. Ich erstelle mit dem Skript von Schnuffel eine .dll und binde diese entsprechend ins Skript ein.
    Allerdings erscheint beim Ausführen ein Windowsfehler: Die Anwendung oder DLL "soundso" ist keine gültige Windowsdatei (und dann noch der Hinweis mit der Install. diskette).

    Vermutlich liegt es daran, dass irgendeine Laufzeitkomponente hier am PC nicht installiert ist?
    Nur welche?
    Außerdem wird die eigene Toolbar dann teuer erkauft, denn schließlich müssten die entsprechenden Voraussetzungen bei der Prog.- Installation auf jedem PC geschaffen werden.

  • Hm auch ne Idee.
    Habe von Oscar gerade den Tipp bekommen: "Nimm eine leere .dll und füge mit dem Res Hacker die entsprechenden Bilder hinzu".
    Ist genial einfach und funktioniert (hab eine System .dll genommen, die sollten überall laufen)!

  • Hey,

    hab noch eine Frage.

    Irgendwie muss ich in meinem Skript bitmaps mit 32bit Farbtiefe verwenden. Woran könnte das liegen?
    Vielleicht an der verwendeten .dll? Oder ist das einfach so bei der Toolbar UDF?

    Bei 24bit bitmaps bleibt das Bild schwarz.

    Gruß nuts