EDITBOXの座標取得 + 検索

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
メッセージ
作成者
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

EDITBOXの座標取得 + 検索

#1 投稿記事 by MML »

こんにちは。ゆちボンです。

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

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

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

#2 投稿記事 by 高信期 »

GetCaretPos関数で取得できます。
格納された座標はクライアント座標なので気をつけてください。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#3 投稿記事 by MML »

> GetCaretPos関数で取得できます。
> 格納された座標はクライアント座標なので気をつけてください。
あ、そういう方法があったのですね!
ありがとうございます!!
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#4 投稿記事 by MML »

すいません、もうひとつ教えてください。
EDITBOXで検索する際、送信するメッセージはなんですか?
「EM_」ってついていると思うのですが...
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県

#5 投稿記事 by 7 »

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

#6 投稿記事 by MML »

> 皆さんがどうやっているのか分かりませんけど自分は、GetWindowText()関数でエディットボックスに設定されている文字列を取得し、その文字列に対し検索したい文字列を検索するようにしています。
> 独自に検索アルゴリズムを考えるのが面倒くさかったら標準装備されてるInStr(ですっけ?)とかいう関数があるのでそれを使うと簡単です。
InStrでやると、選択したときに、ずれるんですよ。
何かよい方法があればお教えください。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県

#7 投稿記事 by 7 »

> InStrでやると、選択したときに、ずれるんですよ。
> 何かよい方法があればお教えください。
InStr関数の戻り値は1から始まるのでズレるんだと思います。戻り値を-1してみてその値が-1ならエラーになると考え直してください。

昔書いた文字列検索関数を見つけたのですが素晴らしく汚くてコメントも書いてないし実装したときの記憶も淡くなってて移植に手こずってます...。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#8 投稿記事 by MML »

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

#9 投稿記事 by OverTaker »

EM_FINDTEXTでどうでしょうか?以下のサイトが参考になるかもしれません。
http://yokohama.cool.ne.jp/chokuto/urawaza/message/
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#10 投稿記事 by MML »

> EM_FINDTEXTでどうでしょうか?以下のサイトが参考になるかもしれません。
> http://yokohama.cool.ne.jp/chokuto/urawaza/message/
ありがとうございます。
でも、EDITBOXで使用できるのでしょうか?
今から試してみます。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県

#11 投稿記事 by 7 »

> すいません、言い方を間違えました。
> EDITBOXでは内部で「文字数」で扱っているのでずれます。
> InStrはバイト数で返ってくるので...
???
EDITBOXっていうのは自作したエディットボックスでしょうか???

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

EditBox1に対照文字列を入力して、EditBox2に検索文字列を入力。
CommandButton1かなにかを押したときに以下のコードが実行されるようにしてください。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#12 投稿記事 by MML »

> EDITBOXっていうのは自作したエディットボックスでしょうか???
いえ、RADで投入できる普通のエディットボックスです。
着色は単純にDCを使って上から重ねるという単純な方法を
使用しようと思っているだけです。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県

#13 投稿記事 by 7 »

> いえ、RADで投入できる普通のエディットボックスです。
なら、前も書きましたけどInStr関数の戻り値から-1にした数値を始点、InStr関数の戻り値+検索したい文字列の長さ-1を終点にEM_GETSELで選択するだけでズレはなくなると思うんですけど...。
ズレずにちゃんと選択されてるのは自分の環境だけなんでしょうか...?
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県

#14 投稿記事 by 雷電 »

僕の環境でもちゃんと動いています。
これは、あるボタンを押したときに起こるイベントのコードです。
参考にしてください。
最近、文字列検索と文字列置換えの機能を追加したばかりです。
===============================
MyHomePage;; raiden.no.land.to/
===============================
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#15 投稿記事 by MML »

7さん、雷電さん、ありがとうございます。
ちゃんとうごいています。

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