EM_GETSELTEXTで選択範囲を取得するには?


たかみちえ  URL  2002-04-04 23:21:05  No: 75473

指定したウィンドウに、EM_GETSELTEXTを送ってみたんですけど、
結果が返ってきません。
実験にTeraPadのTEditorと、K2EditorのTK2Editを対象にしてみたんですけど、
両方とも、失敗してしまいました。

  こんなふうに使ってます。
SendMessage mClong, EM_GETSELTEXT, 0, ByVal str
(mClongにはそれぞれのハンドル、
  strには65535文字のバッファを作っておいたんですけど…)
  ちなみに、WM_GETTEXTと、EM_REPLACESELを、同じ方法で送ったんですけど、
それでは問題なかったので、ハンドルを取得する方法にはまちがいがないはずなんですけど…。


Say  2002-04-05 02:11:58  No: 75474

>実験にTeraPadのTEditorと、K2EditorのTK2Editを対象にしてみたんですけど、

ここにあげた2つの何か(コントロール?)はEM_GETSELTEXTの
処理をインプリメントしているのでしょうか?


たかみちえ  URL  2002-04-05 10:14:35  No: 75475

している…はずです。
  TeraPadは、そもそも外部ツールがつくられることを前提にできているので、
EM類の定数は全てカバーしているはずです。

  …とはいえ、ツール用モジュール(C,Delphi,HSP用)を公開している人はいても、
EM_GETSELTEXTが書いてなかったのは"?"でしたけど…。

  でも現に、Terapad用正規表現検索ツールなどの中では、
EM_GETSELTEXT(多分)を使っているし…。


Say  2002-04-06 00:24:29  No: 75476

>EM類の定数は全てカバーしているはずです。

EM類といっても、たとえば、
EM_REPLACESEL は Edit Control 用メッセージなのに対し、
EM_GETSELTEXT は Rich Edit Control 用メッセージです。

「全てカバーしている」とどこかに明言してあるのでないのなら、
とりあえずメーカー(製作者)に対応メッセージを問い合わせては
どうですか?


たかみちえ  URL  2002-04-06 09:51:06  No: 75477

あ、返信がもう着ちゃった…。

  追加ですけど、同じことを自作ソフト(間違いなく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製です
(ヘルプの中に、同じ人が、スペシャルサンクスのようなところに乗っていたので)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加