選択文字列の位置

解決


ZORO  URL  2001-04-21 06:17:31  No: 74174  IP: [192.*.*.*]

毎度毎度お世話になります。m(._.)m
テキストボックスのMultiLineをTrueにして、複数行になるように文字列を挿入します。(スクロールバーは垂直のみ)
InStr関数でテキストボックスの下の方にある文字列を検索し、その文字列を選択状態にします。
ここでこの選択された文字が、スクロールしないと見えない位置にあるとき、見えるように自動的にスクロールさせたいのですが、選択された文字列の位置などはわかるものなのでしょうか?
宜しくお願いします。

編集    削除
PAPY  2001-04-21 21:02:45  No: 74175  IP: [192.*.*.*]

SendMessageを使えば出来ます。
確かこれにサンプルが入っていたと思います。
http://www.vector.co.jp/soft/win95/prog/se154743.html

編集    削除
MADIA  URL  2001-04-22 02:16:10  No: 74176  IP: [192.*.*.*]

>PAPY
テキストボックスのメソッドでなかったけっ?

編集    削除
ZORO  URL  2001-04-24 02:36:42  No: 74177  IP: [192.*.*.*]

PAPYさん、解決できました。大変有り難うございます。
ところで作ってみて気が付いたんですけど、InStr関数の上方向検索って機能はないのでしょうか?

編集    削除
たかみちえ  URL  2001-04-25 02:20:41  No: 74178  IP: [192.*.*.*]

>  ところで作ってみて気が付いたんですけど、InStr関数の上方向検索って機能はないのでしょうか?
  たしかどこかにあったと思います。
  って、忘れちゃったんでイミないんですけど…^^;
または、別の関数を使う方法も…。
"花ちゃんのホームページ"(アドレスは要らないですよね)にあったような気がします。

  ちなみに、リッチテキストボックスなら、(テキストボックスでは見確認ですけど)
Findっていうメソッド(そのなのとおり検索する)とかもあります。
よく使うコントロールのは、一度オブジェクトブラウザで見ておくと、
けっこう見たことない命令がわんさと(^^;)入ってることがあります。
プロパティで設定できない隠しプロパティもありましたよ。たしか。

編集    削除
たかみちえ  2001-06-03 08:13:44  No: 74179  IP: [192.*.*.*]

自作関数、上に向かって検索します。えっへん。
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
Startには、検索開始ポイント。.SelStart -1くらい
Baseは、検索目標のテキスト、InstrのString1
Searchは、同じくString2
compareは、言うまでもなく^^;
BaseやSearchがナル文字だったり、0文字だったり、とにかくおかしいと、
0を返します。
内部でエラーが起きても同じです。
そうでなければ、一つ前に見つけた位置を返します。
エラーハンドリングを除けばほぼ3行の短いコードですけど、
ちゃんとつかえます。長いテキストでは確認してませんけど。
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
Public Function UInstr(Start As Long, Base As String, Search As String, Optional ByVal compare As VbCompareMethod = vbBinaryCompare) As Long
    On Error GoTo 1: If Len(Base) = 0 Or Len(Search) = 0 Or Start < 0 Or Len(Search) >= Len(Base) Or Base = vbNullString Or Search = vbNullString Then GoTo 1
    Dim i As Integer
    For i = Start To 1 Step -1
        If Mid(Base, i, Len(Search)) = Search Then UInstr = i: Exit Function
    Next
1   UInstr = 0
End Function

けっこういまさらかもしれないけど…^^;

編集    削除
たかみちえ  2001-06-04 06:55:14  No: 74180  IP: [192.*.*.*]

上のじゃcompareを指定したいみがないですね^^;
と言うわけで修正です。
Public Function UInstr(start As Long, Base As String, Search As String, Optional ByVal compare As VbCompareMethod = vbBinaryCompare) As Long
    On Error GoTo 1: If Len(Base) = 0 Or Len(Search) = 0 Or start < 0 Or Len(Search) >= Len(Base) Or Base = vbNullString Or Search = vbNullString Then GoTo 1
    Dim I As Integer
    For I = start To 1 Step -1
        If StrComp(Mid(Base, I, Len(Search)), Search, compare) = 0 Then UInstr = I: Exit Function
    Next
1   UInstr = 0
End Function

編集    削除
ZORO  URL  2001-06-05 00:25:16  No: 74181  IP: [192.*.*.*]

たかみちえさん、どうもです。早速参考にさせて貰いました。
ただ1文字ずつの検索なので、処理速度的にユーザーが納得行くかどうか検証中です。

編集    削除
たかみちえ  2001-06-05 00:43:55  No: 74182  IP: [192.*.*.*]

>  ただ1文字ずつの検索なので、処理速度的にユーザーが納得行くかどうか検証中です。
  わたしの環境では早かったです。
(おんぷ村フリーソフト屋にある、あしKeyのあしKey.txtで、
"Key"を検索してみました、結果はInstrと同じくらいだったです)
わたしの環境は、同フリーソフト屋の下、作成環境を見てください、
VBを起動するとリソースを大量に消耗するので、
あの半分くらいと思うとちょうどいいかもです。

編集    削除