AutoIt Picture Hilfe

  • Hallo Leute,

    ich hab ein kleines Problem.
    Nämlich ich will ein Hintergrund im Gui erstellen, das ist ja kein Problem aber wenn ich ein anderes Bild darauf mache verschwindet es dahinter.
    Ja ich hab schon gelesen das ich das Hintergrundbild disablen kann ABER ich will das bild später mit den ganzen anderen Bilder die auf dem Hintergrundbild sind wieder verschieben können mit der Maus.

    Könntet ihr mir da irgendwie weiterhelfen?

    Danke im Vorraus :)

  • Hi, am unproblematischsten geht das, indem du einfach die WM_PAINT Message abfängst und dementsprechend dein Bild direkt in die GUI zeichnest. Sämtliche Controls werden danach einfach nur noch darüber gezeichnet. Weil ich gerade Langeweile habe, habe ich eine passende Funktion dazu bereits geschrieben. Es dürfte auch mit mehreren GUIs funktionieren da intern eine kleine Datenbank angelegt wird, welches Fenster bereits welche Ressourcen reserviert hat. Das Bild wird dementsprechend auf das Gesamte Fenster gestreckt. ^^

    Hier der vollständige Sourcecode zum ausprobieren:

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    #include <Array.au3>
    #include <AutoItConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $hGUI

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('GUI Background Example')
    GUISetBkImage($hGUI, {Pfad zum Bild})

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

    GUICtrlCreateButton('Beispiel', 10, 10, 100, 20)
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func GUISetBkImage($hWnd, $sFileName)
    GUIRegisterMsg($WM_PAINT, __GUISetBkImage_WM_PAINT)
    __GUISetBkImage_Resources($hWnd, $sFileName)
    OnAutoItExitRegister(__GUISetBkImage_ExitRegister)
    EndFunc

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

    Func __GUISetBkImage_ExitRegister()
    __GUISetBkImage_Resources(Null)
    EndFunc

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

    Func __GUISetBkImage_Resources($hWnd, $sFileName = '')
    Local Static $avResources[1][3]
    Local $iFor, $iIndex, $ahRes[2]

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

    If IsKeyword($hWnd) = $KEYWORD_NULL Then
    For $iFor = 1 To $avResources[0][0]
    _GDIPlus_ImageDispose($avResources[$iFor][2])
    _GDIPlus_GraphicsDispose($avResources[$iFor][1])
    _GDIPlus_Shutdown()
    Next

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

    Return
    EndIf

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

    $iIndex = _ArraySearch($avResources, $hWnd, 1)
    If $iIndex = -1 Then
    $avResources[0][0] += 1
    ReDim $avResources[$avResources[0][0] +1][3]
    $iIndex = $avResources[0][0]

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

    _GDIPlus_Startup()
    $avResources[$iIndex][0] = $hWnd
    $avResources[$iIndex][1] = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $avResources[$iIndex][2] = _GDIPlus_ImageLoadFromFile($sFileName)

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

    Return
    EndIf

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

    $ahRes[0] = $avResources[$iIndex][1]
    $ahRes[1] = $avResources[$iIndex][2]

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

    Return $ahRes
    EndFunc

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

    Func __GUISetBkImage_WM_PAINT($hWnd)
    Local $aiPos = WinGetPos($hWnd)
    Local $ahRes = __GUISetBkImage_Resources($hWnd)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($aiPos[2], $aiPos[3], $ahRes[0])
    Local $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    _GDIPlus_GraphicsDrawImageRect($hBuffer, $ahRes[1], 0, 0, $aiPos[2], $aiPos[3])
    _GDIPlus_GraphicsDrawImage($ahRes[0], $hBitmap, 0, 0)

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

    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)

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

    Return $GUI_RUNDEFMSG
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Einmal editiert, zuletzt von Yjuq (20. August 2015 um 06:40)