[delphi-users:2769] クリップボードを監視して更新されたら貼り付ける処理

602 views
Skip to first unread message

kotto

unread,
Oct 3, 2012, 10:46:13 AM10/3/12
to delphi...@freeml.com
こんにちは。ずいぶんお久しぶりです。稲富です。
クリップボードの制御で困ってしまったので、皆さんのお力を貸してください。

Mr.XRAYさんのページを参考にやってみました。
見たページはこちらです。

http://mrxray.on.coocan.jp/Delphi/plSamples/823_PasteCheck.htm

ソースを貼り付けさせてもらって、WMDrawClipboard(var Message:
TWMDrawClipboard);だけ書き換えました。

クリップボードが書き換えられた時に
Search_Edit.Text:=Clipboard.AsText;

この処理をすると、起動時に

プロジェクト Project1.exeは例外クラス EclipboardException(メッセージ'ク
リップボード アクセスが拒否されました。を開けません')を検出しました。

というエラーが出ます。そして次に

クリップボード アクセスが拒否されました。を開けません。

とでます。

どのように書き換えればいいのでしょうか。よろしくお願いします。



こちらが追加したソースです。

procedure TMain_Form.FormCreate(Sender: TObject);
begin
NextWindow := SetClipboardViewer(Handle);
end;

procedure TMain_Form.FormDestroy(Sender: TObject);
begin
ChangeClipboardChain(Handle, NextWindow);
end;


procedure TMain_Form.WMChangeCBChain(var Message: TWMChangeCBChain);
begin
if (Message.Remove = NextWindow) then begin
NextWindow := Message.Next;
Message.Result := 0;
end else begin
SendMessage(NextWindow, WM_CHANGECBCHAIN, Message.Remove, Message.Next);
end;
end;


//このprocedureを書き換えました。

procedure TMain_Form.WMDrawClipboard(var Message: TWMDrawClipboard);
begin
if not OpenClipboard(Handle) then Exit;

try
//これを追加すると実行時にエラーが出る。
Search_Edit.Text:=Clipboard.AsText;

finally
CloseClipboard;
end;

//次のクリップボードビューワウィンドウにメッセージを送る
SendMessage(NextWindow, WM_DRAWCLIPBOARD, 0, 0);
end;


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
志士達を率いて熱き時代を駆け抜けろ!【幕末魂】
http://ad.freeml.com/cgi-bin/sa.cgi?id=iV8rP
------------------------------------------------------[freeml byGMO]--

Mr.XRAY

unread,
Oct 3, 2012, 11:36:09 PM10/3/12
to delphi...@freeml.com
【[delphi-users:2769] クリップボードを監視して更新されたら貼り付ける処理
】 へのレスです.

こんにちは.Mr.XRAYです.

>リップボード アクセスが拒否されました。を開けません')を検出しました。

少し記事に不備があったようですので,修正しておきました.
以下のコードを試してみてください.

var
MyHandle : THandle;
begin
ClipBoard.Open;
if Clipboard.HasFormat(CF_TEXT) then begin
MyHandle := Clipboard.GetAsHandle(CF_TEXT);
try
Memo1.Text := Clipboard.AsText;
finally
GlobalUnlock(MyHandle);
end;
end;
Clipboard.Close;


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
たくさんの女の子モンスターを仲間にしよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iVFaH
------------------------------------------------------[freeml byGMO]--

kotto

unread,
Oct 3, 2012, 11:45:20 PM10/3/12
to delphi...@freeml.com
こんにちは、稲富です。

Mr.XRAY様、有り難うございます。
ばっちり動きました(^^)

今後ともよろしくお願いします。
MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iVFl2
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages