ImageGUI UDF

  • Ich komme hier gerade nicht weiter, ich versuche gerade eine Funktion die Größe eines Bildes zu ermitteln zu schreiben.

    In diesem Script soll bei Buttonklick in der Console die Breite angegeben werden, doch alles was ausgegeben wird ist der wert 0. Was mache ich hier falsch? habe ich etwas übersehen?

    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 211, 97, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 0, 0, 209, 97)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $iWidth = _ImageGUI_GetWidth("wald.jpg")
    ConsoleWrite($iWidth)

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

    EndSwitch
    WEnd

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

    Func _ImageGUI_GetWidth($GUIImage)
    _GDIPlus_Startup()
    $BigImage = _GDIPlus_ImageLoadFromFile($GUIImage)
    $iW = _GDIPlus_ImageGetWidth($BigImage)
    _GDIPlus_Shutdown()
    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

    Einmal editiert, zuletzt von Facemix (21. November 2013 um 16:22)

  • Du musst den wert auch schon zurück geben

    [autoit]


    Func _ImageGUI_GetWidth($GUIImage)
    _GDIPlus_Startup()
    Local $BigImage = _GDIPlus_ImageLoadFromFile($GUIImage)
    Local $iW = _GDIPlus_ImageGetWidth($BigImage)
    _GDIPlus_Shutdown()
    Return $iW ; <---Sonst kommt kein wert von der Func zurück
    EndFunc

    [/autoit]

    sonst ist es immer standard 0

  • Danke Skerg jetzt funktioniert es auch. :thumbup:

    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

  • Ich brauch nochmal eure Augen, denn ich habe eine Klickfunktion eingefügt, ohne die While schleife zu nutzen.

    Es handelt sich in diesem Script um eine ImageGUI mit noch einer Bitmap die den X-Button darstellt. Das Problem ist, man ohne die Klickfunktion, die ohne die while funktioniert, kann das fenster beliebig verschoben werden. Mit dieser Funktion aber, kann das Fenster nicht mehr verschoben werden, sondern hat eine Feste Position von der man es nicht mehr wegbewegen kann.

    Hier das Script:

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

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

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

    _GDIPlus_Startup()

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

    Opt("GUIOnEventMode", 1)

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

    Global $iw, $ih
    #region Image Create
    Global $hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Images/exit.png")
    Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "/Images/wald.jpg")
    Global $iWidth = _GDIPlus_ImageGetWidth($hImage)
    Global $iHeight = _GDIPlus_ImageGetHeight($hImage)
    Global $iw = _GDIPlus_ImageGetWidth($hBitmap)
    Global $ih = _GDIPlus_ImageGetHeight($hBitmap)
    Global Const $SC_DRAGMOVE = 0xF012
    Global $hCursor1 = @WindowsDir & "/Cursors/aero_link_l.cur"
    #endregion Image Create

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

    #region GUI
    $hGUI = GUICreate("Mein Design", $iWidth, $iHeight, 192, 124, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0x01, $hGUI)
    $iLabel = GUICtrlCreateLabel("", 190, 0, $iw, $ih)
    GUISetState()
    _WinAPI_SetLayeredWindowAttributes($hGUI, 0x01, 0xFF, 3)
    #endregion GUI

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

    GUICtrlSetOnEvent($iLabel, "_Exit")

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

    #region show Images
    $hGrafics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsDrawImage($hGrafics, $hImage, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGrafics, $hBitmap, 190, 0)
    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
    #endregion show Images

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

    GUICtrlSetCursor($iLabel, $hCursor1)

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

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

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

    EndSwitch
    WEnd

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

    Func _Exit()
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGrafics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

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

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

    kennt Jemand von euch eine Möglicheit, das man das Fenster wieder schieben kann, ohne dass ich GUICtrlSetOnEvent entfernen muss?

    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

    Einmal editiert, zuletzt von Facemix (21. November 2013 um 20:42)