指定したウィンドウに、EM_GETSELTEXTを送ってみたんですけど、
結果が返ってきません。
実験にTeraPadのTEditorと、K2EditorのTK2Editを対象にしてみたんですけど、
両方とも、失敗してしまいました。
こんなふうに使ってます。
SendMessage mClong, EM_GETSELTEXT, 0, ByVal str
(mClongにはそれぞれのハンドル、
strには65535文字のバッファを作っておいたんですけど…)
ちなみに、WM_GETTEXTと、EM_REPLACESELを、同じ方法で送ったんですけど、
それでは問題なかったので、ハンドルを取得する方法にはまちがいがないはずなんですけど…。
>実験にTeraPadのTEditorと、K2EditorのTK2Editを対象にしてみたんですけど、
ここにあげた2つの何か(コントロール?)はEM_GETSELTEXTの
処理をインプリメントしているのでしょうか?
している…はずです。
TeraPadは、そもそも外部ツールがつくられることを前提にできているので、
EM類の定数は全てカバーしているはずです。
…とはいえ、ツール用モジュール(C,Delphi,HSP用)を公開している人はいても、
EM_GETSELTEXTが書いてなかったのは"?"でしたけど…。
でも現に、Terapad用正規表現検索ツールなどの中では、
EM_GETSELTEXT(多分)を使っているし…。
>EM類の定数は全てカバーしているはずです。
EM類といっても、たとえば、
EM_REPLACESEL は Edit Control 用メッセージなのに対し、
EM_GETSELTEXT は Rich Edit Control 用メッセージです。
「全てカバーしている」とどこかに明言してあるのでないのなら、
とりあえずメーカー(製作者)に対応メッセージを問い合わせては
どうですか?
あ、返信がもう着ちゃった…。
追加ですけど、同じことを自作ソフト(間違いなくRichTextBox)に、
やってみたんですけど、
そうすると、(送られたがわのソフトが)強制終了させられてしまいました。
同じくVBで作られた、近くにあったソフト(RichTextBox使用)に試してみたら、
結果は同じでした。
ちなみに、わたしのソフトでは、サブクラス化などはしていません。
WM_GETTEXTは送れたので、取得の仕方は間違ってなかったです。
自分のミスのせいだと思うんですけど…。
'mlongに相手親ウィンドウのハンドルを格納
If mlong = 0 Then Exit Function
mClong = FindWindowEx(mlong, 0, ChildClassStr, vbNullChar)
'ChildClassStrには、子ウィンドウクラス名
If mClong = 0 Then Exit Function
Dim str As String
str = String$(65535, vbNullChar)
SendMessage mClong, EM_GETSELTEXT, 0, ByVal str
’strに選択文字が取得できるはず…。
重大なミスをおかしてるんでしょうか?
とりあえず、TeraPadの作者さんには、
自作ソフトで点検したあと、だめならば聞いてみます。
ちなみに、TeraPad(http://www2s.biglobe.ne.jp/~t-susumu/toclip/)はDelphi製のようです。
K2Editor(http://web.kyoto-inet.or.jp/people/koyabu/)は、明言されていないものの、多分Delphi製です。
(ヘルプの中に、同じ人が、スペシャルサンクスのようなところに乗っていたので)
ツイート | ![]() |