![]() |
Preview Handler für den Explorer
Hallo zusammen,
ich brauche einen Preview für den Explorer für ein eigenes Datenformat. Dazu habe ich diesen Artikel von Uwe Raabe gefunden: ![]() 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? |
AW: Preview Handler für den Explorer
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?
|
AW: Preview Handler für den Explorer
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. |
AW: Preview Handler für den Explorer
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal das Projekt angehängt. Ich habe zwar keine Idee, wo der Unterschied sein könnte, aber wer weiß...
|
AW: Preview Handler für den Explorer
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. |
AW: Preview Handler für den Explorer
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.
|
AW: Preview Handler für den Explorer
Der Zweig .inz sollte direkt unter HKEY_CLASSES_ROOT liegen.
|
AW: Preview Handler für den Explorer
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. |
AW: Preview Handler für den Explorer
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: |
AW: Preview Handler für den Explorer
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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-2025 by Thomas Breitkreuz