掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
別アプリケーションのRichTextの内容をコピーするには (ID:41913)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
別アプリケーションのリッチテキストの内容を書式を保持したままコピーしたく、 下記リンクを参考にしてためしてみましたがSendMessageで 「モジュール'Riched20.dll'のアドレス6565731AでアドレスFFFEF4E8に対する読み込み違反がおきました」と エラーが表示しされてしまいます。 【参考リンク】 RitchEdit内容の一部移動をクリップボードを壊さないで行う https://www.petitmonte.com/bbs/answers?question_id=2752 【ソース】 uses RichEdit;追加 TFormのprivateに変数追加 FStreamRec: TEditStream; FStream: TMemoryStream; function EditStreamCallBack(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): Longint; stdcall; begin try case TEditStreamMode(dwCookie) of esmWrite: begin pcb:= Form1.FStream.Write(pbBuff^,cb); end; esmRead :begin pcb:= Form1.FStream.Read(pbBuff^,cb); end; end; Result:= 0; except Result:= 1; end; end; procedure TForm1.Button1Click(Sender: TObject); var hTargetApp,hRich:HWND; begin hTargetApp := FindWindow(nil,'TargetForm');//別アプリのハンドル取得 hRich := FindWindowEx(hTargetApp,0,'TRichEdit',0);//別アプリのRichEditを取得 FStream.Clear; FStreamRec.dwCookie := Longint(esmWrite); //コピー SendMessage(hRich,EM_STREAMOUT,SF_RTF,Longint(@FStreamRec)); //FStream.Position:=0; //FStreamRec.dwCookie := Integer(esmRead); ////貼り付け //RichEdit1.Perform( EM_STREAMIN,SF_RTF,Longint(@FStreamRec)); end; procedure TForm1.FormCreate(Sender: TObject); begin FStream := TMemoryStream.Create; FStreamRec.pfnCallback := @EditStreamCallBack; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(FStream); end; リンク先のソースを使ってコピーのときだけSendMessageを使用し、 コピー元のリッチテキストのハンドルを渡せばいいのかと思っていたのですができませんでした。 書式を保持して別アプリのリッチテキストの値を取得したらよいのでしょうか? コピー元のアプリケーションはDelphiで作成しています。 【環境】 Windows7 Delphi2007 よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.