掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
クリップボードの内容をストリームに書き出すには? (ID:22395)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境:Windows XP SP1 + Delphi5 提示したリンク先のにしのさんのコードを改造し、各フォーマットごとに ストリームにファイルに書き出すようにしてみました。 (一部抜粋) var fName:array[0..127] of Char; //p:PCHAR; ptr:PCHAR; hMem := GetClipboardData(uiFormatId); if hMem <> 0 then begin FillChar(fName, 128, 0); if GetClipboardFormatName(uiFormatId, @fName, 128) > 0 then begin Memo1.Lines.Add(IntToStr(uiFormatId) + ':' + PChar(@fName)); end else begin Memo1.Lines.Add(IntToStr(uiFormatId) + ':てきとうななにか'); end; dwSize := GlobalSize(hMem); if dwSize > 0 then begin fStream := TFileStream.Create(ExtractFilePath(ParamStr(0)) + IntToStr(uiFormatId) + '.dat', fmCreate); ptr := GlobalLock(hMem); fStream.Write(ptr^, dwSize); fStream.Free; GlobalUnlock(hMem); end; end; ここで、PrintScreen 後に実行すると、uiFormatIdは、 CF_BITMAP = 2; CF_DIB = 8; CF_MAX = 17; が取得でき、GlobalSize(hMem) > 0 になったのは、CF_DIB のみ。 Delphi 5 のIDEからソースコードをコピーすると CF_TEXT = 1; CF_OEMTEXT = 7; CF_UNICODETEXT = 13; CF_LOCALE = $10; に加えて、49608:Borland IDE Block Type が含まれており、 全て、GlobalSize(hMem) > 0 になりました。 ちなみに、メタファイルに書き出すと (探せばサンプルは見つかるでしょう) CF_METAFILEPICT = 3; CF_ENHMETAFILE = 14; GlobalSize(hMem) > 0 は、CF_METAFILEPICTのみ。 クリップボードには、そのフォーマットのデータを含むものと、 「このフォーマットを含んでいるよ」みたいなフラグ的なものが あったりするんじゃないかと、勝手に推測してみたりして。。。 ママん さん > if uiFormatId=CF_BITMAP then > showmessage(inttostr(dwSize)); > (略) > と入れてみるとdwSizeが0であることが分かります。 したがって、これもそういう仕様なのでは? などと納得できそうな気もします。 pkenさん > 画像はもとよりテキストですら上手くいかない状況です。 何が、どう、うまくいかないのでしょう?
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.