Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a Preview Handler VCL for Windows 7?

This article

http://msdn.microsoft.com/en-gb/library/bb776867.aspx

describes preview handlers in Windows as

Preview handlers are called when an item is selected to show a lightweight, rich, read-only preview of the file's contents in the view's reading pane. This is done without launching the file's associated application.

and ...

A preview handler is a hosted application. Hosts include the Microsoft Windows Explorer in Windows Vista or Microsoft Outlook 2007.

Is there some Delphi VCL code which can be used as a startingpoint for such a handler?

like image 760
mjn Avatar asked Mar 04 '11 15:03

mjn


People also ask

How do I preview files in Windows 7?

Windows 7 and Windows Vista: Open the Organize menu, then choose Layout, and then Preview Pane. Alternatively, you can also click the preview pane icon in the toolbar. Windows XP: Open the View menu and then choose Preview Pane. Alternatively, you can also click the preview pane icon in the toolbar.

What is the latest version of VLC?

Today, VideoLAN is publishing the 3.0.17 release of VLC, which adds support for a few formats, improves adaptive streaming support, fixes some crashes and updates many third party libraries. More details on the release page.

Can VLC open PDF?

VLC does ot play PDF.


1 Answers

@Mjn, right know I'm writing an article for my blog to implement Preview Handlers from Delphi, but due to lack of time, I do not know when this is complete, as others users mention by the moment no exist a VCL component in Delphi to implement preview handlers, in the past I implemented a couple of preview handlers for a customer but using Delphi-Prism and C#.

As starting point here I leave some tips.

  • You must use the IPreviewHandler, InitializeWithFile, InitializeWithStream, IPreviewHandlerFrame, IPreviewHandlerVisuals interfaces.

This is the Delphi translation of the headers of these interfaces

uses
  Windows, ActiveX, AxCtrls, ShlObj, ComObj;

type


  IIPreviewHandler = interface(IUnknown)
    ['{8895b1c6-b41f-4c1c-a562-0d564250836f}']
    function SetWindow(hwnd: HWND; var RectangleRef: TRect): HRESULT; stdcall;
    function SetRect(var RectangleRef: TRect): HRESULT; stdcall;
    function DoPreview(): HRESULT; stdcall;
    function Unload(): HRESULT; stdcall;
    function SetFocus(): HRESULT; stdcall;
    function QueryFocus(phwnd: HWND): HRESULT; stdcall;
    function TranslateAccelerator(PointerToWindowMessage: MSG): HRESULT; stdcall;
  end;

  IInitializeWithFile = interface(IUnknown)
    ['{b7d14566-0509-4cce-a71f-0a554233bd9b}']
    function Initialize(pszFilePath: LPWSTR; grfMode: DWORD):HRESULT;stdcall;
  end;

  IInitializeWithStream = interface(IUnknown)
    ['{b824b49d-22ac-4161-ac8a-9916e8fa3f7f}']
    function Initialize(pstream: IStream; grfMode: DWORD): HRESULT; stdcall;
  end;

  IIPreviewHandlerFrame = interface(IUnknown)
    ['{fec87aaf-35f9-447a-adb7-20234491401a}']
    function GetWindowContext(pinfo: HWND): HRESULT; stdcall;
    function TranslateAccelerator(PointerToWindowMessage: MSG): HRESULT; stdcall;
  end;

  IIPreviewHandlerVisuals = interface(IUnknown)
    ['{8327b13c-b63f-4b24-9b8a-d010dcc3f599}']
        function SetBackgroundColor(color: COLORREF ): HRESULT; stdcall;
        function SetFont(plf:LOGFONTW): HRESULT; stdcall;  
        function SetTextColor(color: COLORREF): HRESULT; stdcall;
  end;
  • You must create a com dll with a class which descend from these interfaces IIPreviewHandler, IIPreviewHandlerVisuals, IOleWindow, IObjectWithSite to manage the visualization and a second class to load the files to show. this class must descend from IPreviewHandler, IInitializeWithStream.

something like this

  TMyPreviewHandler = class(IIPreviewHandler, IIPreviewHandlerVisuals, IOleWindow, IObjectWithSite)

  TMyStream = class(IIPreviewHandler, IInitializeWithStream, IStream)
  • Now you must create your own implementation of the methods for the parent interfaces. this is the list of the methods which you need implement.

    IPreviewHandler -> DoPreview, SetWindow, SetRect, Unload, SetFocus, TranslateAccelerator, QueryFocus.

    IObjectWithSite -> GetSite, SetSite.

    IOleWindow -> GetWindow

    IPreviewHandlerVisuals - > SetBackgroundColor, SetFont, SetColor

    InitializeWithStream -> Initialize

  • finally you must register your COM in the system as well as the file extensions which will use you PrevieHandler class.

  • Check this project as a starting point Windows Preview Handler Pack (is written in C#) and this article View Data Your Way With Our Managed Preview Handler Framework

like image 100
RRUZ Avatar answered Oct 15 '22 06:10

RRUZ