ページ 11

EDITBOXの座標取得 + 検索

Posted: 2006年12月12日(火) 16:37
by MML
こんにちは。ゆちボンです。

EDITBOXで検索をしたいのですが、
どのメッセージをどんな風に送ればいいのかがわかりません。

あと、EDITBOXでカーソル座標を取得したいのですが、「何文字目」ではなく、
左上から横に何ドット(X)たてに何ドット(Y)を取得したいのですがどうすればいいのでしょうか?

現在、EDITBOXとGDIを使って色分けエディタを作っているので、
ぜひ知りたいです。
よろしくお願いします。

Posted: 2006年12月12日(火) 22:59
by 高信期
GetCaretPos関数で取得できます。
格納された座標はクライアント座標なので気をつけてください。

Posted: 2006年12月13日(水) 17:15
by MML
> GetCaretPos関数で取得できます。
> 格納された座標はクライアント座標なので気をつけてください。
あ、そういう方法があったのですね!
ありがとうございます!!

Posted: 2006年12月20日(水) 17:46
by MML
すいません、もうひとつ教えてください。
EDITBOXで検索する際、送信するメッセージはなんですか?
「EM_」ってついていると思うのですが...

Posted: 2006年12月20日(水) 20:45
by 7
> すいません、もうひとつ教えてください。
> EDITBOXで検索する際、送信するメッセージはなんですか?
> 「EM_」ってついていると思うのですが...
皆さんがどうやっているのか分かりませんけど自分は、GetWindowText()関数でエディットボックスに設定されている文字列を取得し、その文字列に対し検索したい文字列を検索するようにしています。
独自に検索アルゴリズムを考えるのが面倒くさかったら標準装備されてるInStr(ですっけ?)とかいう関数があるのでそれを使うと簡単です。

Posted: 2006年12月21日(木) 16:20
by MML
> 皆さんがどうやっているのか分かりませんけど自分は、GetWindowText()関数でエディットボックスに設定されている文字列を取得し、その文字列に対し検索したい文字列を検索するようにしています。
> 独自に検索アルゴリズムを考えるのが面倒くさかったら標準装備されてるInStr(ですっけ?)とかいう関数があるのでそれを使うと簡単です。
InStrでやると、選択したときに、ずれるんですよ。
何かよい方法があればお教えください。

Posted: 2006年12月21日(木) 17:48
by 7
> InStrでやると、選択したときに、ずれるんですよ。
> 何かよい方法があればお教えください。
InStr関数の戻り値は1から始まるのでズレるんだと思います。戻り値を-1してみてその値が-1ならエラーになると考え直してください。

昔書いた文字列検索関数を見つけたのですが素晴らしく汚くてコメントも書いてないし実装したときの記憶も淡くなってて移植に手こずってます...。

Posted: 2006年12月21日(木) 17:56
by MML
> InStr関数の戻り値は1から始まるのでズレるんだと思います。戻り値を-1してみてその値が-1ならエラーになると考え直してください。
>
> 昔書いた文字列検索関数を見つけたのですが素晴らしく汚くてコメントも書いてないし実装したときの記憶も淡くなってて移植に手こずってます...。
すいません、言い方を間違えました。
EDITBOXでは内部で「文字数」で扱っているのでずれます。
InStrはバイト数で返ってくるので...
だから、EM_GETSELを送るとずれたんだと思います。
着色は高速にしたいので...なにか言い方法があればお教えください。

Posted: 2006年12月21日(木) 18:16
by OverTaker
EM_FINDTEXTでどうでしょうか?以下のサイトが参考になるかもしれません。
http://yokohama.cool.ne.jp/chokuto/urawaza/message/

Posted: 2006年12月21日(木) 18:24
by MML
> EM_FINDTEXTでどうでしょうか?以下のサイトが参考になるかもしれません。
> http://yokohama.cool.ne.jp/chokuto/urawaza/message/
ありがとうございます。
でも、EDITBOXで使用できるのでしょうか?
今から試してみます。

Posted: 2006年12月21日(木) 19:20
by 7
> すいません、言い方を間違えました。
> EDITBOXでは内部で「文字数」で扱っているのでずれます。
> InStrはバイト数で返ってくるので...
???
EDITBOXっていうのは自作したエディットボックスでしょうか???

普通のエディットボックスで以下のコードを実行した場合もズレますか?

EditBox1に対照文字列を入力して、EditBox2に検索文字列を入力。
CommandButton1かなにかを押したときに以下のコードが実行されるようにしてください。

Posted: 2006年12月22日(金) 21:09
by MML
> EDITBOXっていうのは自作したエディットボックスでしょうか???
いえ、RADで投入できる普通のエディットボックスです。
着色は単純にDCを使って上から重ねるという単純な方法を
使用しようと思っているだけです。

Posted: 2006年12月22日(金) 22:36
by 7
> いえ、RADで投入できる普通のエディットボックスです。
なら、前も書きましたけどInStr関数の戻り値から-1にした数値を始点、InStr関数の戻り値+検索したい文字列の長さ-1を終点にEM_GETSELで選択するだけでズレはなくなると思うんですけど...。
ズレずにちゃんと選択されてるのは自分の環境だけなんでしょうか...?

Posted: 2006年12月22日(金) 22:46
by 雷電
僕の環境でもちゃんと動いています。
これは、あるボタンを押したときに起こるイベントのコードです。
参考にしてください。
最近、文字列検索と文字列置換えの機能を追加したばかりです。

Posted: 2006年12月29日(金) 08:07
by MML
7さん、雷電さん、ありがとうございます。
ちゃんとうごいています。

本当にありがとうございました。