Problem TEvsWebBrowser

Rund um die LCL und andere Komponenten
hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Problem TEvsWebBrowser

Beitrag von hahe »

Guten Morgen zusammen,

ich bin neu in der Community und auch in Lazarus. Ich habe sehr lange Delphi programmiert, bin aber nun "nur" noch Hobbyprogrammierer und von der aktuellen DELPHI-Preispolitik abgeschreckt worden.

Nun zu meiner Frage ich habe die Lazarus Actice X und die TLB vom IE eingebunden. Nun möchte ich den Beispielcode von der Seite http://wiki.freepascal.org/LazActiveX nachvollziehen. Hiebei bekomme ich bereits bei der Variablen Deklaration (Browser:TEvsWebBrowser;) diesen Fehler - Error: Identifier not found "TEvsWebBrowser". Wahrscheinlich ist es eine Kleinigkeit, aber ich habe jetzt einen ganzen Tag gesucht, bekomme aber nicht heraus, welches Package mir fehlt... kann mir jemand helfen? Ich habe auch in Google keine Lösung gefunden.

Vielen vielen Dank und Grüße
Hendrik

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Problem TEvsWebBrowser

Beitrag von Michl »

Erstmal ein fröhliches Willkommen im Forum!

Hast du
- Open 'Import Type Library' from the tools menu and select 'C:\WINDOWS\system32\ieframe.dll'. Click OK. The SHDocVw_1_1_TLB unit is created.
- Add SHDocVw_1_1_TLB to the uses clause.
wenn ja, dann sollte auch "TEvsWebBrowser" gefunden werden (wird in SHDocVw_1_1_TLB erstellt).

Bitte beachten, es wird FPC>2.6.1 und eine Lazarus-Trunc-Version benötigt! Evtl. einen Snapshot von hier runterladen!

[Edit] habe eben das Bsp mal getestet, funktioniert auch :) :
IE_Inside.jpg

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

Danke für die schnelle Hilfe! Die TLB habe ich importiert.
Vielleicht habe ich die falsche Version oder es ist sonst etwas schief gelaufen. Ich werde es nachher testen!

Vielen Dank!

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

Guten Abend,

ich habe 2.7.1 deinstalliert und noch einmal 2.6.1 heruntergeladen und installiert. Dann die Lazarus Active X Komponente installiert und dann die ieframe.dll eingelesen und die TLB in die uses eingebunden, aber ich bekomme es nicht ans laufen... Immer noch unverändert...

Bin für jeden Tip dankbar.

Danke!

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Problem TEvsWebBrowser

Beitrag von Michl »

Hast du wirklich alle Schritte entsprechend der Seite gemacht (bei mir liefs auf Anhieb)?!:
- Drop a TActiveXContainer, a TButton, TLabel and a TEdit on a form. Resize and position TActiveXContainer to your liking
- Open 'Import Type Library' from the tools menu and select 'C:\WINDOWS\system32\ieframe.dll'. Click OK. The SHDocVw_1_1_TLB unit is created.
- Add SHDocVw_1_1_TLB to the uses clause.
- Create an OnClick event for the button and an OnCreate event for the form.
- Create in class TForm1 the private procedure OnStatusTextChange(Sender: TObject;Text_:WideString);
Habe mal mein Test-Projekt angehangen läuft das?!
Dateianhänge
IE Inside.zip
(145.04 KiB) 97-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Problem TEvsWebBrowser

Beitrag von gocher »

Ich habe es ähnlich im Einsatz Michl, jedoch fehlt in Deinem Zip-Archiv eine Datei.
Auszug Uses aus project1.lpr:

Code: Alles auswählen

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, Unit1, SHDocVw_1_1_TLB, 
MSHTML_4_0_TLB // <-- Damit es funktioniert fehlt noch diese Datei MSHTML_4_0_TLB.pas 
  { you can add units after this };       
MSHTML_4_0_TLB.pas
die fehlende Datei
(5.71 MiB) 83-mal heruntergeladen
Einfach mit in den Projekt-Ordner legen!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

gocher hat geschrieben: Einfach mit in den Projekt-Ordner legen!
Das war der Hinweis ;-) Ich hatte alles brav in den Komponenten Ordner von Lazarus gelegt. In den Projektordner kopieren und Voilá!

Merci!

Hendrik

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Problem TEvsWebBrowser

Beitrag von Michl »

gocher hat geschrieben:Ich habe es ähnlich im Einsatz Michl, jedoch fehlt in Deinem Zip-Archiv eine Datei.
Danke, für den Hinweis. Ich hatte noch ein bischen damit gespielt. Zum posten des Projekts, hatte ich wieder alles entfernt (bis auf diese Unit ... irgendwie übersehen). Zum Starten, des Minimalbsp. brauchts die nicht, zum Zugriff auf das Document-Objekt schon.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

Hallo Zusammen,

ich komme mir irgendwie vor wie ein blutiger Anfänger :(

Jetzt erhalte ich von dem Webbrowser nach dem Navigate2 eine Fehlermeldung >>Run Error 217<< und danach EControlC "Control-C Hit".
Ich brauche nicht zusagen, dass ich nicht auf Ctrl+C gedrückt habe ;)

Kann mir hier noch jemand helfen??? Danke!!

Hendrik

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Problem TEvsWebBrowser

Beitrag von Michl »

Meinst du z.B. bei dem Buttonclick?:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  url,onull:Olevariant;
begin
  url:=Utf8decode(Edit1.Text);
  onull:=NULL;
  Browser.ComServer.Navigate2(url,onull,onull,onull,onull);
end; 
oder rufts du Navigate2 irgendwie anders auf?!

Welches Betriebssystem, welche Lazarus-Version nutzt du?!

Bei mir unter Win7 64bit, Lazarus 1.3 32bit, FPC 2.7.1 läufts eigentlich stabil (bis auf dass nach Beendigung des Programms der Debugger abschmiert). Achja, Heaptrc darfst du nicht verwenden, da gibts auch bei mir Probleme!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

Hallo,

ich nutze noch die Version 2.6.1 wie oben gewünscht :-))

Ich rufe den Browser Navigate per Timer auf

HTMLTEXT.SavetoFile(PFAD +'\TEMPindex.html');
url:=Utf8decode(PFAD +'\TEMPindex.html');
onull:=NULL;
Browser.ComServer.Navigate2(url,onull,onull,onull,onull);

Der Fehler kommt mit einem gewissen Zeitverzug. Kommentiere ich den Navigate aus, kommt der Fehler aber nicht mehr....

Gruß
Hendrik

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Problem TEvsWebBrowser

Beitrag von Michl »

hahe hat geschrieben:ich nutze noch die Version 2.6.1 wie oben gewünscht :-))
Ich glaub, da hast du was missverstanden. 2.6.1 ist eine Entwicklerversion und auf jeden Fall nicht up to date! Aktuelle Trunc-Versionen von FPC sind 2.6.3 und 2.7.1. Oben stand > 2.6.1., so wie auf der Wiki-Seite geschrieben.

Ich würde dir dringend empfehlen, wenigstens die aktuelle stabile Lazarus-Version 1.0.12 (mit FPC 2.6.2) zu installieren (unter Windows nutze ich derzeit 32bit-Versionen und bin damit sehr zufrieden)!
hahe hat geschrieben:HTMLTEXT.SavetoFile(PFAD +'\TEMPindex.html');
Wenn es dir nur um den Quelltext der HTML-Seiten geht und nicht um deren Ansicht, würde ich dir Synapse empfehlen, läuft auf jeden Fall sehr stabil!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Problem TEvsWebBrowser

Beitrag von gocher »

Ich glaube da hast Du etwas falsch verstanden Michl, ich glaube wenn ich in meine Zauberkugel schaue HTMLTEXT ist vom Typ TStringlist oder TStream, in der Hendrik seinen HTML-Code zusammen baut um ihn dann im Browser anzuzeigen!

Hendrik, zu Deinem Problem, Du schreibst Deinen HTML-Code in eine Datei und übergibst sie an die Methode Navigate2, was passiert wenn Du den kompletten Pfad, also den aus Utf8decode(PFAD +'\TEMPindex.html') generierten, direkt in den Internet Explorer eingibst?
Wenn das funktioniert würde ich im zweiten Schritt, den Pfad in dem Beispiel erst einmal ins Edit1 eintragen.
Wenn auch das Funktioniert nützt uns der Code-Auszug den Du uns hier zur Verfügung stellt nichts, dann liegt der Fehler an anderer Stelle!

Schöner wäre es außerdem wenn Du mit

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var ovUrl, ovNull:Olevariant;
begin
  Browser:=TEvsWebBrowser.Create(Self);
  ActiveXContainer1.ComServer:=Browser.ComServer;
  ActiveXContainer1.Active:=true;
  Browser.OnStatusTextChange:=@OnStatusTextChange;
  ovUrl := Utf8decode('about:blank'); // eigentlich sollte hier an Stelle des : ein Doppelpunkt stehen, Fehler kommt durch Syntax Highlighting
  ovNull := NULL;
  Browser.ComServer.Navigate2(ovUrl, ovNull,ovNull,ovNull,ovNull);
end;
den Browser initialisiert und dann mit

Code: Alles auswählen

var
  ovDocument:Olevariant;
begin
  ovDocument := Browser.ComServer.Document;
  ovDocument.Write('<html><body><p>Hello World!</p></body></html>'); // oder Dein HTMLTEXT.Text
  ovDocument.Close();  
end;
das Dokument ausgibst!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hahe
Beiträge: 8
Registriert: Fr 1. Nov 2013, 05:45

Re: Problem TEvsWebBrowser

Beitrag von hahe »

Hallo Zusammen!

Vielen Dank erst einmal für die wirklich super Hilfe hier! Toll ein so aktives Forum zu finden!

Gocher hat den Nagel auf den Kopf getroffen ;-) Ich bastel mir ein verhältnismäßig komplexes HTML mit CSS und JS Script Units über Metronic zusammen, fülle Variablen mit Datenbank Inhalt und gebe es dann im Browser aus.

Die Fehlermeldungen scheinen an "Problemen" in den JS Modulen zu hängen. Ich konnte diese mittlerweile lokalisieren, aber ich bekomme die nicht raus, da ich auch externe Libraries einbinde, auf die ich keinen Einfluss habe.

Wie kann es sein, dass eine JS Datei, die im nativen IE problemlos abläuft in dem ActiveX eingebundenen IE zum Absturz führt? Gibt es eine Fehlerbehandlungsroutine in der Komponente die ich verwenden kann? Aktuell quält mich ein SIGFPE Fehler in einer der JS Dateien.

Danke für jede Hilfe!
Gruß
Hendrik

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Problem TEvsWebBrowser

Beitrag von Achtzig »

Ich arbeite mit Webkit und dort bekommt man sehr schnell einen Ausnahmefehler (gerne SIGFPE), wenn man nicht

SetExceptionMask([exInvalidOp,exDenormalized,exZeroDivide,exOverflow,exUnderflow,exPrecision]);

der Einheit Math am Start ausführt. Webkit hat wohl intern ein paar Unstimmigkeiten. Mit dieser Zeile läuft aber alles einwandfrei.

Vielleicht hilf das ja auch bei Deinem Problem.

Antworten