検索をABのエディターのようにしたい

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 検索をABのエディターのようにしたい

by 雷電 » 2006年10月26日(木) 22:04

できました。
EditBox1の「常に選択を表示」にチェックしていませんでした。

7さん、コードは私の勘違いです・・・お許しください

今回はどうもありがとうございました。

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
このままだと、一番初めに検索された文字列しか表示されないので、Do Loopで検索しなおさないといけないんですね・・・

by 7 » 2006年10月26日(木) 08:08

> この部分を改造なされたんでしょ?
> こうすると、検索する元の文字列が、
> "aaiiuueeoo"
> だとして、iiを検索する場合、InStr関数は、3を返します。
> そして、7さんのコードだと、最終的には2を返すんですね。
> だから、EM_SETSELメッセージでセットするとなると2~4となってしまいます。
それで良いはずです。EM_SETSELwParamに渡すべき値は0から始まります。InStr関数の戻り値は1からなので、-1にしています。

SetFocus()関数でフォーカス与えれば反映されるはずなんですけど、なんででしょうね...。我が家では普通に選択されるんですけど。
エディットボックスの「常に選択を表示」にチェック入れるとどうなりますか?

by マティ » 2006年10月25日(水) 23:18

極論ですが・・・
検索結果を表示したら・・・ってのが7さんの話でした。

私が話を難しくしてしまったのですが・・・
根本的には帰ってきた数値を補正すると、想定の機能を実現できると言いたかったのです。

説明不足で迷惑をかけた事をお詫びします。

by 雷電 » 2006年10月25日(水) 22:48

やはり無理です・・・

コード: 全て選択

Num=InStr(1,buffer,FindString)-1 
MOJISU = Num + Len(FindString)
この部分を改造なされたんでしょ?
こうすると、検索する元の文字列が、
"aaiiuueeoo"
だとして、iiを検索する場合、InStr関数は、3を返します。
そして、7さんのコードだと、最終的には2を返すんですね。
だから、EM_SETSELメッセージでセットするとなると2~4となってしまいます。

しかし、EM_SETSELってどうやって使うんでしょうか・・・
EM_のなかで一番理解しにくいメッセージです

by 7 » 2006年10月25日(水) 08:08

> GetDlgItemTextStrってバッファーを渡す必要があると思っていたのですが、
> String型で使用する場合に、初期化を行わなくても大丈夫なのでしょうか?
GetDlgItemTextStr関数はたしかイグトランスさんが作った関数で、その辺りの処理、大丈夫だったはずです。
String型を渡す場合、初期化を必要とするのはたしかGetDlgItemText()関数ですね。

> 余談、SendDlgItemMessageで検索結果を表示するのはナイスアドバイスだと思います。
これは主要なコントロールのハンドルを取得しておいてSendMessage()関数を使った方が良いと思うんですけど、GetDlgItemTextStr関数に合わせてSendDlgItemMessage()関数にしてみました。

by マティ » 2006年10月24日(火) 22:33

さんに質問です GetDlgItemTextStrってバッファーを渡す必要があると思っていたのですが、
String型で使用する場合に、初期化を行わなくても大丈夫なのでしょうか?

余談、SendDlgItemMessageで検索結果を表示するのはナイスアドバイスだと思います。
あとは、見つからなかった場合の処理も必要だと・・・
雷電さん、InStr関数の戻り値で判断できるので、がんばってみて下さい。

by 7 » 2006年10月24日(火) 22:24

こうした場合はどうでしょう?

by 雷電 » 2006年10月24日(火) 22:10

コード: 全て選択

Sub FindStr_CommandButton1_Click()
	Dim FindString As String
	Dim buffer As String
	Dim MOJISU As Long
	Dim Num As Long

	GetDlgItemTextStr(hMainWnd,EditBox1,buffer)
	GetDlgItemTextStr(hFindStr,ComboBox1,FindString)

	Num=InStr(1,buffer,FindString)
	MOJISU = Num + lstrlen(FindString)-1
	
	SendDlgItemMessage(hMainWnd,EditBox1,EM_SETSEL,Num,MOJISU)
	SetFocus(GetDlgItem(hMainWnd,EditBox1))
End Sub
直後に入れてみましたが、やはりダメです

by 7 » 2006年10月24日(火) 21:54

> EM_SETSELを使おうとしたのですが、できませんでした。
EM_SETSELの直後、SetFocus()関数でフォーカスを与えてみてください。

by 雷電 » 2006年10月24日(火) 21:44

初歩的な質問かもしれませんが、文字列を選択するには、どうすればいいでしょう?
EM_SETSELを使おうとしたのですが、できませんでした。

by 雷電 » 2006年10月24日(火) 21:02

Indigo Visualistさんありがとうございます。
投稿してから、あれ?これって文字列の長さをたしたらいいだけだ・・・
と、おもってしまいました・・・
トピックを消してしまうと、いろんな人の意見が聞けなくなるので、一応残しておきました。
今回はどうもありがとうございました。

他に聞きたいことがあったらまたこのトピックで質問したいと思います。

by Indigo Visualist » 2006年10月23日(月) 23:06

「始めの文字の位置+キー文字列の長さ-1」ではいけませんか?
質問を勘違いしていたらすみません。

コード: 全て選択

Dim str As String, keystr As String
Dim pstart As Long, pend As Long
str="--RAIDEN--" 
keystr="RAIDEN"
pstart=InStr(1,str,keystr)
pend=pstart+lstrlen(keystr)-1

検索をABのエディターのようにしたい

by 雷電 » 2006年10月23日(月) 20:44

”検索&置き換えのウィンドウ”から引き続き質問ですが、InStr関数は戻り値を初めの文字から何文字目というものしか返しませんが、終わるときは何文字目かを取得するにはどうしたらいいでしょう?

例えば・・・

コード: 全て選択

Dim A As String
A="--RAIDEN--"
InStr(A,"RAIDEN")
こうした場合は、Rが始まる3文字目なので、3が返ってくるのですが、終わりのNを取得するにはどうしたらいいでしょう?
調べ方が悪いのかもしれませんが、そのような関数が見つかりません。

ページトップ