AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Preview Handler für den Explorer

Ein Thema von bcvs · begonnen am 26. Feb 2025 · letzter Beitrag vom 3. Mär 2025
Antwort Antwort
Seite 1 von 2  1 2      
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#1

Preview Handler für den Explorer

  Alt 26. Feb 2025, 16:11
Hallo zusammen,

ich brauche einen Preview für den Explorer für ein eigenes Datenformat. Dazu habe ich diesen Artikel von Uwe Raabe gefunden:
http://www.uweraabe.de/Blog/2011/06/...he-delphi-way/

Das funktioniert bei mir auch wunderbar mit den bpl-Dateien aus dem Beispiel. Die Vorschau zeigt zum Test einfach nur den Dateinamen an.

Sobald ich das aber auf meine eigene Endung .inz ändere und die dll registriere, erscheint im Explorer nur noch "Es ist keine Vorschau verfügbar".

Hier meine Unit:

Delphi-Quellcode:
unit MyINZPreviewHandler;

interface

uses
  PreviewHandler, Classes, VCL.Controls, VCL.StdCtrls;

const
  {$REGION 'Unique ClassID of your PreviewHandler'}
  ///   <summary>Unique ClassID of your PreviewHandler</summary>
  ///   <remarks>Don't forget to create a new one. Best use Ctrl-G.</remarks>
  {$ENDREGION}
  CLASS_MyPreviewHandlerBPL: TGUID = '{0A37D2E3-D22D-4BDF-AAFC-09BC60C3CFE1}';
  CLASS_MyPreviewHandlerINZ: TGUID = '{13DC9D89-1DBB-408F-AF6C-5B3E43276215}';

type
  {$REGION 'Sample PreviewHandler'}
  ///   <summary>Sample PreviewHandler</summary>
  ///   <remarks>A sample PreviewHandler. You only have to derive from
  ///   TFilePreviewHandler or TStreamPreviewHandler and override some methods.</remarks>
  {$ENDREGION}
  TMyPreviewHandler = class(TFilePreviewHandler)
  private
    FTextLabel: TLabel;
  protected
  public
    constructor Create(AParent: TWinControl); override;
    procedure Unload; override;
    procedure DoPreview(const FilePath: string); override;
    property TextLabel: TLabel read FTextLabel;
  end;

implementation

uses
  SysUtils;

constructor TMyPreviewHandler.Create(AParent: TWinControl);
begin
  inherited;
  FTextLabel := TLabel.Create(AParent);
  FTextLabel.Parent := AParent;
  FTextLabel.AutoSize := false;
  FTextLabel.Align := alClient;
  FTextLabel.Alignment := taCenter;
  FTextLabel.Layout := tlCenter;
  FTextLabel.WordWrap := true;
end;

procedure TMyPreviewHandler.DoPreview(const FilePath: string);
begin
  TextLabel.Caption := 'Datei: '+FilePath;
end;

procedure TMyPreviewHandler.Unload;
begin
  TextLabel.Caption := '';
  inherited;
end;

initialization
  { Register your PreviewHandler with the ClassID, name, descripton and file extension }
  TMyPreviewHandler.Register(CLASS_MyPreviewHandlerINZ, 'inzfile', 'Notiz Preview', '.inz'); // <-- Das funktioniert nicht
// TMyPreviewHandler.Register(CLASS_MyPreviewHandlerBPL, 'bplfile', 'BPL Binary Preview Handler', '.bpl'); // <-- Das funktioniert
end.

Kann es vielleicht daran liegen, dass bpl schon irgendwo registriert ist, weil Delphi installiert ist? ODer was fehlt da sont noch?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.816 Beiträge
 
Delphi 12 Athens
 
#2

AW: Preview Handler für den Explorer

  Alt 26. Feb 2025, 17:42
Also bei mir funktioniert das. Ich habe deinen Quelltext 1:1 verwendet. Hast du die DLL auch umbenannt oder nur die Unit? Und hast du die Original-DLL des Demoprojekts auch wieder deregistriert?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#3

AW: Preview Handler für den Explorer

  Alt 26. Feb 2025, 18:15
Ich habe das Projekt umbenannt, also auch die DLL. Ja, und immer wieder deregistriert.

Delphi-Quellcode:
library INZPreviewHandler;

uses
  ComServ,
  PreviewHandler in 'PreviewHandler.pas{PreviewHandler: CoClass},
  MyINZPreviewHandler in 'MyINZPreviewHandler.pas';

exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer,
  DllInstall;

{$R *.RES}

begin
end.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.816 Beiträge
 
Delphi 12 Athens
 
#4

AW: Preview Handler für den Explorer

  Alt 26. Feb 2025, 21:37
Ich habe mal das Projekt angehängt. Ich habe zwar keine Idee, wo der Unterschied sein könnte, aber wer weiß...
Angehängte Dateien
Dateityp: zip MyPreviewHandlerLib.zip (1,17 MB, 7x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#5

AW: Preview Handler für den Explorer

  Alt 27. Feb 2025, 08:42
Jetzt wird es immer bunter:

Auf einigen VMs (Windows 10, und 11) funktioniert es auch bei mir. Auf einem anderen realen Computer (ehemaliger Entwicklungs-PC) allerdings wieder nicht.

Und wenn ich auf meinem aktuellen Entwicklungs-PC eine Vorschau für eine unverfängliche Endung .xxx registriere, funktioniert es auch da. Es muss also irgendwas mit diesem .inz zu tun haben.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.551 Beiträge
 
Delphi 7 Professional
 
#6

AW: Preview Handler für den Explorer

  Alt 27. Feb 2025, 08:49
Durchsuche bitte mal die Registry nach der Dateiendung .inz, inzfile und den GUIDs. Eventuell sind dort noch Reste von vorherigen Versuchen enthalten, so dass eine erneute Verwendung scheitert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.816 Beiträge
 
Delphi 12 Athens
 
#7

AW: Preview Handler für den Explorer

  Alt 27. Feb 2025, 09:15
Der Zweig .inz sollte direkt unter HKEY_CLASSES_ROOT liegen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#8

AW: Preview Handler für den Explorer

  Alt 27. Feb 2025, 09:57
Ich glaube, jetzt habe ich es.

Auf den beiden Entwicklungsrechnern wurde der Dateityp .inz irgendwann einmal über den Explorer - Öffnen mit - Immer - verknüpft.

Wenn man das macht, funktioniert der Preview nicht. Wird der Dateityp dagegen offiziell über ein Installationsprogramm an die entsprechenden Stellen in HKCR eingetragen, ist alles in Ordnung.

Also habe ich jetzt in der Registry als Administrator alles, was nach .inz aussieht, gelöscht, Rechner neu gestartet, Preview-DLL registriert und es funktioniert.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#9

AW: Preview Handler für den Explorer

  Alt Gestern, 10:49
Mittlerweile habe ich das Preview am Laufen. Mit Innosetup klappt auch die Installation samt Registrierung der dll und Eintrag des Dateityps in die Registry zwecks Öffnen der Anwendung ganz gut.

Ein Problem gibt es nur, wenn die Dll beim nächsten Update überschrieben werden soll. Da der Installer meistens über den Explorer gestartet wird, ist die DLL in Preview Handler Surrogate Host geöffnet und kann nicht überschrieben werden.

In Innosetup gibt es dazu zwar das Flag restartreplace, das scheint aber nicht richtig zu funktionieren. Hat bei mir jedenfalls keinen Effekt.

Wie macht ihr das? Installation einer DLL, die gerade in Benutzung ist:
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.589 Beiträge
 
Delphi 12 Athens
 
#10

AW: Preview Handler für den Explorer

  Alt Gestern, 11:36
In Innosetup gibt es dazu zwar das Flag restartreplace, das scheint aber nicht richtig zu funktionieren. Hat bei mir jedenfalls keinen Effekt.
Das Setup wird aber schon als Admin gestartet?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz