MyBaseを試してみる。(PreviewHandlerで表示)

と書いていますが、今回は、MyBaseとは直接関係ないです(^-^)
以前、PreviewHandlerで自分のデータをExplorerで表示したいなと思って、下記サイトのサンプルをダウンロードし、試したことがありました。しかしながらDelphi2009のShlObjにはIPreviewHandlerが定義されておらず、コンパイルできませんでした。

今回、XE2を使ってMyBaseのデータをListViewで表示させてみました。サンプルのMyPreviewHandlerというユニットを次のものに入れ替えます。(MyBaseのファイルは、mbsという拡張子で保存しています。)

The Art of Delphi Programming
Windows 7 Previews – the Delphi Way

こんな感じで、表示することができます。

Mypreviewhandler


ただ項目部分をクリックすると次のようなエラーが表示されます。サンプルのまま、検証もせずに使っているので、今回は、OKとしておきますけど(^-^)

Error

unit MyPreviewHandler;

interface

uses
  PreviewHandler, System.Classes, Vcl.Controls, Vcl.StdCtrls,
  Vcl.ComCtrls, MidasLib, Datasnap.DBClient;

const
  CLASS_MyPreviewHandler: TGUID = '{9E4BFFE4-BA9C-449C-A6B5-4FF82B15FA91}';

type
  TMyPreviewHandler = class(TFilePreviewHandler)
  private
    FListView: TListView;
    FCDS: TClientDataSet;
  protected
  public
    constructor Create(AParent: TWinControl); override;
    procedure Unload; override;
    procedure DoPreview(const FilePath: string); override;
  end;

implementation

uses
  SysUtils;

constructor TMyPreviewHandler.Create(AParent: TWinControl);
var
  Col: TListColumn;
begin
  inherited;
   FCDS := TClientDataSet.Create(AParent);
   FListView:= TListView.Create(AParent);
   FListView.Parent := AParent;
   FListView.Align := alClient;
   FListView.Viewstyle:=vsReport;
   FListView.ReadOnly := True;

   Col := FListView.Columns.Add;
   Col.Caption := 'ORD';
   Col.Width := 40;

   Col := FListView.Columns.Add;
   Col.Caption := 'ITEM';
   Col.Width := 200;

   Col := FListView.Columns.Add;
   Col.Caption := 'QTY';
   Col.Alignment := taRightJustify;
   Col.Width := 80;

   Col := FListView.Columns.Add;
   Col.Caption := 'UNIT';
   Col.Alignment := taCenter;
   Col.Width := 50;

   Col := FListView.Columns.Add;
   Col.Caption := 'PRICE';
   Col.Alignment := taRightJustify;
   Col.Width := 80;

   Col := FListView.Columns.Add;
   Col.Caption := 'AMOUNT';
   Col.Alignment := taRightJustify;
   Col.Width := 80;

end;

procedure TMyPreviewHandler.DoPreview(const FilePath: string);
var
  LI: TListItem;
begin
  FCDS.FileName := FilePath;
  FCDS.Open;
  try
    FCDS.First;
    while not FCDS.EOF do
    begin
      LI := FListView.Items.add;
      LI.Caption := FCDS.FieldByName('ORD').AsString;
      LI.SubItems.Add(FCDS.FieldByName('ITEM').AsString);
      LI.SubItems.Add(FCDS.FieldByName('QTY').AsString);
      LI.SubItems.Add(FCDS.FieldByName('UNIT').AsString);
      LI.SubItems.Add(FormatCurr('#,',FCDS.FieldByName('PRICE').AsCurrency));
      LI.SubItems.Add(FormatCurr('#,',FCDS.FieldByName('QTY').AsFloat*
        FCDS.FieldByName('PRICE').AsCurrency));
      FCDS.Next;
    end;
  finally
   FCDS.Close;
  end;
end;

procedure TMyPreviewHandler.Unload;
begin
  FListView.Items.Clear;
  inherited;
end;

initialization
  TMyPreviewHandler.Register(CLASS_MyPreviewHandler, 'mbs', 'MyBase Preview Handler', '.mbs');
end.
 

コンパイルしてできたDLLをregsvr32を使って登録します。
regsvr32 d:\MyPreviewHandlerLib.dll

「ファイル名を指定して実行...」の場合

Resister2

「コマンドプロンプト」の場合

Regist

Regsvr32

削除する場合は、/u を使います。
regsvr32 /u d:\MyPreviewHandlerLib.dll

「ファイル名を指定して実行...」の場合

Unregister2

「コマンドプロンプト」の場合

Unregist



(参考)
MSDNマガジン

マネージ プレビュー ハンドラ フレームワークで独自の方法でデータを表示する

|