Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi dcef3 Chromium html Datei Vorschau (https://www.delphipraxis.net/183558-dcef3-chromium-html-datei-vorschau.html)

MarcoGöli 20. Jan 2015 09:04

dcef3 Chromium html Datei Vorschau
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen

Ich bin neu hier im Forum und beschäftige mich erst seit ca. einem halben Jahr mit Delphi.

In Delphi habe ich dcef3 (Chromium Embedded 3) installiert, damit ich eine Webvorschau in meinem Programm habe, die auch Cascading Style Sheets laden und anzeigt.
Nun ich habe in meiner Hauptform die Komponente "Chromium1: TChromium;" hinzugefügt.

Im OnCreate der Hauptform:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
  Dir1, Dir2, Dir3, sExePath, URL: String;
begin
  try
    Edit4.Text := GetCurrentUserName;                    // Windowsuser auslesen
    Edit3.Text := 'C:\Users\'+Edit4.Text+'\mawiDesigner\';// Hauptspeicherpfad
    Dir1 := Edit3.Text+'Vorschau\images';                // Ordnernamen
    Dir2 := Edit3.Text+'Projekte';                       // Ordnernamen
    Dir3 := Edit3.Text+'Export';                         // Ordnernamen
    ForceDirectories(Dir1);                              // Ordner erstellen
    ForceDirectories(Dir2);                              // Ordner erstellen
    ForceDirectories(Dir3);                              // Ordner erstellen
    sExePath := ExtractFilePath(ParamStr(0));            // Programmausführungspfad auslesen
    Edit2.Text := sExePath;              // Programmausführungspfad
    Timer1.Enabled := True;                              // Timer starten
    Timer2.Enabled := True;              // Timer starten
    URL := 'file:\\\'+Edit3.Text+'Vorschau\index.html';     // URL
    Chromium1.Browser.MainFrame.LoadUrl(URL);        // html Datei anzeigen
  finally
  end;
end;
Timer2 Procedure:
Code:
procedure TForm1.BrowserAktualisieren(Sender: TObject);  //Browservorschau neu laden
var
  URL: String;
begin
  Chromium1.Browser.MainFrame.LoadUrl(URL);        // html Datei anzeigen
end;
Die dcef3 Debug Datein sind alle im Win32 und Win64 vorhanden, wie auch alle Bibliothekspfade und Suchepfade sind in Delphi gesetzt.

Wenn ich das Ganze nun als Win32 erzeuge, dann wird mit die Chormiumvorschau gar nicht angezeigt. Bei der Erzeugung Win64 klappt es einwandfrei, die html Datei wird in der Chromiumvorschau angezeigt. Jedoch beim schliessen des Programmes tritt folgender Zugriffsfehler auf (Siehe Bild).
Enferne ich das Laden der URL in Chromium: "Chromium1.Browser.MainFrame.LoadUrl(URL);", dann tritt der Fehler nicht auf, aber die html Datei wird auch nicht angezeigt. Die html Datei erzeuge ich in einem Memo und speicher diese als index.html, die ich in Chromium laden möchte.

Vielleicht kann mir da jemand helfen, Danke.
Gruss Marco

mkinzler 20. Jan 2015 10:22

AW: dcef3 Chromium html Datei Vorschau
 
Nach dem das Fenster geschlossen wurde ist aber der Timer noch aktiv, welcher dann auf ein nicht mehr vorhandenes Objekt zugrreifen will.

Btw.: Ich würde den Benutzerpfad nicht hartkodieren sondern ihn vom System auslesen.

MarcoGöli 20. Jan 2015 11:21

AW: dcef3 Chromium html Datei Vorschau
 
Zitat:

Nach dem das Fenster geschlossen wurde ist aber der Timer noch aktiv, welcher dann auf ein nicht mehr vorhandenes Objekt zugrreifen will.
Hallo Markus

Ich setzte im OnClose der Hauptform den Timer2 auf False.
Code:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); // Programm schliessen
begin
  try
    Timer1.Enabled := False; // Timer beenden
    Timer2.Enabled := False; // Timer beenden
  finally
  end;
    Close;
end;
Das Problem besteht nur bei der Win64 Erzeugung. Bei der Win32 Erzeugung wird die Vorschau gar nicht dargestellt.

Zitat:

Btw.: Ich würde den Benutzerpfad nicht hartkodieren sondern ihn vom System auslesen.
Dann besser wohl so:
Code:
 uses shlobj, ActiveX;


function GetSpecialFolder (aFolder: Integer): String;
var
   pIdL: PItemIDList;
   Path: array [0..Max_Path] of Char;
   Allocator: IMalloc;
begin
   SHGetSpecialFolderLocation (0, aFolder, pIdL);
   SHGetPathFromIDList (pIDL, Path);
   if Succeeded (SHGetMalloc (Allocator)) then
      begin
         Allocator.Free (pIdL);
         {$IFDEF VER100}
         Allocator.Release;
         {$ENDIF}
      end;
   Result := Path;
end;
Auslesen in Edit:
Code:
Edit1.Text := GetSpecialFolder(CSIDL_PERSONAL)

zagota 20. Jan 2015 13:03

AW: dcef3 Chromium html Datei Vorschau
 
Zitat:

Zitat von MarcoGöli (Beitrag 1287105)
Hallo Zusammen

Timer2 Procedure:
Code:
procedure TForm1.BrowserAktualisieren(Sender: TObject);  //Browservorschau neu laden
var
  URL: String;
begin
  Chromium1.Browser.MainFrame.LoadUrl(URL);        // html Datei anzeigen
end;

Der Inhalt von URL ist in diesem Fall leer/undefiniert!

cu

MarcoGöli 20. Jan 2015 15:10

AW: dcef3 Chromium html Datei Vorschau
 
Zitat:

Der Inhalt von URL ist in diesem Fall leer/undefiniert!
klappt leider auch dann nicht, wenn ich "URL := 'file:\\\'+Edit3.Text+'Vorschau\index.html';" hinzufüge!

mkinzler 20. Jan 2015 20:01

AW: dcef3 Chromium html Datei Vorschau
 
Zitat:

Ich setzte im OnClose der Hauptform den Timer2 auf False.
Es kann aber trotzdem Passieren, das die Prozedur noch einmal aufgerufen wird.

MarcoGöli 21. Jan 2015 05:25

AW: dcef3 Chromium html Datei Vorschau
 
Zitat:

Es kann aber trotzdem Passieren, das die Prozedur noch einmal aufgerufen wird.
Das glaube ich nicht, wenn ich das Ganze ins OnCloseQuery lege? Wenn man ein ganz einfaches Programm macht, wo nur die TChromium Komponente geladen wird die eine Webseite anzeigen soll dann besteht das selbe Problem. Somit liegt es nicht am Timer.
Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cefvcl;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chromium1.Browser.MainFrame.LoadUrl('http://www.delphipraxis.net');
end;

end.

MarcoGöli 7. Feb 2015 12:40

AW: dcef3 Chromium html Datei Vorschau
 
Hallo Zusammen

So nach Stunden langem googlen und Demos von dcef3 durchforsten, bin ich nun zum Ziel gekommen und es funktioniert mit meiner html Vorschau. Hier die Lösung:

Die .dpr Datei des Projektes öffnen und bei "uses" an erster Stelle folgendes hinzufügen:
Code:
ceflib,
Dann nach "begin" die ersten Zeilen:
Code:
  CefCache := 'cache';
  CefSingleProcess := False;
  if not CefLoadLibDefault then
    Exit;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
Nun bei der Hauptform beim Ereigniss "OnShow":
Code:
var
  Webseite: String;
begin
    Webseite := 'file:///'+Edit3.Text+'Vorschau/index.html';
    Chromium1.Browser.MainFrame.LoadUrl(Webseite);
end;
Auch das aktualisieren des html Vorschau klappt in einer eigenen procedure einwandfrei:
Code:
Chromium1.Browser.Reload;


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