GUI Problem - Bild auf einem Tab

  • Hi,
    ich arbeite gerade an einem Programm das Bilder aus dem Internet runterläd und diese dann in Picture-Elementen auf einem Tab darstellt.
    Da die Bilder nicht alle die gleiche Größe haben, müssen sich die Picture-Elemente anpassen.
    Hier mal mein Source:

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Global $links[30]

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 903, 318,-1, -1,BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Tab1 = GUICtrlCreateTab(8, 8, 889, 305)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Page 1")
    $Pic1 = GUICtrlCreatePic("", 16, 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    GUICtrlCreateTabItem("")
    $Button1 = GUICtrlCreateButton("Button1", 792, 8, 105, 17, 0)
    GUICtrlSetOnEvent($Button1, "On1")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(1000)
    WEnd

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

    Func On1()
    GUICtrlSetImage($Pic1, @ScriptDir & "\cache\img0.jpg")
    EndFunc

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

    Func OnExit()
    Exit
    EndFunc

    [/autoit]


    Das Bild soll also bei Klick auf Button1 nachträglich in das Picture-Element geladen werden. Das Bild wird zwar geladen, aber es wird auf die Größe des Tabs gesteckt, was ja nicht passieren sollte.
    Wenn ich allerdings das Bild direkt beim erstellen des Picture-Elements lade funktionierts.
    Sprich so:

    [autoit]

    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\cache\img0.jpg", 16, 48, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))

    [/autoit]


    Jmd ne Idee, wie ich das auch nachträglich schaff?

  • [autoit]


    Func On1()
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\cache\img0.jpg", 16, 48, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    EndFunc

    [/autoit]

    OT: Hast du des mit dem GuiCtrlSetOnEvent von hand gemacht oder war des koda?
    ich schnall des nämlich nicht^^

    Padmak

    • Offizieller Beitrag

    @Padmak was schnallst du nicht ?

  • ich habs selber gemacht^^
    is doch ganz easy:

    [autoit]

    $Button1 = GUICtrlCreateButton("Button1", 792, 8, 105, 17, 0)
    GUICtrlSetOnEvent($Button1, "On1")

    [/autoit]


    In der ersten Zeile wird der Button "Button1" erzeugt und die 2. sagt, dass wen man auf "Button1" klickt die Funktion "On1" ausgeführt wird.
    @Topic: niemand ne Idee?
    bin langsam am verzweifeln
    Edit: @Padmak: Deine Lösung funktioniert leider nicht, da ich die Bilder dann nicht in den entsprechenden Tabs hab. Sprich Bild1 soll auf Tab1 liegen und Bild2 auf Tab2.

  • hm das GuiCtrlSetOnEvent
    ich hatte mal ne gui wo dann dabei alle Buttons verschwunden sind ?(
    aber ich glaub ich hab grad den bug dadrin entdeckt :D
    @Topic
    probier doch mal meins aus, nen post vorher^^

    Padmak


  • Edit: @Padmak: Deine Lösung funktioniert leider nicht, da ich die Bilder dann nicht in den entsprechenden Tabs hab. Sprich Bild1 soll auf Tab1 liegen und Bild2 auf Tab2.


    Eben noch editiert

  • Achso^^

    [autoit]


    ;Irgendwo oben
    Global $var = 0
    ;gui usw
    Func On1()
    $var = $var + 1
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var)
    $Pic1 = GUICtrlCreatePic("Bild.jpg", 16, 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    EndFunc

    [/autoit]

    is jez nur schnell hier gemacht musst mal schaun^^

    Padmak

    Ps: Höhö Avatar hochgeladen wie findet ihr ihn :D

    2 Mal editiert, zuletzt von Padmak (5. Januar 2009 um 10:28)

  • ich habs bissl umgebaut und es funzt sogar:

    [autoit]

    Func On1()
    If mod($var, 5) = 0 then
    $var2 = $var2 + 1
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var2)
    $w = 16
    endif
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\cache\img0.jpg", $w , 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    $var = $var + 1
    $w = $w + 175
    EndFunc

    [/autoit]


    jetzt hab ich nurnoch das Problem, dass die Bilder erst sichtbar werden, wenn ich auf einen anderen Tab schalte und dann wieder zurück :(

  • Also
    ich bin jetzt schon mal so weit^^
    ich hätte noch die idee dass man, immer wenn man einen neuen Tab erstellt, per ControlClick auf Tab2 und dann wieder auf Tab1 wechselt
    der Benutzer merkts nicht und es ist immer was auf dem ersten^^

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Global $links[30]
    Global $var = 1
    Global $titel = "Bilder aus dem Internet downloaden"

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

    $Form1 = GUICreate($titel, 871, 266, 192, 191)
    $Tab1 = GUICtrlCreateTab(8, 8, 889, 305)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var)
    $Pic1 = GUICtrlCreatePic("Bild" & $var & ".jpg", 16, 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    GUICtrlCreateTabItem("")
    $Button1 = GUICtrlCreateButton("Laden", 656, 8, 105, 17)
    GUICtrlSetOnEvent($Button1, "On1")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(1000)
    WEnd
    Func On1()
    $var = $var + 1
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var)
    ControlClick($titel, "Page " & $var, $TabSheet1)
    $Pic1 = GUICtrlCreatePic("Bild" & $var & ".jpg", 16, 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    EndFunc

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

    Func OnExit()
    Exit
    EndFunc

    [/autoit]

    Aber das mit dem ControlClick haut bei mir nicht -_-
    vielleicht kann hier wer schreiben der sich damit auskennt

    Padmak

  • sorry das funzt auch net.
    Auf jeden Tab kommen 5 Bilder, wie du vlt. in meinem neuesten Bsp. gesehen hast.
    D.h was mach ich am Anfang wenn es erst einen Tab gibt?
    Der 2. wird ja erst erzeugt, wenn sich auf dem 1. Tab 5 Bilder befinden.

  • hä?
    ich komm irgendwie nicht mehr mit :D
    welche autoit version hast du?
    bei mir geht dein versuch net 8|

    Padmak

  • hab Version 3.2.12.1
    was funktioniert an meinem Versuch nicht?
    Ich versuch nochmal zu erklären wieso das mit dem ControlClick nicht funktioniert:
    Also ich habe 6 Tabs und auf jeden Tab sollen 5 Bilder.
    Und wenn auf einem Tab 5 Bilder sind, wird des nächste erstellt, wo dann die nächsten 5 Bilder drauf kommen.
    Wenn jetzt aber der erste Tab noch nicht voll ist, existiert ja noch kein 2. Tab, auf den der ControlClick angewendet werden kann, um das Fenster zu aktualisieren.

  • Doch es geht sorry :D
    probiers mal so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Global $links[30]
    Global $var = 0, $var2 = 1, $w, $var3 = 0

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

    $Form1 = GUICreate("Form1", 903, 318,-1, -1,BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Tab1 = GUICtrlCreateTab(8, 8, 889, 305)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var2)
    $Pic1 = GUICtrlCreatePic("", 16, 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    GUICtrlCreateTabItem("")
    $Button1 = GUICtrlCreateButton("Button1", 792, 8, 105, 17, 0)
    GUICtrlSetOnEvent($Button1, "On1")
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(1000)
    WEnd

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

    Func OnExit()
    Exit
    EndFunc

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

    Func On1()
    If mod($var, 5) = 0 then
    $var2 = $var2 + 1
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var2)
    GUICtrlSetState(-1, $GUI_SHOW) ; Hier wird umgeschalten
    $w = 16
    endif
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\cache\img" & $var3 & ".jpg", $w , 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    $var3 = $var3 + 1
    $var = $var + 1
    $w = $w + 175
    EndFunc

    [/autoit]


    so wird automatisch auf den nächsten Tab umgeschalten^^
    schon mal n teilerfolg

  • ich habs jetzt so gemacht:

    [autoit]

    Func On1()
    If mod($var, 5) = 0 then
    $var2 = $var2 + 1
    $TabSheet1 = GUICtrlCreateTabItem("Page " & $var2)
    $w = 16
    endif
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\cache\img" & $var3 & ".jpg", $w , 32, 0, 0, BitOR($SS_NOTIFY, $WS_BORDER))
    GUICtrlSetState(-1, $GUI_SHOW) ; Hier wird umgeschalten

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

    $var3 = $var3 + 1
    $var = $var + 1
    $w = $w + 175
    EndFunc

    [/autoit]


    Funktioniert auch, aber wenn der 2. Tab erstellt wird und das erste Bild auf selbigem ist auf Tab1 plötzlich nurnoch ein Bild. Dann muss man wieder zwischen Tabs hinundher schalten