GDI+ Image als GUI nutzen

  • hey leute,

    ich möchte eine Grafik als GUI nutzen, mit folgendem Code habe ich es probiert klappt leider nicht.

    könnt ihr mir helfen?

    Spoiler anzeigen
    [autoit]

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

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

    _GDIPlus_Startup()

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

    Global $hImage, $hGUI
    Global $iWidth = _GDIPlus_ImageGetWidth($hImage)
    Global $iHeight = _GDIPlus_ImageGetHeight($hImage)
    Global Const $SC_DRAGMOVE = 0xF012

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

    $hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hGrafics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hImage = _GDIPlus_ImageLoadFromFile("http://upload.wikimedia.org/wikipedia/commons/b/b1/Waldreiche_Region_Beispiel_Gloednitz_22072007_01.jpg")
    _GDIPlus_GraphicsDrawImage($hGrafics, $hImage, 0, 0)

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

    $hGUI = GUICreate("Mein Design", $iWidth, $iHeight, 192, 124)
    GUISetBkColor(0x01, $hGUI)
    GUISetState($GUI_DISABLE)
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0x01, 0xFF, 3)

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

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    _GDIPlus_GraphicsDispose($hGrafics)
    ;_GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
    Case $GUI_EVENT_PRIMARYDOWN
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)

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

    EndSwitch
    WEnd

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGrafics, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, 1)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    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

  • Die Bilddatei muss auf der Festplatte liegen, lade das Bild voher mit z.B Inetget runter.

    Edit:
    Wenn man die URL durch ein gültigen Datipfad austauscht, funktioniert es bei mir.

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

    Einmal editiert, zuletzt von PuReIroNie (19. November 2013 um 18:54)

  • Hi,

    Zitat

    it folgendem Code habe ich es probiert klappt leider nicht.

    Das wundert mich absolut garnicht, lass dir mal die Werte deiner Variablen ausgeben!
    Und versuche mal die Zeilen so zu sortieren, dass nicht alles vollkommen durcheinander ist, sondern LOGISCH aufeinander folgt!

    Falls du es soweit hinbekommen hast, dass eine GUI angezeigt wird, versuche mal zu verstehen was die Konstanten eigentlich aussagen....
    Dann wird auch ein Bild angezeigt...jedenfalls bei mir^^

    Und btw. lass dir das Geld wiedergeben von dem, der dieses Script verzapft hat!

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (19. November 2013 um 18:51)

    • Bitte formuliere in Zukunft deine Problembeschreibungen etwas detailreicher. "klappt leider nicht" hilft uns nicht wirklich weiter.
    • Lies dir am besten noch mal einige grundlegende Tutorials zu GDI+ durch.
    • Du versuchst eine Grafik von einem Fenster zu erstellen, dass zu dem Zeitpunkt nicht existiert. $hGUI ist nur eine leere Variable, das Fensterhandle wird erst später durch GUICreate dort eingetragen.
    • Du musst schon eine Datei für _GDIPlus_ImageLoadFromFile verwenden (wie es auch in der Hilfe beschrieben steht) und keine URL.
    • Du verwendest direkt nach Erzeugung des, noch inaktiven, Fensters diese Zeile: GUISetState($GUI_DISABLE). Ich gehe davon aus, dass du das Fenster "disablen" willst, warum weiß ich nicht. Allerdings musst du dafür erstens das Makro @SW_DISABLE verwenden, nicht die Variable $GUI_DISABLE (ja, das steht auch in der Hilfe), zweitens würdest du keinen Unterschied feststellen, denn dein Fenster ist ja noch nicht einmal sichtbar (das macht man übrigens mit GUISetState(@SW_SHOW) oder auch GUISetState()).
  • habe das bild nun auf dem rechner nur leider funktioniert es noch immer nicht

    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

  • So jetzt wird auch bei mir eine Grafik angezeigt. Danke euch

    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

  • Hier die Version, die du ursprünglich geplant hattest (benötigt die aktuelle Beta!:(

    [autoit]


    #AutoIt3Wrapper_Version=b
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <WinAPI.au3>
    #include <GDIPlus.au3>

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

    _GDIPlus_Startup()

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

    Global $hImage, $hGUI, $hGrafics

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

    $hImage = _GDIPlus_BitmapCreateFromMemory(InetRead("http://aut1.autoit-cdn.com/images/logo_autoit_210x72@2x.png"))
    Global $iWidth = _GDIPlus_ImageGetWidth($hImage)
    Global $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hGUI = GUICreate("Mein Design", $iWidth, $iHeight, -1, -1)
    GUISetBkColor(0x808090, $hGUI)
    $iLabel = GUICtrlCreateLabel("", 0, 0, $iWidth, $iHeight)
    GUISetState()
    $hGrafics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsDrawImageRect($hGrafics, $hImage, 0, 0, $iWidth, $iHeight)

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

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGrafics)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Exit
    Case $iLabel
    MsgBox(0, "Test", "Grafik wurde geklickt")
    EndSwitch
    WEnd

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect($hGrafics, $hImage, 0, 0, $iWidth, $iHeight)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (19. November 2013 um 19:56)