AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebBrowser < undefinierter Bezeichner
Thema durchsuchen
Ansicht
Themen-Optionen

TWebBrowser < undefinierter Bezeichner

Ein Thema von endeffects · begonnen am 11. Aug 2004 · letzter Beitrag vom 16. Aug 2004
Antwort Antwort
Seite 3 von 4     123 4      
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#21

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 17:06
Delphi-Quellcode:
type
  TMyThreads = class(TThread)
  private
    procedure Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); //deine prozedur und die andere müssen identisch sein (jedenfalls die Parameter..)!
  protected
    procedure Execute; override;
  end;

implementation

procedure TMyThreads.Execute;
var WebBrowser: TWebBrowser;
    i:integer;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do begin
    try
      Navigate('http://www.google.com');
      OnDocumentComplete:= Submit;
    except
      //...
    end;
  end;
end;

procedure TMyThreads.Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  if URL = 'http://www.google.comthen begin
    (Sender As TWebBrowser).OleObject.document.forms.item(0).elements.item('q').value:='test';
    (Sender As TWebBrowser).OleObject.Document.Forms.item(0).submit;
  end;
end;
sollte funktionieren
Christian
  Mit Zitat antworten Zitat
emploi

Registriert seit: 21. Jun 2004
Ort: Ilmtown
40 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 17:08
hi,

dein problem ist wenn du der OnDocumentComplete ne Prozedur zuweist
dann musst die genau die gleiche schnittstelle haben wie die
die vom Objektinspektor automatisch generiert wird!

dh klick mal im Objektinspektor doppelklick auf das ereigniss
DocumentComplete und schau dir die Schnittstelle an!
Genau diese Schnittstelle muss deine eigene Prozedur auch haben!
dann sollte es gehen!

mfg emploi
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#23

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 17:46
oh danke danke, damit helft ihr mir sehr weiter
ich hab das ganze nun dank Eurer Hilfe wie folgt
umgebaut und der compiler meckert nun auch nicht mehr.
leider tritt das OnDocumentComplete Ereignis nie ein.

Delphi-Quellcode:
procedure TMyThreads.Execute;
var WebBrowser: TWebBrowser;
    i:integer;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do
    try
      Navigate('http://www.google.com');
      Fstatus:= 'Connecting to http://google.com';
      Synchronize(UpdateLVCaption);
      OnDocumentComplete:= Submit;
    except
      FreeAndNil(WebBrowser);
      OleUninitialize;
    end;
  Fstatus:= 'finished.';
  Synchronize(UpdateLVCaption);
end;

procedure TMyThreads.Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
// Tritt leider nie ein **************************
  showmessage('Submit fired');
//************************************************
  (Sender As TWebBrowser).OleObject.document.forms.item(0).elements.item('q').value:='test';
  (Sender As TWebBrowser).OleObject.Document.Forms.item(0).submit;
  FreeAndNil(Sender);
  OleUninitialize;
end;
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#24

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 18:13
möglicherweise endet die methode schon bevor
ondocumentcomplete ausgelöst wird
  Mit Zitat antworten Zitat
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#25

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 19:35
auf showmessage würde ich mich nicht verlassen, ist soweit ich mich erinner, ne an die VCL angekoppelte funktion, die in threads net funktioniert

[EDIT] btw seh ich gerad das freeandnil+couninitialize in dem event.. musste weg [/EDIT]
Christian
  Mit Zitat antworten Zitat
emploi

Registriert seit: 21. Jun 2004
Ort: Ilmtown
40 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 19:49
Also ich kann mir zwar nicht vorstellen das es davon abhängig ist,
aber weise mal dem OnDocumentComplete direkt nach dem erzeugen
deiner Submit Methode zu. Vielleicht geht das ja

Ansonsten könnte es auch passieren das das laden der seite länger dauert...

Code:
procedure TMyThreads.Execute;
var WebBrowser: TWebBrowser;
    i:integer;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do
    try
      Navigate('http://www.google.com');
      Fstatus:= 'Connecting to http://google.com';
      Synchronize(UpdateLVCaption);
      OnDocumentComplete:= Submit;
    except
      FreeAndNil(WebBrowser);
      OleUninitialize;
    end;
  Fstatus:= 'finished.';
  Synchronize(UpdateLVCaption);
end;

procedure TMyThreads.Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
// Tritt leider nie ein ************************** 
  showmessage('Submit fired');
//************************************************ 
  (Sender As TWebBrowser).OleObject.document.forms.item(0).elements.item('q').value:='test';
  (Sender As TWebBrowser).OleObject.Document.Forms.item(0).submit;
  FreeAndNil(Sender);
  OleUninitialize;
end;
... und er das FreeAndNil eher aufruft bevor das Ereignis überhaupt auftreten kann!

Hab leider momentan keine zeit, bin immer nur mal sporadisch am pc.
werd mir das morgen mal angucken wennes bis dahin nicht gelöst hast!

mfg emploi

[edit]
ich seh grad der Basic war ja schneller mit der antwort
[/edit]
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#27

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 19:56
also laut meinem packetsniffer wird
Navigate('http://www.google.com');
ausgeführt und anschließend wird
Fstatus:= 'finished.'; übergeben.
die ondocumentcomplete anweisung
dazwischen wird nicht ausgeführt
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#28

Re: TWebBrowser < undefinierter Bezeichner

  Alt 14. Aug 2004, 08:51
Zitat:
auf showmessage würde ich mich nicht verlassen
na ich hab das vorher auch mit dem übergeben des status probiert,
dieser wird auch nicht angezeigt in meiner mainform:


Delphi-Quellcode:
procedure TMyThreads.Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  Fstatus:= 'Submit() fired!';
  Synchronize(UpdateLVCaption);
end;
darüber hinaus hab ich auch noch andere Events ausprobiert,
immer mit dem selben Ergebnis
  Mit Zitat antworten Zitat
emploi

Registriert seit: 21. Jun 2004
Ort: Ilmtown
40 Beiträge
 
Delphi 7 Enterprise
 
#29

Re: TWebBrowser < undefinierter Bezeichner

  Alt 14. Aug 2004, 13:10
so hab mal bissel dran gebastelt.
schau dir das an und probier es ein bissel aus.
sollte dann für dich klappen:

Code:
unit Unit2;

interface

uses
   SysUtils, Classes, Controls, Forms, Dialogs, OleCtrls, SHDocVw, ActiveX;

type
  myThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
    procedure Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    procedure UpdateCaption;
  public
    app : TApplication;
  end;

implementation

uses Unit1;

{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
  nur in einer Methode namens Synchronize aufgerufen werden, z.B.

      Synchronize(UpdateCaption);

  und UpdateCaption könnte folgendermaßen aussehen:

    procedure myThread.UpdateCaption;
    begin
      Form1.Caption := 'Aktualisiert in einem Thread';
    end; }

{ myThread }

procedure myThread.Execute;
var wb : TWebBrowser;
begin
  OleInitialize(nil);
  wb := TWebBrowser.Create(Form1);
  try
    TWinControl(wb).Name := 'MyWebBrowser';
    TWinControl(wb).Parent := Form1;
    wb.OnDocumentComplete := self.Submit;
    wb.Align := alClient;
    wb.Navigate('http://www.google.com');

    while wb.ReadyState <> READYSTATE_COMPLETE do
      app.ProcessMessages;

    Synchronize(UpdateCaption);

  except
     FreeAndNil(wb);
     OleUninitialize;
  end;
end;

procedure myThread.UpdateCaption;
begin
      Form1.Caption := 'Aktualisiert in einem Thread';
end;

procedure myThread.Submit(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  showmessage('test');
end;

end.

HauptUnit

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var myTestThread : myThread;
begin
       myTestThread := myThread.Create(True);
       WITH myTestThread DO
       BEGIN
          myTestThread.app := Application;
          FreeOnTerminate := True;
          Resume;
       END;
END;

end.


mfg emploi
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#30

Re: TWebBrowser < undefinierter Bezeichner

  Alt 16. Aug 2004, 11:20
hallo,

danke für deine mühe =),
nun bin ich schon ein ganzes stück weiter dank deiner hilfe,
leider gibts noch immer zugriffsverletzungen =(

die threads werden in der hauptform nun wie folgt erzeugt:

Delphi-Quellcode:
  for Loop := 0 to length(ThreadArray) - 1 do
  begin
    ThreadArray[Loop] := TMyThreads.Create(true);
    ThreadArray[Loop].app := Application;
    ...
  end;
die thread unit hab ich wie folgt geändert:

Delphi-Quellcode:
procedure TMyThreads.Execute;
var
  WebBrowser: TWebBrowser;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do
    try
      OnDocumentComplete:= Submit;
      Navigate('http://www.google.com');

      while WebBrowser.ReadyState <> READYSTATE_COMPLETE do
        app.ProcessMessages;

      Fstatus:= 'ReadyState done.';
      Synchronize(UpdateLVCaption);

    except
      FreeAndNil(WebBrowser);
      OleUninitialize;
    end;

  Fstatus:= 'finished.';
  Synchronize(UpdateLVCaption);
end;

procedure TMyThreads.Submit(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  Fstatus:= 'sending.';
  Synchronize(UpdateLVCaption);
// (Sender As TWebBrowser).OleObject.document.forms.item(0).elements.item('q').value:='test';
// (Sender As TWebBrowser).OleObject.Document.Forms.item(0).submit;
  FreeAndNil(Sender);
  OleUninitialize;
end;
Wenn ich den Form-Submit auskommentiere erhalte ich die Fehlermeldung:

Zitat:
Im Projekt ... ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: Zugriffsverletzung bei Adresse 70AB7CCB in Modul SHLWAPI.dll.
Lesen von Adresse 00000018. ...
Wenn ich das OLE Objekt wieder aktiviere um es dann aus`zufüllen und abzuschicken
gibt es ebenfall eine Zugriffsverletzung. Zumindesten funktioniert
das OnDocumentComplete Event jetzt.

Des öfteren scheint es auch vorzukommen dass das Programm bzw der/die Threads
in der ReadyState - while Schleife einfrieren.

Hast Du vielleicht noch eine Idee wie man diese Fehler beheben könnte?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz