お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"クリップボード履歴の蓄積"




{
準備作業:
 (1)フォームに ListBoxを1ケ置く。

 (2)interface部の uses に Clipbrdを追加する。

 (3)受け取ったメッセージを処理するハンドラーを宣言する。
     private
       { Private 宣言 }
       procedure WmDrawClipboard(var msg: TWmDrawClipboard);
         Message WM_DRAWCLIPBOARD;
       procedure WmChangeCBChain(var mes: TWmChangeCBChain);
         Message WM_CHANGECBCHAIN;
}

var hNext: Handle; //unit共通の変数として宣言(次のウィンドウハンドル)

procedure TForm1.FormCreate(Sender: TObject);
begin
  //メインフォームをクリップボードビューワウィンドウに登録して次のウィンドウハンドルを
  //取得する。
  hNext:=SetClipboardViewer(Handle);
end;

//クリップボードのデータが書き変えられた時の処理
procedure TForm1.WmDrawClipboard(var msg: TWmDrawClipboard);
var
  Tmp:string;
begin
  //次のウィンドウに同じメッセージを送る
  SendMessage(hNext, WM_DRAWCLIPBOARD, 0, 0);

  //クリップボードにテキストデータがあれば取得する。
  if Clipboard.HasFormat(CF_TEXT) then Tmp:= ClipBoard.AsText else Exit;

  //リストボックスに未登録のデータであれば新規に登録する。
  with ListBox1.Items do
    if IndexOf(Tmp)=-1 then if Count= 0 then Add(Tmp) else Insert(0,Tmp);
end;

//クリップボードビューワチェインが変更された時の処理
procedure TForm1.WmChangeCBChain(var mes: TWmChangeCBChain);
begin
//次のウィンドウが削除された場合は、その次のウィンドウのハンドルを取得し直す。
  if mes.Remove = hNext then hNext:= mes.Next;

  //次のウィンドウに同じメッセージを送る
  SendMessage(hNext, WM_CHANGECBCHAIN, mes.Remove, mes.Next);
  mes.Result:= 0;
end;

                ☆ H-Triton (^^) since 1996 ☆
                      Avalon友の会第80008号
     玉でも石でもお預かりします FDELPHIサンプル蔵下足札番

Original document by H-Triton        氏 ID:(QZV11422)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum