Bei klick auf verschiedene Buttons, verschiedene Bilder in der Mitte des Bildschirms anzeigen lassen.

  • Hallo ihr fleißigen AutoItler,

    Ich würde mich über Hilfe bei meinem Problem freuen:
    Bis jetzt habe ich leider fast nur die GUI.

    Ich möchte nun zwei Buttons einfügen, die beim Klick verschiedene Bilder auf die Mitte des Bildschirms zaubern.

    Die GUI ist ja für euch belanglos denke ich.

    Also habe ich erst:


    GUICtrlCreateButton("", 70, 160, 50, 50)

    GUICtrlCreateButton("", 130, 160, 50, 50)


    Wahrscheinlich muss ich denen aber eine ID geben oder? Also:


    $Button1 = GUICtrlCreateButton("", 70, 160, 50, 50)

    $Button2 = GUICtrlCreateButton("", 130, 160, 50, 50)


    Bei Klick auf $Button1 soll dann

    (@ScriptDir & "\files\image1.bmp") in der Mitte des Bildschirms
    angezeigt werden und bei Klick auf $Button2 (@ScriptDir &
    "\files\image2.bmp") und das Image1 soll dann logischerweise nicht mehr zu sehen sein.

    Könnt ihr mir helfen?
    Bei Google komme ich auf keinen grünen Zweig :(


    lG

  • Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>

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

    HotKeySet("{ESC}","_ExitView") ;Zum Verlassen des Bildes

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

    _GDIPlus_Startup()

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

    $hGUI = GUICreate("TestWindow",200,200)
    $hDisplayImg1 = GUICtrlCreateButton("Bild 1", 0, 0, 200, 100)
    $hDisplayImg2 = GUICtrlCreateButton("Bild 2", 0, 100, 200, 100)
    GUISetState()

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

    Local $hPicGUI

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $hDisplayImg1
    $hPicGUI = _DisplayPictureMid(@ScriptDir & "\files\image1.bmp")
    Case $hDisplayImg2
    $hPicGUI = _DisplayPictureMid(@ScriptDir & "\files\image1.bmp")
    Case -3 ;GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _DisplayPictureMid($sPath)
    $hImage = _GDIPlus_ImageLoadFromFile($sPath)
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hGUI = GUICreate("",$iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_TOOLWINDOW)
    GUISetState()

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphics)
    Return $hGUI
    EndFunc

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

    Func _ExitView()
    GUIDelete($hPicGUI)
    EndFunc

    [/autoit]


    So?

    lg chess

  • Okay erstmal danke, dass ist schon fast ganz genau was ich will :thumbup:

    Folgendes würde ich gerne noch wissen:
    - Wie kann ich machen, dass das Bild mit transparentem Hintergrund angezeigt wird? Habe es als PNG Datei versucht, aber dann wird der transparente Hintergrund einfach nur grau (wie auch der Hintergrund der GUI)
    und:
    - Kann ich irgendwie einstellen, dass das Bild IMMER im Vordergrund bleibt, also wenn ich zum Beispiel einen Film anschaue oder ein Spiel spiele, das Bild trotzdem noch zu sehen ist?


    lG
    Noni

  • ... Funktioniert allerdings nicht bei anderen Vollbild-Anwendungen (Ist nämlich schon in meinem Skript drin). ;)

    Zu deiner 1. Frage:
    Das, was du siehst, ist der Hintergrund der GUI, in der dein Bild angezeigt wird. Ja, es ist möglich, und ich hab' das auch schonmal gesehen, kann dir aber nicht sagen, wie das geht.

    Zu deiner 2. Frage:
    Ich denke nicht, dass sich ein Bild so ohne weiteres über eine Vollbild-Anwendung legen lässt. Evtl. per WinAPI.

    lg chess

  • Das Bild ohne den GUI Hintergrund anzuzeigen geht mit mehrschichtigen Fenstern.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>

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

    HotKeySet("{ESC}", "_ExitView") ;Zum Verlassen des Bildes

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

    _GDIPlus_Startup()

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

    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)

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

    $hGUI = GUICreate("TestWindow", 200, 200)
    $hDisplayImg1 = GUICtrlCreateButton("Bild 1", 0, 0, 200, 100)
    $hDisplayImg2 = GUICtrlCreateButton("Bild 2", 0, 100, 200, 100)
    GUISetState()

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

    Local $hPicGUI

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $hDisplayImg1
    $hPicGUI = _DisplayPictureMid(@ScriptDir & "\files\image1.png")
    Case $hDisplayImg2
    $hPicGUI = _DisplayPictureMid(@ScriptDir & "\files\image1.png")
    Case -3 ;GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _DisplayPictureMid($sPath)
    $hImage = _GDIPlus_ImageLoadFromFile($sPath)
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage, 0)

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

    DllStructSetData($tSize, "X", $iWidth)
    DllStructSetData($tSize, "Y", $iHeight)

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

    $hGUI = GUICreate("", $iWidth, $iHeight, Default, Default, 0, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
    GUISetState()

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

    $hDC_Wnd = _WinAPI_GetDC($hGUI)
    $hDC_Bmp = _WinAPI_CreateCompatibleDC($hDC_Wnd)
    $hOldObj = _WinAPI_SelectObject($hDC_Bmp, $hBitmap)

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

    _WinAPI_UpdateLayeredWindow($hGUI, $hDC_Wnd, 0, $pSize, $hDC_Bmp, $pSource, 0, $pBlend, $ULW_ALPHA)

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

    _WinAPI_SelectObject($hDC_Bmp, $hOldObj)
    _WinAPI_ReleaseDC($hGUI, $hDC_Wnd)
    _WinAPI_DeleteDC($hDC_Bmp)
    _WinAPI_DeleteObject($hBitmap)

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

    _GDIPlus_ImageDispose($hImage)

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

    Return $hGUI
    EndFunc ;==>_DisplayPictureMid

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

    Func _ExitView()
    GUIDelete($hPicGUI)
    EndFunc ;==>_ExitView

    [/autoit]
  • Das funktioniert leider nicht :(
    Wenn ich den Code einbaue bekomme ich beim Klick auf den Button garkein Bild mehr angezeigt, sonder nur noch eine kleine leere GUI

  • Bei mir funktioniert es. Wenn die Pfade zu den Bildern stimmen wüsste ich nicht woran es sonst liegen könnte...
    Hast du Windows XP?

    Ich nutze Win7x64. Bilderpfade stimmen soweit. Ich glaube eigentlich ich habe sauber alles eingefügt aber ich überprüfe es nochmal.
    Ich nutze einen Skin für den script (V-touch.skf) Kann es vielleicht daran liegen?

    Und welches format müssen die Bilder haben? Habe Gif, png und Bmp probiert.

    2 Mal editiert, zuletzt von Nonilol (9. Dezember 2012 um 11:25)

  • Zitat

    Ich nutze einen Skin für den script (V-touch.skf) Kann es vielleicht daran liegen?


    Möglicherweise. Probier es mal ohne Skin aus.

    Zitat

    Und welches format müssen die Bilder haben? Habe Gif, png und Bmp probiert.


    Du kannst alle genannten Formate verwenden. PNG ist aber natürlich das einzige, das (richige) Transparenz unterstützt.

  • Bei mir funktioniert es einwandfrei!!
    ich habe es mit diesen 3 Bilddateien getestet:

    .bmp
    .png
    .jpg

    funktionieren alle 3!! Ich nutze auch Win7x64

    vielleicht probierst du mal .jpg aus des sollte immer funktionieren

    Edit: hatte das mit der transparenz nicht gelesen tut mir leid, ja da ist PNG das ideale dafür

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin