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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

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

#1 投稿記事 by 雷電 »

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

例えば・・・

コード: 全て選択

Dim A As String
A="--RAIDEN--"
InStr(A,"RAIDEN")
こうした場合は、Rが始まる3文字目なので、3が返ってくるのですが、終わりのNを取得するにはどうしたらいいでしょう?
調べ方が悪いのかもしれませんが、そのような関数が見つかりません。
===============================
MyHomePage;; raiden.no.land.to/
===============================
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

#2 投稿記事 by Indigo Visualist »

「始めの文字の位置+キー文字列の長さ-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
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#3 投稿記事 by 雷電 »

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

他に聞きたいことがあったらまたこのトピックで質問したいと思います。
===============================
MyHomePage;; raiden.no.land.to/
===============================
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#4 投稿記事 by 雷電 »

初歩的な質問かもしれませんが、文字列を選択するには、どうすればいいでしょう?
EM_SETSELを使おうとしたのですが、できませんでした。
===============================
MyHomePage;; raiden.no.land.to/
===============================
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#5 投稿記事 by 7 »

> EM_SETSELを使おうとしたのですが、できませんでした。
EM_SETSELの直後、SetFocus()関数でフォーカスを与えてみてください。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#6 投稿記事 by 雷電 »

コード: 全て選択

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
直後に入れてみましたが、やはりダメです
===============================
MyHomePage;; raiden.no.land.to/
===============================
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#7 投稿記事 by 7 »

こうした場合はどうでしょう?
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#8 投稿記事 by マティ »

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

余談、SendDlgItemMessageで検索結果を表示するのはナイスアドバイスだと思います。
あとは、見つからなかった場合の処理も必要だと・・・
雷電さん、InStr関数の戻り値で判断できるので、がんばってみて下さい。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#9 投稿記事 by 7 »

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

> 余談、SendDlgItemMessageで検索結果を表示するのはナイスアドバイスだと思います。
これは主要なコントロールのハンドルを取得しておいてSendMessage()関数を使った方が良いと思うんですけど、GetDlgItemTextStr関数に合わせてSendDlgItemMessage()関数にしてみました。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#10 投稿記事 by 雷電 »

やはり無理です・・・

コード: 全て選択

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

しかし、EM_SETSELってどうやって使うんでしょうか・・・
EM_のなかで一番理解しにくいメッセージです
===============================
MyHomePage;; raiden.no.land.to/
===============================
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#11 投稿記事 by マティ »

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

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

説明不足で迷惑をかけた事をお詫びします。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#12 投稿記事 by 7 »

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

SetFocus()関数でフォーカス与えれば反映されるはずなんですけど、なんででしょうね...。我が家では普通に選択されるんですけど。
エディットボックスの「常に選択を表示」にチェック入れるとどうなりますか?
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#13 投稿記事 by 雷電 »

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

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

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

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
このままだと、一番初めに検索された文字列しか表示されないので、Do Loopで検索しなおさないといけないんですね・・・
===============================
MyHomePage;; raiden.no.land.to/
===============================
返信する