Einzelnen Beitrag anzeigen

tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#4

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?

  Alt 20. Okt 2007, 00:03
Danke quendolineDD,
der Code ist super.. mit dem Beispiel www.google.de funktionert das auch super nur wenn ich es umschreibe, also URL auf
Delphi-Quellcode:
const
  url = 'http://xxxxxx.de/login/login_form';
und
Delphi-Quellcode:
  frm.Elements.Item('__ac_name').Value := 'test';
  frm.Elements.Item('__ac_password').Value := 'test';
  frm.Elements.Item('submit').Click;
kommt folgende Fehlermeldung beim klicken auf den Button:

Zitat:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetretten. Meldung:
Zugriffsverletzung bei Adresse 00456ECF in Modul Project1.exe. Lesen von Adresse 00000000
Prozess wurde angehalten Mit einzelne Anweisung oder Start vortfahren.
Warum ist das so??? Mein Gedanke war das vllt das Problem darin besteht das ich kein .php oder .asp oder sonstiges in der URL habe und deswegen ein Fehler erzeugt wird??

Weil egal wo ich sonst das programm teste... überall gehts... nur bei dieser url nicht.

Hier mal der komplette code, die url habe ich mal verfremdet...:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    WebBrowser2: TWebBrowser;
    procedure WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    procedure Button1Click(Sender: TObject);
  private
    ActiveUrl: string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 uses
  MSHTML;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  with Sender as TWebBrowser do
    if pDisp = DefaultInterface then
      ActiveUrl := URL;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  url = 'http://xxxxxxxxx.de/login/login_form';
var
  wb: TWebBrowser;
  body, doc, frm: OleVariant;
begin
  wb := TWebBrowser.Create(nil);
  wb.ParentWindow := HWND(HWND_MESSAGE);
  wb.OnBeforeNavigate2 := Webbrowser1.OnBeforeNavigate2;
  wb.Navigate(url);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  doc := wb.OleObject.Document;
  body := doc.body;
  frm := doc.Forms.Item(0);
  frm.Elements.Item('__ac_name').Value := 'test';
  frm.Elements.Item('__ac_password').Value := 'test';
  frm.Elements.Item('submit').Click;
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  wb.Free;
  ShowMessage(StringReplace(ActiveUrl, '&', '&&', [rfReplaceAll]));

end;

end.
  Mit Zitat antworten Zitat