MyBaseを試してみる。(PreviewHandlerで表示)
以前、PreviewHandlerで自分のデータをExplorerで表示したいなと思って、下記サイトのサンプルをダウンロードし、試したことがありました。しかしながらDelphi2009のShlObjにはIPreviewHandlerが定義されておらず、コンパイルできませんでした。
今回、XE2を使ってMyBaseのデータをListViewで表示させてみました。サンプルのMyPreviewHandlerというユニットを次のものに入れ替えます。(MyBaseのファイルは、mbsという拡張子で保存しています。)
The Art of Delphi Programming
Windows 7 Previews – the Delphi Way
こんな感じで、表示することができます。
ただ項目部分をクリックすると次のようなエラーが表示されます。サンプルのまま、検証もせずに使っているので、今回は、OKとしておきますけど(^-^)
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
「ファイル名を指定して実行...」の場合
regsvr32 /u d:\MyPreviewHandlerLib.dll
「ファイル名を指定して実行...」の場合
(参考)
MSDNマガジン
マネージ プレビュー ハンドラ フレームワークで独自の方法でデータを表示する
| 固定リンク