AtlAxWin [mini browser] per stream füttern ...

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

AtlAxWin [mini browser] per stream füttern ...

Beitrag von bingo »

Code: Alles auswählen

#STREAM_SEEK_SET = 0
Global pp.iunknown

Procedure streamtobrowser(p1.l,p2.l)
pp\QueryInterface(?IID_IWebBrowser2, @gpbrowser.IWebBrowser2)
gpbrowser\Get_Document(@doc.IPersist)
doc\QueryInterface(?IID_IPersistStreamInit,@htmstream.IPersistStreamInit)
CreateStreamOnHGlobal_(0,#True,@stream.IStream)
stream\write(p1,p2-p1, @dwWritten.l)
Debug dwWritten
li.q
stream\Seek(li,#STREAM_SEEK_SET,0)
htmstream\InitNew()
htmstream\Load(Stream.IStream)
htmstream\Release()
stream\Release()
doc\Release()
gpbrowser\Release()
EndProcedure

AtlAxWinInit_() 

OpenWindow(0,0,0,300,200,"html from stream test",#PB_Window_ScreenCentered| #PB_Window_SystemMenu) 

CreateGadgetList(WindowID(0))
ButtonGadget(10, 10, 100, 285, 25, "--- switch ---")

bhandle = CreateWindowEx_(0,"AtlAxWin","about:blank",#WS_VISIBLE|#WS_CHILD|#WS_DISABLED,10,15,285,25,WindowID(0),0,GetModuleHandle_(0),0) 

AtlAxGetControl_(bhandle,@pp)

streamtobrowser(?test1a,?test1e)
switch.b

Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget And EventGadget() = 10
If switch = #False
streamtobrowser(?test2a,?test2e)
switch = #True
Else
streamtobrowser(?test1a,?test1e)
switch = #False
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow

pp\Release()
DestroyWindow_(bhandle)
CloseWindow(0)
End

DataSection 
   IID_IWebBrowser2: 
   Data.l $D30C1661 
   Data.w $CDAF, $11d0 
   Data.b $8A, $3E, $00, $C0, $4F, $C9, $E2, $6E 
    
   IID_IPersistStreamInit: 
   Data.l $7FD52380 
   Data.w $4E07,$101B 
   Data.b $AE,$2D,$08,$00,$2B,$2E,$C7,$13
    
   IID_IUnknown:  
   Data.l $00000000 
   Data.w $0000, $0000 
   Data.b $C0, $00, $00, $00, $00, $00, $00, $46 
   
   test1a:
   Data.s "<html><head></head><body bgcolor=green text=black scroll=no leftmargin=0 topmargin=0><marquee>test1</marquee></body></html>"
   test1e:
   test2a:
   Data.s "<html><head></head><body bgcolor=red text=black scroll=no leftmargin=0 topmargin=0><b><marquee>test2</marquee></b></body></html>"
   test2e:
EndDataSection
"AtlAxWin" per "res://meine.exe..." zu laden ist bekannt . mit diesem beispiel wird demonstriert , wie man AtlAxWin aus streams immer neu füttern kann . man kann auch verschiedene html per IncludeBinary "einlagern" ! gegenüber der "res://" variante kann man hier allerdings nur pures html übergeben ...

aber die darstellungs-möglichkeiten mit html + javascript sind ja vielfältig 8)
1:0>1