フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: [Explorer] プレビューハンドラ
DEKO
管理者
投稿数: 2690
[Explorer] プレビューハンドラ
on: 2014/08/10 13:16 Sun

何の事か解らない方は以下の画像をご覧下さい。

「あー、アレか!」そうですこれが "プレビューハンドラ" ([整理 | レイアウト | プレビュー ウィンドウ] で表示される奴) です。プレビューハンドラは Explorer 拡張の一種で実体は DLL です。

画像のプレビューハンドラは

  • *.dpr, *.pas, *.dpk, *.inc を関連付け
  • プレビューウィンドウには TEditor (Unicode Edition) を使用

…したサンプルになっています。元ネタがちゃんとありますので、他の拡張子用のプレビューハンドラを作るのはとっても簡単です。

[Is there a Preview Handler VCL for Windows 7? (StackOverflow)]
http://stackoverflow.com/questions/5195988/is-there-a-preview-handler-vcl-for-windows-7

サンプルと同じプレビューハンドラを作ってみましょう。まずは↑から PreviewHandler.pas を作ります。http://stackoverflow.com/questions/5195988/is-there-a-preview-handler-vcl-for-windows-7/6212448#6212448 ←これをファイルにするだけです。

次に DLL のプロジェクトを作ります。

[PascalPreview.dpr]
library PascalPreview;

uses
ComServ,
PreviewHandler,
uPascalPreview in 'uPascalPreview.pas';

exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
DllInstall;

{$R *.res}

begin
end.

 
次にユニットを一つ追加します。これが本体となります。

unit uPascalPreview;

interface

uses
SysUtils, Classes, Controls, StdCtrls, Graphics,
PreviewHandler, HEditor, DelphiFountain;

const
// Ctrl+Shift+G でアプリケーション毎に生成する事
CLASS_ProjectPreviewHandler: TGUID = '{BA747F72-7F31-4D36-B72F-A882CA387F11}'; // *.dpr
CLASS_PackagePreviewHandler: TGUID = '{68345243-DB20-4176-AF59-5C0385FBC15A}'; // *.dpk
CLASS_PascalPreviewHandler: TGUID = '{E55BD47F-761B-4D3E-A9BA-2AD51093DD6E}'; // *.pas
CLASS_IncludePreviewHandler: TGUID = '{199DCB7D-7DA1-497A-830B-8FDC86AB7D28}'; // *.inc

type
TPascalPreviewHandler = class(TFilePreviewHandler)
private
FEditor: TEditor;
FDelphiFountain: TDelphiFountain;
protected
public
constructor Create(AParent: TWinControl); override;
procedure Unload; override;
procedure DoPreview(const FilePath: string); override;
end;

implementation

{ TPascalPreviewHandler }

constructor TPascalPreviewHandler.Create(AParent: TWinControl);
var
i: Integer;
begin
// プレビューハンドラ作成
inherited;
// TEditor
FEditor := TEditor.Create(AParent);
FEditor.Parent := AParent;
// TDelphiFountain
FDelphiFountain := TDelphiFountain.Create(AParent);
// Property Settings
FEditor.Fountain := FDelphiFountain;
FEditor.Align := alClient;
FEditor.ReadOnly := True;
FEditor.WordWrap := False;
FEditor.Ruler.Visible := True;
FEditor.Ruler.BkColor := clBtnFace;
FEditor.Leftbar.Visible := True;
FEditor.Leftbar.LeftMargin := 0;
FEditor.Leftbar.Column := 1;
FEditor.Leftbar.BkColor := clBtnFace;
FEditor.Margin.Left := FEditor.Margin.Top;
FEditor.ScrollBars := ssBoth;
FEditor.Font.Name := 'MS ゴシック';
FEditor.Font.Size := 11;
// Fountain Settings
FDelphiFountain.AsmBlock.Color := clTeal;
FDelphiFountain.Comment.Color := clGreen;
FDelphiFountain.Comment.Style := [fsItalic];
FDelphiFountain.DBCS.Color := clWhite;
FDelphiFountain.DBCS.BkColor := clRed;
FDelphiFountain.Int.Color := clBlue;
FDelphiFountain.Str.Color := clBlue;
FDelphiFountain.Reserve.Color := clNavy;
FDelphiFountain.Reserve.Style := [fsBold];
for i:=0 to FDelphiFountain.Brackets.Count-1 do
begin
FDelphiFountain.Brackets[i].ItemColor.Color := clGreen;
FDelphiFountain.Brackets[i].ItemColor.Style := [fsItalic];
end;
end;

procedure TPascalPreviewHandler.DoPreview(const FilePath: string);
begin
// プレビュー
FEditor.Lines.LoadFromFile(FilePath);
FEditor.Repaint;
end;

procedure TPascalPreviewHandler.Unload;
begin
// プレビューハンドラアンロード
inherited;
end;

initialization
// プレビューハンドラを登録 (*.dpr, *.pas, *.dpk, *.inc)
TPascalPreviewHandler.Register(CLASS_ProjectPreviewHandler, 'dprfile', 'Delphi Project file Preview Handler', '.dpr');
TPascalPreviewHandler.Register(CLASS_PackagePreviewHandler, 'dpkfile', 'Delphi Package file Preview Handler', '.dpk');
TPascalPreviewHandler.Register(CLASS_PascalPreviewHandler, 'pasfile', 'Delphi Source file Preview Handler', '.pas');
TPascalPreviewHandler.Register(CLASS_IncludePreviewHandler, 'incfile', 'Delphi Include file Preview Handler', '.inc');
end.

 
コンパイルして DLL が出来たら Windows のシステムフォルダへコピーし、

regsvr32 PascalPreview.dll

 
これで登録されます (管理者権限が必要です)。登録解除は

regsvr32 -U PascalPreview.dll

 
です。ね、とっても簡単でしょう?(Uni) SynEdit で書き換えるのも難しくないですよね?詳細は Uwe Raabe 氏のブログ記事を参照してください。

See Also:
[Windows 7 Previews – the Delphi Way (The Art of Delphi Programming )]
http://www.uweraabe.de/Blog/2011/06/01/windows-7-previews-the-delphi-way/

[TEditor ver2.52 Unicode Edition (Delphi Forum)]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1522

[Preview Handlers (Microsoft Developer Network)]
http://msdn.microsoft.com/ja-jp/library/bb776867.aspx

DEKO
管理者
投稿数: 2690
Re: [Explorer] プレビューハンドラ
on: 2014/08/10 16:36 Sun

サンプルのプレビューハンドラは Delphi 2009 以降でコンパイルできるハズです。もし、uses でファイルが見つからないと言われる場合には、

  • [ツール | オプション] で TEditor の Source フォルダへライブラリパスを通す。
  • [プロジェクト | オプション] でユニットスコープに Vcl を加える (XE2 以降)。

この二点を確認してみてください。XE2 以降のユニットスコープについては以下を参照してください。

See Also:
[ユニット スコープ名 (DocWiki)]
http://docwiki.embarcadero.com/RADStudio/XE6/ja/%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88_%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E5%90%8D

DEKO
管理者
投稿数: 2690
Re: [Explorer] プレビューハンドラ
on: 2014/08/11 11:50 Mon

プレビューハンドラのサンプルは TEditor Unicode Edition にも含まれています。
TEditor 付属のものは Pascal / C++ 両対応となっています。関連付けられる拡張子は以下の通りです。

  • *.dpr, *.pkg, *.pas, *.inc, *.int (Delphi 系: TPascalPreviewHandler)
  • *.h, *.hpp, *.c, *.cpp, *.pch (C++Builder 系: TCppPreviewHandler)
  • *.dfm, *.fmx, *.xfm (フォーム系: TFormPreviewHandler)
  • *.bdsgroup, *.groupproj, *.bdsproj, *.proj, *.dproj, *.cbproj (プロジェクト系: TXMLPreviewHandler)

言うまでもない事かもしれませんが、TEditor Unicode Edition のバージョンが上がったらリビルドする事をオススメします。

プレビューハンドラを実装したいのではなく、RAD Studio 用のプレビューハンドラを使いたいというのであれば以下を試してみてください。

[Delphi Preview Handler]
https://code.google.com/p/delphi-preview-handler/

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.037 sec.