6.複数行テキストボックスの指定行の文字列を取得する |
1.複数行テキストボックスの指定行の文字列を取得する 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定: 使用 API:SendMessage / CopyMemory その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.複数行テキストボックスの指定行の文字列を取得する |
別途、テキストボックスにはデータを読み込んでおいて、Text1.MultiLine = True と Text1.ScrollBars =
vbBoth に設定しておいて下さい。 Option Explicit 'SampleNo=076 WindowsXP VB6.0(SP5) 2002.05.16 '指定のウィンドウにメッセージを送る(750) Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 'メモリブロックをコピーする(1008) Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _ Destination As Any, Source As Any, ByVal Length As Long) '複数行テキストボックスにおいてテキストの行数を取得する(799) Private Const EM_GETLINECOUNT = &HBA ' 〃 指定行の先頭の文字インデックスを取得する(803) Private Const EM_LINEINDEX = &HBB '指定の行を取得する Private Const EM_GETLINE = &HC4 ' 〃 指定の文字インデックスを含む行インデックスを取得(802) Private Const EM_LINEFROMCHAR = &HC9 ' 〃 指定した行インデックスの一つ前の行までのバイト数を取得(803) Private Const EM_LINELENGTH = &HC1 Private Sub Command1_Click() On Error Resume Next Dim lngMaxRow As Long lngMaxRow = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&) Dim No As Long No = CLng(Text2.Text) If No < 1 Or No > lngMaxRow Or Err.Number Then Beep Exit Sub End If Label1.Caption = fGetLineString(Text1, No - 1) End Sub '指定行の文字列を取得する関数 Private Function fGetLineString(ByRef txtBox As TextBox, ByVal LineNo As Long) As String Dim Buffer() As Byte '取得する文字列のバッファー Dim LineLength As Long '1行当たりのバイト数 Dim LineIndex As Long '指定行の先頭の文字インデックス 'バッファーのサイズ用に1行当たりのバイト数を事前に取得 '指定行の先頭の文字インデックスを取得 LineIndex = SendMessage(txtBox.hwnd, EM_LINEINDEX, LineNo, ByVal 0&) '指定行のバイト数を求める LineLength = SendMessage(txtBox.hwnd, EM_LINELENGTH, LineIndex, ByVal 0&) If LineLength < 1 Then fGetLineString = "" Exit Function '改行のみ場合等は、処理を抜ける End If ReDim Buffer(1 + LineLength) 'バッファーの最初の2バイトに最大バイト数を設定する CopyMemory Buffer(0), LineLength, 2 '半角1バイト・全角2バイト換算での取得バイト数と文字列を取得 '(ここで取得するバイト数は、上記で取得するバイト数と同じになります。) LineLength = SendMessage(txtBox.hwnd, EM_GETLINE, LineNo, Buffer(0)) 'バッファーより指定バイト数分の文字を取り出し Unicode に変換 fGetLineString = StrConv(LeftB$(Buffer, LineLength), vbUnicode) End Function 上記実行結果(12行目の文字列を取得) |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |