WebGadget: 'Grosse' Datenmengen an Callback übermitteln

Für allgemeine Fragen zur Programmierung mit PureBasic.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

getElementById() gibt immer ein IHTMLElement pointer zurück, für alle Elemente. Wenn du also ein IHTMLInputElement willst, dann musst du das erst danach mit QueryInterface() von dem IHTMLElement pointer erfragen.
Du rufst hier also nicht get_value() auf, sondern was auch immer an gleicher Stelle im IHTMLElement VTable steht. Das ist natürlich falsch. Einfach noch ein QueryInterface() (und passendes Release()) dazwischen packen und dann sollte das klappen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

freak hat geschrieben:Einfach noch ein QueryInterface() (und passendes Release()) dazwischen packen und dann sollte das klappen.
ah, jetzt ja! :-)

Code: Alles auswählen

#Window=0
#WebGadget=0

If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300, "")
  
  If CreateGadgetList(WindowID(#Window)) 
    
    WebGadget(#WebGadget, 0, 0, 300, 300, "C:\test.html")
    
    ; get webgadgets IWebBrowser2 interface:
    Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#WebGadget), #GWL_USERDATA)   
    
    ; wait for page to be loaded..
    Repeat
      While WindowEvent(): Delay(1): Wend
    Until GetGadgetAttribute(#WebGadget, #PB_Web_Busy) = 0
    
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
      If DocumentDispatch\QueryInterface(?IID_IHTMLDocument3, @Document.IHTMLDocument3) = #S_OK
        If Document\getElementById("MeinTextFeld", @HTMLElement.IHTMLElement) = #S_OK
          If HTMLElement\QueryInterface(?IID_IHTMLInputElement, @HTMLInputElement.IHTMLInputElement) = #S_OK 
            If HTMLInputElement\get_Value(@bstr) = #S_OK 
              
              If bstr
                
                Value.s = PeekS(bstr, -1, #PB_Unicode)
                Debug ">>" + Value + "<<"
                SysFreeString_(bstr) 
                
              EndIf
              
            EndIf
            HTMLInputElement\Release()
          EndIf
          HTMLElement\Release()
        EndIf
        Document\Release()
      EndIf
      DocumentDispatch\Release()   
    EndIf
    
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
    
  EndIf
EndIf
  
End
  
DataSection
  
  IID_IHTMLDocument3:  ; {3050f485-98b5-11cf-bb82-00aa00bdce0b}
  Data.l $3050F485
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  
  IID_IHTMLInputElement: ; {3050f5d2-98b5-11cf-bb82-00aa00bdce0b}
  Data.l $3050F5D2
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  
EndDataSection
Danke für den Tipp! :allright:

Grüße ... Kiffi
a²+b²=mc²
Antworten