VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 コマンドボタン関係のメニュー
1.テキストボックスにフォーカスが移動した時にカーソルを指定位置に設定
2.テキストボックスに数値しか入力出来ないように制限する
3.フォーカスのあるテキストボックスを視覚化する
4.テキストファイル読み込み表示及びテキストボックスのデータを保存
5.テキストボックスの総行数・現在行・現在桁の取得
6.複数行テキストボックスの指定行の文字列を取得する
7.SendInputV6.dll を使っての Enter キーでのフォーカス移動
8.テキストボックスへの貼り付け防止(DLLを使用しての簡単なサブクラス化)
9.テキストボックスで縦方向中央揃え・下揃え・上揃えをする
10.エクセルファイル(.xls)をテキストボックスに表示及び編集保存する
11.2つのテキストボックスのスクロールの同期を取る改良版
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載しているテキストボックスに関するサンプル


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行目の文字列を取得)
 textbox06_01.gif

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)




このページのトップへ移動します。