クリップボードのフォーマットを知る
|
クリップボードのフォーマットは
ヘルプを見ると幾つか定義されています。
プロフェッショナル版以上のDelphiに付属する
VCLのソースをみると
windows.pasに定義されていることが分ります。
CF_TEXTは単に1という値で定義されています
こちらの定義を用いれば現在のクリップボードのフォーマットが分ります。
定義されていないクリップボードフォーマットもありますが
その場合には単に数値として取得してみます。
procedure ClipFormat;
function ShowMessageCF(Value: Integer): String;
case Value of
CF_TEXT:
Result := 'CF_TEXT';
CF_BITMAP:
Result := 'CF_BITMAP';
CF_METAFILEPICT:
Result := 'CF_METAFILEPICT';
CF_SYLK:
Result := 'CF_SYLK';
CF_DIF:
Result := 'CF_DIF';
CF_TIFF:
Result := 'CF_TIFF';
CF_OEMTEXT:
Result := 'CF_OEMTEXT';
CF_DIB:
Result := 'CF_DIB';
CF_PALETTE:
Result := 'CF_PALETTE';
CF_PENDATA:
Result := 'CF_PENDATA';
CF_RIFF:
Result := 'CF_RIFF';
CF_WAVE:
Result := 'CF_WAVE';
CF_UNICODETEXT:
Result := 'CF_UNICODETEXT';
CF_ENHMETAFILE:
Result := 'CF_ENHMETAFILE';
CF_HDROP:
Result := 'CF_HDROP';
CF_LOCALE:
Result := 'CF_LOCALE';
CF_MAX:
Result := 'CF_MAX';
CF_OWNERDISPLAY:
Result := 'CF_OWNERDISPLAY';
CF_DSPTEXT:
Result := 'CF_DSPTEXT';
CF_DSPBITMAP:
Result := 'CF_DSPBITMAP';
CF_DSPMETAFILEPICT:
Result := 'CF_DSPMETAFILEPICT';
CF_DSPENHMETAFILE:
Result := 'CF_DSPENHMETAFILE';
CF_PRIVATEFIRST:
Result := 'CF_PRIVATEFIRST';
CF_PRIVATELAST:
Result := 'CF_PRIVATELAST';
CF_GDIOBJFIRST:
Result := 'CF_GDIOBJFIRST';
CF_GDIOBJLAST:
Result := 'CF_GDIOBJLAST';
else
Result := IntToStr(Value);
end;//case
ShowMessage(Result);
end;
var
i: Integer;
begin
for i := 0 to 1100 do
if Clipboard.HasFormat(i) then
ShowMessageCF(i);
end;
1100までループさせているのは最後のCF_GDIOBJLASTが
1023で定義されていたからです。
FormにButton1を貼り付けて以下のように実装してみてください。
procedure TForm1.Button1Click(Sender: TObject);
begin
ClipFormat;
end;
ボタンを押すと現在のクリップボードデータのフォーマットがShowMessageで表示されます |
|