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 2 von 4     12 34      
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 14:10
naja eigentlich wollte ich damit nix pushen,
fehlt auch irgendwie die hälfte bei dem posting

ich hatte das ganze nun wie folgt ausprobiert, aber
ich häng noch immer an der selben stelle

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShDocVw, StdCtrls, activex;

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

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);
var wb: TWebBrowser;
begin
  wb := TWebBrowser.Create(Form1);
  TWinControl(wb).Name := 'MyWebBrowser';
  TWinControl(wb).Parent := Form1;
  wb.Align := alClient;
  wb.Navigate('http://www.google.com');
  sleep(2000);
  wb.OleObject.document.forms.item(0).elements.item('q').value:='test';

  end;

end.
  Mit Zitat antworten Zitat
Basic-Master

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 14:19
ersetz das sleep(2000); durch
Delphi-Quellcode:
while wb.ReadyState <> READYSTATE_COMPLETE do
  Application.ProcessMessages;
mit sleep hälst du nur den prozess (mainthread) an, das hilft dir dann aber auch nix wenn die seite noch net geladen ist...
Christian
  Mit Zitat antworten Zitat
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 15:09
hallo, danke für die hilfe, das sleep hier eher unangebracht ist war mir schon
klar, das dadurch allerdings diese zugriffsverletzung verursacht wird ist mir neu,

wie zu erwarten war funktioniert der aufruf Application.ProcessMessages;
in den threads nicht der einbau von OnDocumentComplete ist mir auch ein rätsel

Delphi-Quellcode:
procedure TMyThreads.Grabber();
var
  WebBrowser: TWebBrowser;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do
    try
      Navigate('http://www.google.com');
      OnDocumentComplete:= //?????? OleObject.Document.Forms.item(0).submit; ??????///

    except
        //nix
    end;
  Fstatus:= 'done.';
  Synchronize(UpdateLVCaption);
  FreeAndNil(WebBrowser);
  OleUninitialize;
end;
  Mit Zitat antworten Zitat
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 17:05
also ich hab nun nochmal ne ganze weile rumprobiert
und mittlerweile echt genervt von dem kram =(

Delphi-Quellcode:
procedure TMyThreads.Execute();
var
  WebBrowser: TWebBrowser;
begin
  OleInitialize(nil);
  WebBrowser:= TWebBrowser.Create(nil);

  with WebBrowser do
    try
      Navigate('http://www.google.com');

      while ReadyState <> READYSTATE_COMPLETE do
      Application.ProcessMessages;

      OleObject.document.forms.item(0).elements.item('q').value:='test';
      OleObject.Document.Forms.item(0).submit;
    except
        
    end;
  FreeAndNil(WebBrowser);
  OleUninitialize;
end;
Der Aufruf von Application.ProcessMessages; funktioniert in
dem Thread nicht und mit einer Delay Funktion aus diesem
Forum wird die while Schleife nie verlassen.

der Ansatz mit Hilfe von ReadyStats <> Readystats_Complete klingt ja
vielversprechend, aber wie kann damit im besagten Thread
auf ein positives Ergebnis warten bzw wie kann man Delphi
veranlassen auf das Eintreten des OnDocumentComplete Events zu warten.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 18:45
Delphi-Quellcode:
var
  WebBrowser: TWebBrowser;
begin
  WebBrowser:= TWebBrowser.Create(nil);
  with WebBrowser do
     // irgendwas tun
  end;

  FreeAndNil(WebBrowser);
end;
Also ich würde auf keinen Fall das Objekt WebBrowser dynamisch zu Laufzeit erzeugen,
damit arbeiten und gleich wieder zerstören.
Hinter dem WebBrowser stecken sehr viele DLLs, Schnittstellen, Resourcen, ....
Deshalb sollte man das Ding nur einmal erzeugen und erst dann zerstören, wenn auch das
Formular zerstört wird.
Vielleicht ist Navigate noch nicht ganz fertig und du ziehst dem BrowserObjekt
sozusagen den Stuhl unterm Hinern weg.
Andreas
  Mit Zitat antworten Zitat
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 19:04
naja, wie gesagt, das ganze läuft in threads,
ich denke da läßt sich das erzeugen wärend
der laufzeit nicht vermeiden

leider hast du recht damit das navigate(); nicht ausreichend
zeit bekommt um die aufgerufene seite vollständig zu laden,
da ich nicht weiß wie ich bei einem dynamisch erzeugten
twebbrowser auf das event OnDocumentComplete reagieren
kann bzw es einzubinden habe - oder "ReadyState <> READYSTATE_COMPLETE"
in die warteschleife schicken

aber leider konnte ich dazu bisher nichts finden
  Mit Zitat antworten Zitat
Basic-Master

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 21:35
hab die funktion hier im forum gefunden, das könntest du dann statt Application.ProcessMessages; nehmen:
Delphi-Quellcode:
procedure ProcessMessages(hWnd: DWORD);
var
  Msg: TMsg;
begin
while PeekMessage(Msg, hWnd, 0, 0, PM_REMOVE) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
end;
end;
musst dann als parameter einfach Handle einsetzen..
hoffe konnte dir damit n bischen helfen
Christian
  Mit Zitat antworten Zitat
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 11. Aug 2004, 22:14
ich weiß nicht ob ich bei der ganzen geschichte etwas
falsch verstehe, aber eigentlich macht es doch keinen
unterschied ob ich den twebbrowser wärend der laufzeit
erzeuge oder statisch, ich müßte doch trotzdem events
wie ondocumentcomplete nutzen können
oder lieg ich damit völlig falsch?
  Mit Zitat antworten Zitat
emploi

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 14:23
Ist ja auch kein Problem das du das nutzen möchtest!

Gibt zwei Möglichkeiten!

1. Du übergibst deinem Thread die Application. Somit kannst du dann auch Applications.ProcessMessages benutzen. Hab ich aber nicht ausprobiert und kann ich auch nicht sagen ob das in einem Extra Thread dann genauso funktioniert, wie wenn du nur den Hauptthread hast!

2. du bist ja mit dem OnDocumentComplete garnicht mal so weit von der lösung weg!
das WebBrowser1.OnDocumentComplete benötigt nur der zuweisung einer Prozedur. Funktioniert
nach dem Schema wie im ObjektInspektor! da Klickst du ja normalerweise Doppelklick auf
"OnDocumentComplete" und Delphi erstellt dir von hand eine Prozedur und weisst
WebBrowser1.OnDocumentComplete automatisch dieser Prozedur zu. Mach du das doch einfach
von hand:

Code:
WebBrowser1.OnDocumentComplete := meineProzedurWennFertigGeladen;
Und da schreibste dann rein was er machen soll!

greetz

emploi
  Mit Zitat antworten Zitat
endeffects

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

Re: TWebBrowser < undefinierter Bezeichner

  Alt 13. Aug 2004, 16:04
hallo,
danke für die antwort, die variante 2 hatte ich auch schon ausprobiert,
allerdings bekomm ich dann folgende Fehlermeldung:

Zitat:
Inkompatible Typen: TwebBroswserDocumentComplete und procedure, untyped pointer
or untyped parameter.
Delphi-Quellcode:
type
  TMyThreads = class(TThread)
  private
    { Private-Deklarationen }
    ...
    procedure Submit();
    ...
  protected
    procedure Execute; override;
  ...
  end;

implementation

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

procedure TMyThreads.Submit;
  // Compiler-Fehler: Unbekannte Anweisung: 'OleObject'.
  OleObject.document.forms.item(0).elements.item('q').value:='test';
  OleObject.Document.Forms.item(0).submit;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 05:32 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