Problem bei GUICtrlCreatePic

  • Hi, ich habe ein GUI Fenster erstellt, bei dem ich ein Bild anzeigen möchte.
    Damit es für jedes Bild funktionieren soll, lasse ich zuerst mit den GDIPlus funktionen die Höhe und die Breite bestimmen.
    Aber leider kann nur durch die GDIPlus Funktionen kein Bild erstellt werden.
    Ich weiß nicht warum, aber wenn ich die GDIPlus Funktionen weglasse, dann wird das Bild richtig angezeigt.

    Mit GDIPlus Funktionen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    Local $File, $Image, $GUI, $Msg, $Width = 500, $Height = 375

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

    _GDIPlus_Startup()
    $File = @ScriptDir & "\audi.jpg"
    $Image = _GDIPlus_ImageLoadFromFile($File)
    $Width = _GDIPlus_ImageGetWidth($Image)
    $Height = _GDIPlus_ImageGetHeight($Image)
    _GDIPlus_Shutdown()
    GUICreate("Pic", $Width, $Height, -1, -1)
    GUICtrlCreatePic($File, 0, 0, $Width, $Height)
    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Ohne GDIPlus Funktionen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    Local $File, $Image, $GUI, $Msg, $Width = 500, $Height = 375

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

    $File = @ScriptDir & "\audi.jpg"
    GUICreate("Pic", $Width, $Height, -1, -1)
    GUICtrlCreatePic($File, 0, 0, $Width, $Height)
    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Ich hoffe ihr könnt mir weiterhelfen.

    Einmal editiert, zuletzt von morfi93 (27. Juni 2008 um 17:07)

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    _GDIPlus_Startup()
    $image = _GDIPlus_ImageLoadFromFile("c:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Skype\Pictures\Angel Skype.png")

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

    $hwnd = GUICreate("test", 300, 300)
    GUICtrlCreatePic("", 10, 10, 280, 280)
    GUISetState()
    GUIRegisterMsg($WM_PAINT, "_ReDraw")
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    _GDIPlus_GraphicsDrawImageRect($graphics, $image, 10, 10, 280, 280)

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

    Do
    $msg = GUIGetMsg()
    Until $msg = -3
    _WinAPI_DeleteObject($image)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()

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

    Func _ReDraw()
    _GDIPlus_GraphicsDrawImageRect($graphics, $image, 10, 10, 280, 280)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_ReDraw

    [/autoit]
  • Thx für deine schnelle hilfe, aber muss man das immer so umständlich machen, außerdem glaube ich nicht das das für alle größen funktioniert oder

  • Das funktioniert doch auch so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <File.au3>

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

    Local $File, $Image, $GUI, $Msg, $Width = 500, $Height = 375

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

    Local $files = _FileListToArray(@WindowsDir,"*.bmp")
    $File = @WindowsDir & "\" & $files[Random(1,$files[0])]

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

    _GDIPlus_Startup()

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

    $Image = _GDIPlus_ImageLoadFromFile($File)
    $Width = _GDIPlus_ImageGetWidth($Image)
    $Height = _GDIPlus_ImageGetHeight($Image)
    _GDIPlus_ImageDispose($Image)
    _GDIPlus_Shutdown()
    GUICreate("Pic", $Width, $Height, -1, -1)
    GUICtrlCreatePic($File, 0, 0, $Width, $Height)
    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ich hatte eigentlich gemeint, dass sich das GUI Fenster verändernt wenn ich ein anderes Bild auswähle.
    Es muss nicht alle Bilder anzeigen.
    Nur soll es mir automatisch die Breite und die Höhe einstellen, aber wenn ich das mit den GDI Plus funktionen mache, dann wird gar kein Bild angezeigt.

    Ich hoffe ihr versteht was ich meine

  • Hmm, geht doch??, Mal ein autowechsel zum testen :)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <File.au3>

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

    Local $File, $Image, $GUI, $Msg, $Width = 500, $Height = 375

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

    Local $files = _FileListToArray(@WindowsDir,"*.bmp")
    $File = @WindowsDir & "\" & $files[1]
    $index = 1
    _GDIPlus_Startup()

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

    $Image = _GDIPlus_ImageLoadFromFile($File)
    $Width = _GDIPlus_ImageGetWidth($Image)
    $Height = _GDIPlus_ImageGetHeight($Image)
    _GDIPlus_ImageDispose($Image)
    _GDIPlus_Shutdown()
    $GUI = GUICreate("Pic", $Width, $Height, -1, -1)
    $pic = GUICtrlCreatePic($File, 0, 0, $Width, $Height,0x800) ;0x800 = SS_REALSIZEIMAGE
    GUISetState(@SW_SHOW)

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

    AdlibEnable("UPDATE",1000) ;Zum Testen

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func UPDATE()
    $index += 1
    If $index > $files[0] Then $index = 1
    $File = @WindowsDir & "\" & $files[$index]

    _GDIPlus_Startup()
    $Image = _GDIPlus_ImageLoadFromFile($File)
    $Width = _GDIPlus_ImageGetWidth($Image)
    $Height = _GDIPlus_ImageGetHeight($Image)
    _GDIPlus_ImageDispose($Image)
    _GDIPlus_Shutdown()

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

    WinMove($GUI,"",Default,Default,$Width,$Height)
    GUICtrlSetPos($pic,Default,Default,$Width, $Height)
    GUICtrlSetImage($pic,$file)
    EndFunc

    [/autoit]
  • Thx für deine Hilfe, aber jetzt weiß ich wies funktioniert.
    Hier die Lösung:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <File.au3>

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

    Local $File, $Image, $GUI, $Msg, $Width = 500, $Height = 375

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

    $File = @ScriptDir & "\audi.jpg"
    _GDIPlus_Startup()
    $Image = _GDIPlus_ImageLoadFromFile($File)
    $Width = _GDIPlus_ImageGetWidth($Image)
    $Height = _GDIPlus_ImageGetHeight($Image)
    _GDIPlus_ImageDispose($Image) ; Das war der Fehler ( habe es vergessen )
    _GDIPlus_Shutdown()
    $GUI = GUICreate("Pic", $Width, $Height, -1, -1)
    $pic = GUICtrlCreatePic($File, 0, 0, $Width, $Height)
    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]