AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi dcef3 Chromium html Datei Vorschau
Thema durchsuchen
Ansicht
Themen-Optionen

dcef3 Chromium html Datei Vorschau

Ein Thema von MarcoGöli · begonnen am 20. Jan 2015 · letzter Beitrag vom 7. Feb 2015
Antwort Antwort
MarcoGöli

Registriert seit: 20. Jan 2015
Ort: Schweiz, Luzern
17 Beiträge
 
Delphi XE7 Professional
 
#1

dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 10:04
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
Angehängte Grafiken
Dateityp: jpg Fehler schliessen 64Bit.jpg (15,1 KB, 15x aufgerufen)
Marco
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 11:22
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.
Markus Kinzler
  Mit Zitat antworten Zitat
MarcoGöli

Registriert seit: 20. Jan 2015
Ort: Schweiz, Luzern
17 Beiträge
 
Delphi XE7 Professional
 
#3

AW: dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 12:21
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)
Marco
  Mit Zitat antworten Zitat
zagota

Registriert seit: 3. Sep 2014
38 Beiträge
 
#4

AW: dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 14:03
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
  Mit Zitat antworten Zitat
MarcoGöli

Registriert seit: 20. Jan 2015
Ort: Schweiz, Luzern
17 Beiträge
 
Delphi XE7 Professional
 
#5

AW: dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 16:10
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!
Marco

Geändert von MarcoGöli (20. Jan 2015 um 16:25 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: dcef3 Chromium html Datei Vorschau

  Alt 20. Jan 2015, 21:01
Zitat:
Ich setzte im OnClose der Hauptform den Timer2 auf False.
Es kann aber trotzdem Passieren, das die Prozedur noch einmal aufgerufen wird.
Markus Kinzler
  Mit Zitat antworten Zitat
MarcoGöli

Registriert seit: 20. Jan 2015
Ort: Schweiz, Luzern
17 Beiträge
 
Delphi XE7 Professional
 
#7

AW: dcef3 Chromium html Datei Vorschau

  Alt 21. Jan 2015, 06:25
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.
Marco
  Mit Zitat antworten Zitat
MarcoGöli

Registriert seit: 20. Jan 2015
Ort: Schweiz, Luzern
17 Beiträge
 
Delphi XE7 Professional
 
#8

AW: dcef3 Chromium html Datei Vorschau

  Alt 7. Feb 2015, 13:40
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;
Marco
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:55 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