Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi AWebBrowser.Navigate benötigt mehr Angaben?! (https://www.delphipraxis.net/119320-awebbrowser-navigate-benoetigt-mehr-angaben.html)

MCXSC 24. Aug 2008 18:53


AWebBrowser.Navigate benötigt mehr Angaben?!
 
Hallo,

ich habe es unter BDS2006 nun auch endlich geschafft, den WebBrowser zu importieren. Dabei wurde dieser von TWebBrowser(_V1) wohl nach CppWebBrowser(_V1) umbenannt.

Aber ich habe folgendes Problem. Mit D7 ging folgender Code:

Delphi-Quellcode:
procedure LoadHTML(AWebBrowser: CppWebBrowser_V1; AHTMLCode: TStrings);
var
  Tab: OleVariant;
begin
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank');
  Tab := AWebBrowser.Document;
  Tab.Clear;
  Tab.Write(AHTMLCode.Text);
  Tab.Close;
end;
An dem CppWebBrowser_V1 liegt es nicht. Das Problem ist aber: AWebBrowser.Navigate() benötigt mehr Angaben. Laut der Hilfe werden folgende Angaben benötigt:

URL, Flag, TargetFrameName, PostDate und Header.

Allerdings habe ich keine Ahnung, was da hin muss und hoffe, mir kann jemand helfen. :(

BullsEye 24. Aug 2008 18:59

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Lass einfach das Komma weg.

Delphi-Quellcode:
procedure LoadHTML(AWebBrowser: CppWebBrowser_V1; AHTMLCode: TStrings);
var
  Tab: OleVariant;
begin
awebbrowser.navigate
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank'); // Hier das Komma weg und dann müsste es gehen
  Tab := AWebBrowser.Document;
  Tab.Clear;
  Tab.Write(AHTMLCode.Text);
  Tab.Close;
end;

MCXSC 24. Aug 2008 19:07

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Achso, das Komma ist von mir hinzugekommen. Ich hatte es erst mit "nil" versucht und dann vergessen, dass Komma zu löschen.

Funktionieren tut es trotzdem nicht - auch ohne Komma. ;)

DeddyH 24. Aug 2008 19:11

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Ich benutze das Ding ja nie, aber benötigt die Methode navigate nicht einen String-Parameter mit der URL?
Delphi-Quellcode:
awebbrowser.navigate
sieht zumindest komisch aus, selbst ohne Parameter fehlt da ein Semikolon.

toms 24. Aug 2008 19:14

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Delphi-Quellcode:
procedure NavigateURL(WebBrowser: CppWebBrowser_V1; URL: string);
var
  EmptyParam : OleVariant;
begin
  Webbrowser.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

BullsEye 24. Aug 2008 19:16

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von DeddyH
Ich benutze das Ding ja nie, aber benötigt die Methode navigate nicht einen String-Parameter mit der URL?
Delphi-Quellcode:
awebbrowser.navigate
sieht zumindest komisch aus, selbst ohne Parameter fehlt da ein Semikolon.

ja, tut es, sry hab ich gerade ganz übersehen

Delphi-Quellcode:
procedure LoadHTML(AWebBrowser: CppWebBrowser_V1; AHTMLCode: TStrings);
var
  Tab: OleVariant;
begin
awebbrowser.navigate(edit1.text); // BSP die Eingabeleiste oder so. oder halt wieder ('www.google.de') oder ähnliches
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank');
  Tab := AWebBrowser.Document;
  Tab.Clear;
  Tab.Write(AHTMLCode.Text);
  Tab.Close;
end;

MCXSC 24. Aug 2008 19:21

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von toms
Delphi-Quellcode:
procedure NavigateURL(WebBrowser: CppWebBrowser_V1; URL: string);
var
  EmptyParam : OleVariant;
begin
  Webbrowser.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

Danke!

Delphi-Quellcode:
procedure LoadHTML(AWebBrowser: CppWebBrowser_V1; AHTMLCode: TStrings);
var
  Tab: OleVariant;
begin
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  Tab := AWebBrowser.Document;
  Tab.Clear;
  Tab.Write(AHTMLCode.Text);
  Tab.Close;
end;
Nun meckert der Compiler aber bei dem Aufruf:

Delphi-Quellcode:
NavigateURL(Browser, HTML);
Zitat:

E2010 Inkompatible Typen: 'IWebBrowser' und 'TCppWebBrowser'

toms 24. Aug 2008 19:30

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

E2010 Inkompatible Typen: 'IWebBrowser' und 'TCppWebBrowser'

Deklariere :
Delphi-Quellcode:
procedure NavigateURL(WebBrowser: IWebBrowser; URL: string);

MCXSC 24. Aug 2008 19:52

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Die Komponente ist aber vom Typ TCppWebBrowser_V1. Wenn ich nun alles nach IWebBrowser umdeklariere, meckert der Compiler trotzdem.

sx2008 24. Aug 2008 20:46

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von MCXSC
Die Komponente ist aber vom Typ TCppWebBrowser_V1. Wenn ich nun alles nach IWebBrowser umdeklariere, meckert der Compiler trotzdem.

Es gibt hier eine Klasse (eigentlich TWebBrowser) und mehrere Interfaces IWebBrowser, IWebBrowser2.
Sowohl die Klasse als auch die Interfaces haben eine Methode Navigate().
Wir wollen aber mit dem Interface arbeiten, weil das a.) effizienter und b.) flexibler ist.
Denn die kapselnde Klasse macht letztendlich nichts anderes, als ebenfalls das Interface zu benützen.
Delphi-Quellcode:
NavigateURL(CppWebBrowser_V1.DefaultInterface, 'http://www.delphipraxis.de');
Der Unterschied zwischen IWebBrowser und IWebBrowser2 ist, dass IWebBrowser2 einige Methoden mehr hat, aber ansonsten alles kann, was IWebBrowser auch kann.
Mein D2007 gibt als DefaultInterface das IWebBrowser2 raus.
Kein Problem, das kann man leicht umwandeln:
Delphi-Quellcode:
NavigateURL(CppWebBrowser_V1.DefaultInterface as IWebBrowser, 'http://www.delphipraxis.de');
Man kann sich das Leben einfacher machen, indem man im Formular eine lokale Variable anlegt:
Delphi-Quellcode:
  FWebBrowser:IWebBrowser;
und diese Variable einmal zuweist und dann immer nur noch mit FWebBrowser arbeitet.

MCXSC 24. Aug 2008 21:21

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Irgendwie versteh ich grade nur Bahnhof.

Ich habe die "MS Internet Controls" importiert und nun auf meinem Form eine Komponente namens "Browser" vom Typ CppWebBrowser_V1. Von IWebbrowser habe und finde ich da so gut wie gar nichts.

sx2008 24. Aug 2008 22:11

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von MCXSC
Ich habe die "MS Internet Controls" importiert und nun auf meinem Form eine Komponente namens "Browser" vom Typ CppWebBrowser_V1. Von IWebbrowser habe und finde ich da so gut wie gar nichts.

IWebBrowser ist ein Interface und somit unsichtbar.
Hier gibt's Infos darüber, was ein Interface eigentlich ist.

Hier ein Auszug, wie das Interface deklariert ist:
Delphi-Quellcode:
// *********************************************************************//
// Interface: IWebBrowser
// Flags:    (4432) Hidden Dual OleAutomation Dispatchable
// GUID:     {EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B}
// *********************************************************************//
  IWebBrowser = interface(IDispatch)
    ['{EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B}']
    procedure GoBack; safecall;
    procedure GoForward; safecall;
    procedure GoHome; safecall;
    procedure GoSearch; safecall;
    procedure Navigate(const URL: WideString; const Flags: OleVariant;
                       const TargetFrameName: OleVariant; var PostData: OleVariant;
                       const Headers: OleVariant); safecall;
    procedure Refresh; safecall;
    procedure Refresh2(var Level: OleVariant); safecall;
    procedure Stop; safecall;
Diesen Code findest du garantiert in der Unit, die du importiert hast.
Normalerweise heisst diese Unit SHDocVw oder auch SHDocVw_TLB.
Dort finden sich noch zig andere Interfaces.

MCXSC 24. Aug 2008 22:20

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Ja, soweit verstehe ich das schon.

Aber ich arbeite ja nicht mit dem Interface direkt, sondern über die Komponente in der Designtime. Und da kann ich ein NavigateURL nirgendwo deklarieren.

Wie gesagt: Ich setze die Komponente auf die Form, und bennene sie in "Browser" um. Nun habe ich eine Funktion (die so auch mit D7 funktioniert hat):

Delphi-Quellcode:
procedure LoadHTML(AWebBrowser: CppWebBrowser_V1; AHTMLCode: TStrings);
var
  BrowerInhalt: OleVariant;
begin
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  BrowerInhalt:= AWebBrowser.Document;
  BrowerInhalt.Clear;
  BrowerInhalt.Write(AHTMLCode.Text);
  BrowerInhalt.Close;
end;
Der Aufruf des ganzen erfolgt(e) über die Zeile:

Delphi-Quellcode:
LoadHTML(Browser, HTML); //wobei HTML eine stringList ist
Delphi-Quellcode:
type
  TMainFrm = class(TForm)
    Browser: TCppWebBrowser;

MCXSC 26. Aug 2008 05:33

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Keiner mehr 'ne Idee...? :(

sx2008 26. Aug 2008 09:09

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von MCXSC
Keiner mehr 'ne Idee...? :(

Ich hab' doch oben geschrieben: Wir wollen aber mit dem Interface arbeiten, weil das a.) effizienter und b.) flexibler ist.
Die Komponente, die Delphi um die WebBrowser-Interfaces herumgebaut hat nennt man auch Wrapper (=Umhüllung, Schachtel).
Sie soll dir das Leben einfacher machen, weil du jetzt eine Komponente aufs Formular ziehen kannst.
Trotzdem solltest du nur mit den Interfaces arbeiten und die Komponente nur als Ding betrachten, dass dir Zugriff auf die Interfaces des Internet Explorers gibt.

Stell dir vor, du bekommst einen Bausatz für ein Flugzeug zu Weihnachten geschenkt. :xmas:
Und du beschäftigst dich nur mit der Schachtel.
Du musst die Schachtel aufmachen und reinschauen!!!
In der Schachtel sich die Teile für das Flugzeug und in der Schachtel sind nur Interfaces für den IE.

MCXSC 26. Aug 2008 14:04

Re: AWebBrowser.Navigate benötigt mehr Angaben?!
 
Zitat:

Zitat von sx2008
Ich hab' doch oben geschrieben: Wir wollen aber mit dem Interface arbeiten, weil das a.) effizienter und b.) flexibler ist.
Die Komponente, die Delphi um die WebBrowser-Interfaces herumgebaut hat nennt man auch Wrapper (=Umhüllung, Schachtel).
Sie soll dir das Leben einfacher machen, weil du jetzt eine Komponente aufs Formular ziehen kannst.
Trotzdem solltest du nur mit den Interfaces arbeiten und die Komponente nur als Ding betrachten, dass dir Zugriff auf die Interfaces des Internet Explorers gibt.

Ja, das versteh' ich schon. Aber ich hab' trotzdem keinen Plan was ich mit diesem nun machen soll... :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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