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.その他、当サイト内に掲載しているテキストボックスに関するサンプル


5.テキストボックスの総行数・現在行・現在桁の取得
1.テキストボックスの総行数・現在行・現在桁の取得
2.
3. 
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:                  
使用 API:SendMessage
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.テキストボックスの総行数・現在行・現在桁の取得
別途、テキストボックスにはデータを読み込んでおいて、Text1.MultiLine = True と Text1.ScrollBars = vbBoth に設定しておいて下さい。

Option Explicit   'SampleNo=076  2002.05.16

'指定のウィンドウにメッセージを送る(P750)
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
'複数行テキストボックスにおいてテキストの行数を取得する(P799)
Private Const EM_GETLINECOUNT = &HBA
'  〃    指定行の先頭の文字インデックスを取得する(P803)
Private Const EM_LINEINDEX = &HBB
'  〃    指定の文字インデックスを含む行インデックスを取得(P802)
Private Const EM_LINEFROMCHAR = &HC9
'選択されたテキストの最初と最後の文字インデックスを取得する(P801)
Private Const EM_GETSEL = &HB0

Private Function fGetCursorPosition(ByRef txtBox As TextBox) As Long()
  Dim bytArray() As Byte
  Dim myPos(2)  As Long
  Dim n     As Long
  myPos(0) = SendMessage(txtBox.hwnd, EM_GETLINECOUNT, 0&, 0&)    '総行数を取得する
  myPos(1) = SendMessage(txtBox.hwnd, EM_LINEFROMCHAR, -1&, 0&) + 1  '現在行(カーソル位置の)を取得する
  myPos(2) = SendMessage(txtBox.hwnd, EM_LINEINDEX, -1, 0)  '現在行の先頭位置までのバイト数(Unicode)を取得
  If myPos(2) = 0 Then
    myPos(2) = txtBox.SelStart + 1     '現在桁を求める
  Else
    ReDim bytArray(0 To myPos(2))      '行の先頭までの文字数を求める
    n = Len(StrConv(LeftB$(StrConv(txtBox.Text, vbFromUnicode), myPos(2)), vbUnicode))
    myPos(2) = (txtBox.SelStart + 1) - n  '現在桁を求める
  End If
  fGetCursorPosition = myPos
End Function

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
'カーソル位置の文字数(行の先頭から桁数)を取得
  Dim myPos As Variant
  myPos = fGetCursorPosition(Text1)
  Label1.Caption = " 総行数 : " & myPos(0) & "   現在行 : " & myPos(1) & "   現在桁 : " & myPos(2)
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'マウスカーソル位置の文字数(行の先頭から桁数)を取得
  Dim myPos As Variant
  myPos = fGetCursorPosition(Text1)
  Label1.Caption = " 総行数 : " & myPos(0) & "   現在行 : " & myPos(1) & "   現在桁 : " & myPos(2)
End Sub

  上記実行結果
 textbox05_01.gif

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


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


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


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


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


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




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