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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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