bild in gui anzeigen und wechseln lassen

  • ich habe mir ein kleines programm geschrieben, dass bilder aus dem netz lädt und in der gui anzeigen soll.
    klasse idee, scheiss unwissenheit.

    ich habe mit

    $pic = GUICtrlCreatePic("kopie.jpg", 8, 138)

    einen placeholder in der GUI angelegt, aber wenn mit

    DirCreate($dir & $sName[0])
    $bild = $dir & $sName[0] & $sFileName
    InetGet($sImageUrl, $dir & $sName[0] & $sFileName, 0, 1)
    GUICtrlSetImage($pic, $bild)

    das neue bild geladen und gespeichert wird, wird es nicht angezeigt.

    ich mache etwas falsch, aber ich weiss nicht was.
    könnt ihr mir bitte auf die sprünge helfen?

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • den gesamten code möchte ich nicht zugänglich machen, auch wenn es die lösungsfindung erschwert.

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • So kann den mist aber keiner testen geschweigenden deinen Fehler finden. Das mindeste ist eine funktionierende gui und in deinem Fall wohl auch die Funktion die das Bild herunterlädt und das Platzhalter Bild welches du verwendest. Ob das 1:1 deinem Originalscript entspricht ist ja mal unwichtig, der Fehler sollte jedenfalls vorhanden und für uns nachvollziehbar sein. Sollen wir raten oder wie stellst du dir das vor? Wer Hilfe will muss auch etwas dafür tun und nicht nur 3,4 Zeilen unvollständigen Code hinklatschen. Wenn du dein Originalscript nicht einstellen willst musst du dir eben die Mühe machen ein Testscript zu schreiben.

  • Hallo Maximus1,

    hier damit du siehst dass es funktionieren kann Bilder aus dem INet in einer GUI anzuzeigen:

    [autoit]

    #cs -----------------------------------------------------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?

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

    Skriptbeispiel für den Umgang mit FileOpenDialog, GUICtrlCreateListView, GUICtrlCreateListViewItem,
    GUIRegisterMsg speziell für das Event $GUI_EVENT_DROPPED 347
    #ce -------------------------------------------------------------------------------------------------------------------------
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <String.au3>
    #include <INet.au3>
    #include <array.au3>
    #include <GDIPlus.au3>

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

    Opt('MustDeclareVars', 1)

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

    If Not FileExists(@ScriptDir & "\Avatars") Then DirCreate(@ScriptDir & "\Avatars")

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

    Global $msg, $idfrmMain
    Global $hPic = -99
    Global $iPageNr = 1
    Global $sAvatrBegin = 'wcf/images/avatars/'
    Global $sSubDomain = "http://1.2.3.13/bmi/" ;muss evtl. angepasst werden

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

    InetGet($sSubDomain & "www.autoit.de/wcf/images/avatars/avatar-1152.jpg", @ScriptDir & "\avatars\avatar-1152.jpg")

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

    $idfrmMain = GUICreate("Avatar - Viewer", 824, 550)
    $hPic = GUICtrlCreatePic(@ScriptDir & "\avatars\avatar-1152.jpg", 5, 5, 150, 78)
    Local $idLV_User = GUICtrlCreateListView("Name: | Avatar: ", 519, 5, 300, 490, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    Local $idbtnShow = GUICtrlCreateButton("&Zeige Avatar", 519, 500, 140, 25)
    Local $idbtnClearLV = GUICtrlCreateButton("&Listview &leeren", 669, 500, 140, 25)
    Local $idlblSize = GUICtrlCreateLabel("", 5, 500, 500, 25)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    _getMembers()
    ;AdlibRegister("_getMembers")

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $idbtnClearLV
    _GUICtrlListView_DeleteAllItems($idLV_User)
    Case $idbtnShow
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_User)
    _ShowPic($aItem)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _getMembers()
    Local $sSource, $aUser, $aUserNr, $aAvatarrs
    $sSource = BinaryToString(_INetGetSource("http://www.autoit.de/index.php?page=MembersList&pageNo=" & $iPageNr & "searchID=0&sortField=posts&sortOrder=DESC"))
    ;ConsoleWrite($sSource & @CRLF)
    $aUser = _StringBetween($sSource, 'title="Benutzerprofil von &raquo;', '&laquo; aufrufen"')
    For $i = 54 To 0 Step -2
    _ArrayDelete($aUser, $i)
    Next
    ;_ArrayDisplay($aUser) ; 0 bis 54 step2
    $aAvatarrs = _StringBetween($sSource, $sAvatrBegin, '" style="')
    $aAvatarrs[0] = "avatar-195.gif"
    ;_ArrayDisplay($aAvatarrs)
    For $i = 0 To 24
    GUICtrlCreateListViewItem($aUser[$i] & "|" & $aAvatarrs[$i], $idLV_User)
    Next
    $iPageNr += 1
    ;http://1.2.3.13/bmi/www.autoit…/avatar-195.gif
    ;http://1.2.3.13/bmi/www.autoit…/avatar-195.gif

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

    ;If $iPageNr > 1 Then AdlibUnRegister("_getMembers") ;klappt nur für 1. Seite für die folge Seiten muss das Skript angepasst werden
    EndFunc ;==>_getMembers

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

    Func _ShowPic($aItem)
    If StringRight($aItem[2], 4) = ".png" Then
    GUICtrlSetData($idlblSize, "PNG - Format nicht unterstützt")
    Return
    EndIf
    Local $sImageName = @ScriptDir & "\Avatars\" & $aItem[2], $sDlURL
    ;$aItem[0] enthält Anzahl der Spalten [$aIem[1] die 1. Spalte usw.
    ;_ArrayDisplay($aItem) nur zu Verständnisuwecken evtl. aktivieren
    ;ConsoleWrite($sImageName & @CRLF) ;nur zu Debugzwecken evtl. deaktivieren
    If Not FileExists($sImageName) Then
    $sDlURL = $sSubDomain & "www.autoit.de/" & $sAvatrBegin & $aItem[2]
    ConsoleWrite($sDlURL & @CRLF)
    InetGet($sDlURL, $sImageName)
    EndIf
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sImageName)
    Local $iX = _GDIPlus_ImageGetWidth($hImage)
    Local $iY = _GDIPlus_ImageGetHeight($hImage)
    GUICtrlSetData($idlblSize, "Breite: " & $iX & " | Höhe: " & $iY)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Local $iRatio = $iX / $iY
    ConsoleWrite("Orig.: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    If $iRatio >= 1 Then
    $iX = 500
    $iY = $iX / $iRatio
    Else
    $iY = 300
    $iX = $iY * $iRatio
    EndIf
    ConsoleWrite("Neu: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    ControlMove($idfrmMain, "", $hPic, Default, Default, $iX, $iY)
    GUICtrlSetImage($hPic, $sImageName)
    EndFunc ;==>_ShowPic

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

    Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code, $aItem
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $idLV_User And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_User) > 0 Then
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_User)
    ;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
    _ShowPic($aItem)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Die Avatare werden zwar zum Teil nicht richtig zugeordnet, aber dass ist nebensächlich.

    mfg autoBert

  • hast du mal geschaut ob das bild auch wirklich wie angegeben gespeichert wird?

    für mich sieht es aus als fehlen da ein paar "\" backslashes in der pfadangabe...