GUICtrlCreatePic - Bilddatei wird nicht in Gui dargestellt

  • huhu,
    durch GUICtrlCreatePic() würde ich gerne ein Bild in die Gui einfügen. Leider wird das Bild nicht in der Gui angezeigt.
    Vlt. habe ich einen flüchtigen Syntaxfehler übersehen.

    Die problematische Zeile ist folgende:

    [autoit]


    $Pic = GUICtrlCreatePic(IniRead(@ScriptDir & "\file.ini", "File", "path", "0"), 0, 0, $width, $height)

    [/autoit]

    Ich habe es auch schon probiert den Pfad, der aus der ini gelesen wird, in eine seperate Variable $path zu übergeben, um damit einen Erfolg zu erzielen.
    Der Pfad ist korrekt. Er wird von einer anderen Anwendung per FileOpenDialog() gespeichert, sodass die Zieldatei exisitiert.

    Das komplette kleine Skript:

    Spoiler anzeigen
    [autoit]


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

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

    Global $path

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

    while Not FileExists(@ScriptDir & "\file.ini")
    Sleep(100)
    WEnd
    _GDIPlus_Startup()
    $width=_GDIPlus_ImageGetWidth(_GDIPlus_ImageLoadFromFile(IniRead(@ScriptDir & "\file.ini", "File", "path", "0")))
    $height=_GDIPlus_ImageGetHeight(_GDIPlus_ImageLoadFromFile(IniRead(@ScriptDir & "\file.ini", "File", "path", "0")))
    _GDIPlus_Shutdown()
    If @DesktopHeight < $height Then
    $width = @DesktopHeight/$height*$width
    $height = @DesktopHeight
    EndIf
    If @DesktopWidth < $width Then
    $height = @DesktopWidth/$width*$height
    $width = @DesktopWidth
    EndIf
    $Gui = GUICreate("File", $width, $height)
    $Pic = GUICtrlCreatePic(IniRead(@ScriptDir & "\file.ini", "File", "path", "0"), 0, 0, $width, $height)
    GUISetState(@SW_SHOW)

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

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

    [/autoit]

    Einmal editiert, zuletzt von bocky3 (17. März 2010 um 12:21)

  • Das hab ich schon probiert und zum Testen mit 5, 5 ersetzt, aber es war auch keine Lösung.

    Edit: Aufbau der ini (Beispiel)

    Code
    [File]
    path=G:\autoit\or\soup.jpg
  • das GDIPlus blockiert das GUICtrlCreatePic kommando! wenn du die ganzen GDI+ kommandos wegmachst dann klappts, keine ahnung warum

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Schonmal probiert, die von GDI geöffneten Bilder auch wieder sauber zu schließen!?

    Spoiler anzeigen
    [autoit]

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

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

    Global $path

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

    While Not FileExists(@ScriptDir & "\file.ini")
    Sleep(100)
    WEnd
    _GDIPlus_Startup()
    $hGDIFile = _GDIPlus_ImageLoadFromFile(IniRead(@ScriptDir & "\file.ini", "File", "path", "0"))
    $width = _GDIPlus_ImageGetWidth($hGDIFile)
    $height = _GDIPlus_ImageGetHeight($hGDIFile)
    _GDIPlus_ImageDispose($hGDIFile) ; <----------------- !!!
    _GDIPlus_Shutdown()
    If @DesktopHeight < $height Then
    $width = @DesktopHeight / $height * $width
    $height = @DesktopHeight
    EndIf
    If @DesktopWidth < $width Then
    $height = @DesktopWidth / $width * $height
    $width = @DesktopWidth
    EndIf
    $Gui = GUICreate("File", $width, $height)
    $Pic = GUICtrlCreatePic(IniRead(@ScriptDir & "\file.ini", "File", "path", "0"), 0, 0, $width, $height)
    GUISetState(@SW_SHOW)

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

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

    [/autoit]
  • Du musst das pic in die Funktion einbauen:

    Spoiler anzeigen
    [autoit]


    $Pic = GUICtrlCreatePic(IniRead(@ScriptDir & "\file.ini", "File", "path", "0"), 0, 0, $width, $height)

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

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

    [/autoit]

    Einmal editiert, zuletzt von MacroMan (17. März 2010 um 09:52)

  • Es lag daran, dass die Dateien, die von GDI geöffnet wurden, nicht korrekt geschlossen wurden.
    Danke SEuBo.