掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
別アプリケーションのRichTextの内容をコピーするには (ID:41964)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは. >考えてみますか. と思って,DLLの関数の仕様変更を考えたのですが,やめました.m(_ _)m あくまでも,サンプルなので... >2個または1個のRichEditしかコピーされません。 これは,複数のリッチテキストを連結したいということですよね? でしたら,できません.DLL内の処理が,上書きモードになっていますから. 挿入モードにするには,DLL内の以下の部分を変更します. > //受け取り側に転送 > SetTextRec.flags := ST_DEFAULT; //ここをST_SELECTIONにする > SetTextRec.codepage := CP_ACP; また,2個になってしまうのは,タイミングの問題だと思われます. 前の処理が終了してから,次のフックを開始してください. 単に,StartHookOtherRich関数を呼ぶだけだと,処理が強制的にフック終了され,前の 処理の途中で次の作業に入ってしまいます. 例えば,以下のような感じで. //============================================================================= // 複数のRichEditのリッチテキストを自アプリで受信する //============================================================================= procedure TForm1.Button1Click(Sender: TObject); var hTargetApp : HWND; hTargetRich : HWND; i : Integer; begin if Sender <> nil then begin RichEdit1.Lines.Clear; hCounter := 0; // hTargetAppList (対象の他のアプリのハンドルを格納する TList) // hTargetRichList (対象の他のアプリのRichEditのハンドルを格納するTList); // に各々値を調べて格納する // hCountは自アプリのRichEditに取り込んだ数を記録するカウンタでグローバル変数 end; if hCounter < hTargetAppList.Count then begin hTargetApp := HWND(hTargetRichList[hCounter]); hTargetRich := HWND(hTargetRichList[hCounter]); MsgID := StartHookOtherRich(Handle, RichEdit1.Handle, hTargetApp, hTargetRich); hCounter := hCounter + 1; end; end; //============================================================================= // TApplicationEventsコンポのOnMessageイベント処理 // DLL内の処理終了の通知を受け取ったらフック終了 //============================================================================= procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if Msg.message = MsgID then begin StopHookOtherRich; // 実際にはなくても,内部で自動処理される(単一受信の場合は便利) Button1Click(nil); // 次の処理 end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.