AVIs auf Tabs einer GUI ändern

  • Moin,
    Ich habe folgendes Problem:
    ICh habe eine GUI mit verschiedenen Tabs. Auf manchen der Tabs ist eine AVI. ich möchte eine AVI ändern (durch eine andere ersetzen). Erst hab ich es mit "GuiCtrlSetData" versucht, geht aber nich. Also dachte ich, OK, wenn du die alte löschst und ne neue auf dieser Stelle erstellst, müsste das ja klappen. Aber nun sitzt die AVI nicht mehr auf dem Tab sondern Auf dem GUI-Fenster und wird auf allen angezeigt.
    Hier mal ein Beispiel:

    [autoit]

    #include <GUIConstants.au3>

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 420, 207, 188, 173)
    $Tab1 = GUICtrlCreateTab(4, 4, 405, 193)
    $TabSheet1 = GUICtrlCreateTabItem("Tab 1")
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 161, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Label1 = GUICtrlCreateLabel("1. Die AVI ist nur auf diesem Tab.", 16, 104, 250, 17)
    $Label2 = GUICtrlCreateLabel("2. AVI wechseln (GuiCtrlDelete, GuiCtrlCreateAvi)", 16, 120, 257, 17)
    $Button1 = GUICtrlCreateButton("AVI wechseln", 28, 136, 75, 25, 0)
    $Label3 = GUICtrlCreateLabel("3. Jetzt kann man die AVI auf allen Tabs sehen...", 16, 164, 250, 17)
    $TabSheet2 = GUICtrlCreateTabItem("Tab 2")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlDelete($Avi1)
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 170, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    EndSwitch
    WEnd

    [/autoit]


    Ich hoffe ihr könnt mir helfen
    mfg
    Schlumpf

    • Offizieller Beitrag

    So gehts, du mußt das Tab neu erstellen:

    [autoit]


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlDelete($Avi1)
    GUICtrlDelete($TabSheet2)
    $TabSheet2 = GUICtrlCreateTabItem("Tab 2")
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 170, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    EndSwitch
    WEnd

    [/autoit]
  • Och nö oder? Auf dem Tab in meinem Prog is ne ganze menge drauf... Gibts keine andere Möglichkeit?

  • Hallo zusammen!

    BugFix joa eig keine scchlechte idee aber ich weiß ja nicht was der sonst noch so aufm 2. tab im original srcript hat ! Dann müsste er doch dann auch alles neu machne!

    @Schlumpf

    Wie wäre es, wenn du du einfach beide avia erstellst und sie bei bedarf verstecktst und
    und wiedr zeigst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 420, 207, 188, 173)
    $Tab1 = GUICtrlCreateTab(4, 4, 405, 193)
    $TabSheet1 = GUICtrlCreateTabItem("Tab 1")
    $Avi2 = GUICtrlCreateAvi("shell32.dll", 170, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    GUICtrlSetState(-1,$GUI_HIDE)

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

    $Avi1 = GUICtrlCreateAvi("shell32.dll", 161, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Label1 = GUICtrlCreateLabel("1. Die AVI ist nur auf diesem Tab.", 16, 104, 250, 17)
    $Label2 = GUICtrlCreateLabel("2. AVI wechseln (GuiCtrlDelete, GuiCtrlCreateAvi)", 16, 120, 257, 17)
    $Button1 = GUICtrlCreateButton("AVI wechseln", 28, 136, 75, 25, 0)
    $Label3 = GUICtrlCreateLabel("3. Jetzt kann man die AVI auf allen Tabs sehen...", 16, 164, 250, 17)
    $TabSheet2 = GUICtrlCreateTabItem("Tab 2")
    GUICtrlCreateButton("hallo",20,50,100,30)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetState($avi1,$GUI_HIDE)
    GUICtrlSetState($avi2,$GUI_SHOW)
    GUICtrlSetState($Avi2,$GUI_AVISTART)

    EndSwitch
    WEnd

    [/autoit]

    bei mir funtz es jedenfalls...
    viel spass noch!

  • Die Idee is garnicht so dumm, aber der "User" kann die AVI selbst laden, ich weiß also nicht voher welche geladen werden soll. :rolleyes:

  • Hi!

    Der "User" kann die Avi selbst laden?
    Hab zwar keinen Plan wie du das meinst :weinen:
    aber ich denke es wäre doch einfacher,wenn du dein komplettes Script mal on stellst ! damit man mal den zusammenhang versteht! Ich denke, dass man dann bestimmt noch eine lösung findet! ;)
    THX!

  • wäähä

    Ich bin einfach zu langsam ~_~
    War auch grad auf dem Hide und show-trip nur bei mir stoppt dass avi x)
    Warum eigentlich?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 420, 207, 188, 173)
    $Tab1 = GUICtrlCreateTab(4, 4, 405, 193)
    $TabSheet1 = GUICtrlCreateTabItem("Tab 1")
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 161, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Label1 = GUICtrlCreateLabel("1. Die AVI ist nur auf diesem Tab.", 16, 104, 250, 17)
    $Label2 = GUICtrlCreateLabel("2. AVI wechseln (GuiCtrlDelete, GuiCtrlCreateAvi)", 16, 120, 257, 17)
    $Button1 = GUICtrlCreateButton("AVI wechseln", 28, 136, 75, 25, 0)
    $Label3 = GUICtrlCreateLabel("3. Jetzt kann man die AVI auf allen Tabs sehen...", 16, 164, 250, 17)
    $TabSheet2 = GUICtrlCreateTabItem("Tab 2")

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

    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Avi2 = GUICtrlCreateAvi("shell32.dll", 170, 16,36,272,60, @SW_HIDE)
    GUICtrlSetState($Avi1, @SW_HIDE)
    GUICtrlSetState($Avi2, @SW_SHOW)
    ;$Avi2 = GUICtrlCreateAvi("shell32.dll", 170, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    ;GUICtrlSetGraphic($Avi1, $Avi2)
    ;GUICtrlSetData($Avi1, $Avi2)
    ;GUISwitch($Avi1, $Avi2)
    EndSwitch
    WEnd

    [/autoit]


    nagut ich hab auch nen paar andere doofe nebeneffekte aber ich war aufm richtigen weg xD


    ~EDIT~ 50. Post :D

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (30. März 2007 um 19:04)

  • @DjBasslord: Das ganze Skript zu posten wäre n bisschen viel. das is mittlerweile ziemlich groß und verwirrend geworden, ich muss das mal aufräumen. ihr müsst eich das mit der Avi so (s. unten) vorstellen, nur mit n bissel mehr drumherum.

    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 457, 157, 186, 194)
    $Tab1 = GUICtrlCreateTab(4, 4, 313, 145)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 160, 20, 40, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Button1 = GUICtrlCreateButton("Andere AVI laden", 20, 108, 271, 25, 0)
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    $Input1 = GUICtrlCreateInput(""&@systemdir&"\shell32.dll, 160", 12, 48, 297, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Label2 = GUICtrlCreateLabel("Geladene AVI:", 12, 32, 73, 17)
    GUICtrlCreateTabItem("")
    $Label1 = GUICtrlCreateLabel("Wenn du auf [Andere AVI laden] klickst, kannst du eine andere AVI anzeigen lassen", 324, 4, 126, 145)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $neu = FileOpenDialog("AVI laden...", @DesktopDir, "Avi-Videos (*.avi)")
    If @error <> 1 Then
    GUICtrlDelete($Avi1)
    $Avi1 = GUICtrlCreateAvi($neu, -1, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    GUICtrlSetData($Input1, $neu)
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Moin Schlumpf,

    schau dir mal die Auto3Lib an. Dort gibt es ne Menge Funktionen für den Umgang mit AVI's. Ist zwar ein bisschen komplexer, aber dafür viel flexibler.

  • Hmm,
    Ich hab s mir mal angesehn, aber ich komm da auch nicht weiter. Damit kann man zwar sehr schön das AVI werchseln, aber ich muss da das WinHandle wo das AVI erscheinen soll angeben. Das "TabHandle" nimmt der nich an. Ich müsse jetzt also "nur noch" das das AVI mit "Auto3Lib" auf den Tab bekommen, aber wie?

  • Hallo Schlumpf,

    hatte schonmal im engl.Autoit-Forum geantwortet.
    Hier mal ein Workaround:

    [autoit]


    #include <GUIConstants.au3>

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

    Global Const $ACM_OPENA = $WM_USER + 100

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 420, 207, 188, 173)
    $Tab1 = GUICtrlCreateTab(4, 4, 405, 193)
    $TabSheet1 = GUICtrlCreateTabItem("Tab 1")
    $Avi1 = GUICtrlCreateAvi("shell32.dll", 161, 16, 36, 272, 60, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Label1 = GUICtrlCreateLabel("1. The AVI is only on this tab.", 16, 104, 142, 17)
    $Label2 = GUICtrlCreateLabel("2. change AVI (using: GuiCtrlDelete, GuiCtrlCreateAvi)", 16, 120, 257, 17)
    $Button1 = GUICtrlCreateButton("Change AVI", 28, 136, 75, 25, 0)
    $Label3 = GUICtrlCreateLabel("3. You can see the AVI on all Tabs...", 16, 164, 178, 17)
    $TabSheet2 = GUICtrlCreateTabItem("Tab 2")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ChangeAvi($Avi1, "shell32.dll", Random(150, 170))
    EndSwitch
    WEnd

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

    Exit

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

    Func ChangeAvi($nCtrlID, $sFileName, $nAniID)
    GUICtrlSendMsg($nCtrlID, $ACM_OPENA, 0, 0)
    If Not GUICtrlSendMsg($nCtrlID, $ACM_OPENA, 0, $sFileName) Then
    Local $hInst = LoadLibrary($sFileName)
    If $hInst Then GUICtrlSendMsg($nCtrlID, $ACM_OPENA, $hInst, $nAniID)
    EndIf
    EndFunc

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

    Func LoadLibrary($sFileName)
    Local $hResult = DllCall("kernel32.dll", "hwnd", "LoadLibrary", _
    "str", $sFileName)
    Return $hResult[0]
    EndFunc

    [/autoit]

    Frag mich nicht wieso, aber zur damaligen Zeit hatte ich eine Option zur Änderung der Avi nicht mit eingebaut.
    Ich bin schon länger nicht mehr uptodate in der Autoit-Entwicklung, aber ich werde mal schauen, dass das irgendwie mit eingebaut wird - sollte nicht das große Problem sein :)

    Gruß
    Holger

    Einmal editiert, zuletzt von HolgerK (4. April 2007 um 20:37)

  • :klatschen: *freu*
    Vielen vielen Dank Holger :)

    EDIT: Gibts dazu auch irgent ne Rückmeldung ob's geklappt hat? Bei GuiCtrlCreateAvi() wurde ja bei einem fehler ne 0 zurückgegeben...

    2 Mal editiert, zuletzt von Schlumpf (5. April 2007 um 17:32)