Anzeige mehrerer Instanzen (2) von _IECreateEmbedded() bzw. deren Inhalt in GUI funktioniert nicht gleichzeitig.

  • Hallo Community,

    mich nervt es, dass ich nicht selbst drauf komme, doch vielleicht ist die Umsetzung so auch gar nicht möglich (wäre seltsam). Bin sehr gespannt, ob mir jemand auf die Sprünge helfen kann - Danke schon mal.

    Ich habe mal ein kleines Beispiel vorbereitet, was mein Problem darstellt. Insgesamt ist dies nur ein übertragenes Beispiel eines viel größeren Projektes, was ich zurzeit bearbeite.

    Problem:

    Spoiler anzeigen

    Ich möchte das die beiden ActiveX-Controls der GUI bzw. deren Inhalte ($sHTML1, $sHTML2), gleichzeitig angezeigt werden. Nicht erst das Eine mit Inhalt befüllte und dann das Andere. Sprich die Inhalte der Controls werden nicht gleichzeitig dargestellt. Es wird das Erste irgendwie immer wieder verworfen und dann das Zweite angezeigt.

    Dies passiert bei _IENavigate( $oIE1, "about:blank" ) soweit ich feststellen konnte, darum auch der Sleep( 1000 )-Befehl, um den Wechsel darzustellen. Kann ich nicht 2 IE-Objects gleichzeitig in der GUI laden? Wie bekomme ich die gleichzeitig Anzeige der Inhalte ($sHTML1, $sHTML2) auf der linken und auf der rechten Seite hin?

    Die Ausführung des Skriptes macht es recht deutlich, was ich sagen möchte ;) .

    [autoit]


    ; ------------------------------------------------------------------------------
    ; _IECreateEmbedded() - Test
    ; ------------------------------------------------------------------------------
    #Region includes
    #include <GuiConstantsEx.au3>
    #include <IE.au3>
    #include <WindowsConstants.au3>
    #EndRegion

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

    #Region declaration
    Local $sHTML1 = '<ul><li>Linke Seite</li></ul>'
    Local $sHTML2 = '<ol><li>Rechte Seite</li><ol>'
    Local $oIE1 = _IECreateEmbedded()
    Local $oIE2 = _IECreateEmbedded()
    #EndRegion

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

    #Region GUI
    GUICreate( "_IECreateEmbedded() - Test", 800, 400, Default, Default )
    GUICtrlCreateObj( $oIE1, 10, 10, 390, 380 )
    GUICtrlCreateObj( $oIE2, 410, 10, 390, 380 )
    GUISetState( @SW_SHOW )
    #EndRegion

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

    #Region IE-Object-Actions
    _IENavigate( $oIE1, "about:blank" )
    _IEDocWriteHTML( $oIE1, $sHTML1 )
    _IEAction( $oIE1, "refresh" )

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

    Sleep( 1000 ) ; dient nur zur Verdeutlichung

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

    _IENavigate( $oIE2, "about:blank" )
    _IEDocWriteHTML( $oIE2, $sHTML2 )
    _IEAction( $oIE2, "refresh" )
    #EndRegion

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

    #Region while (events)
    While 1
    $eMsg = GUIGetMsg()
    Switch $eMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    EndSwitch
    WEnd
    #EndRegion

    [/autoit]


    Falls irgendwelche Workarounds bekannt sind, da dies tatsächlich so ist wie es ist, bin ich sehr interessiert daran - Dankeschön :) .

    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!

    UserIsGrateful 【ツ】

    Einmal editiert, zuletzt von Sven-Seyfert (23. September 2014 um 22:22)

  • Also bei mir funktioniert das ganze so.. zumindest wird nicht zuerst die eine Seite "verworfen" bevor die andere geladen wird :)

    Spoiler anzeigen
    [autoit]

    ; ------------------------------------------------------------------------------
    ; _IECreateEmbedded() - Test
    ; ------------------------------------------------------------------------------
    #Region includes
    #include <GuiConstantsEx.au3>
    #include <IE.au3>
    #include <WindowsConstants.au3>
    #EndRegion

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

    #Region declaration
    Local $sHTML1 = '<ul><li>Linke Seite</li></ul>'
    Local $sHTML2 = '<ol><li>Rechte Seite</li><ol>'
    Local $oIE1 = _IECreateEmbedded()
    Local $oIE2 = _IECreateEmbedded()
    #EndRegion

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

    #Region GUI
    GUICreate( "_IECreateEmbedded() - Test", 800, 400)

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

    GUICtrlCreateObj( $oIE1, 10, 10, 390, 380 )
    GUICtrlCreateObj( $oIE2, 410, 10, 390, 380 )
    GUISetState( @SW_SHOW )
    #EndRegion

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

    #Region IE-Object-Actions

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

    _IENavigate( $oIE1, "about:blank" )
    _IEDocWriteHTML( $oIE1, $sHTML1 )

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

    _IENavigate( $oIE2, "about:blank" )
    _IEDocWriteHTML( $oIE2, $sHTML2 )

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

    _IEAction( $oIE2, "refresh" )
    sleep(1000)
    _IEAction( $oIE1, "refresh" )

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

    #EndRegion

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

    #Region while (events)
    While 1

    $eMsg = GUIGetMsg()
    Switch $eMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    EndSwitch
    WEnd
    #EndRegion

    [/autoit]

    Einmal editiert, zuletzt von Markus123 (23. September 2014 um 13:23)

  • Hallo Markus123,

    vielen Dank, ja so klappt es auch bei mir. OMG, da ich hab' doch einfach die einzelnen Methoden in der falschen Reihenfolge aufgerufen 8| . Hmmm, "... den Wald vor lauter ...". Naja gut, dann hat sich dies alles eigentlich auch schon wieder erledigt und ich schließe den Thread heut' Abend oder morgen dann. Kann ja sein, dass jemand noch weitere Vorschläge oder andere Ideen hinzufügen möchte.

    Merci :thumbup:

    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!

    UserIsGrateful 【ツ】