エディットボックスの行数・文字数を取得         <TOP>


マルチラインエディットボックスの行数を取得します。

SendMessage ウィンドウにメッセージを送信

EM_GETLINECOUNT(&HBA) マルチラインエディットボックスの行数を取得

EM_LINEFROMCHAR(&HC9) 文字インデックスから行番号を取得する


カーソル位置を直接取得(GETLINECOUNT)、インデックスから行番号を取得(LINEFROMCHAR)
 

文字数取得を加えました。(改行は半角換算2文字加算されます)

 

'================================================================
'= 行数・文字数を取得する
'=    (GetLineCount.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define EM_GETLINECOUNT &HBA            'MLE内の行数を取得する
#define EM_LINEINDEX &HBB               'MLEの行の文字インデックスを取得する
#define EM_LINELENGTH &HC1              'MLE内の行の長さを取得する

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared Text2 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Edit1_Change edecl ()
Sub Edit1_Change()
    Var lineCount As Long
    Var ChrsUpToLast As Long
    Var DocSize As Long

  
    lineCount = Api_SendMessage(Edit1.Gethwnd, EM_GETLINECOUNT, 0, ByVal 0)
    Text1.SetWindowText Format$(lineCount, "##,###行目")

    ChrsUpToLast = Api_SendMessage(Edit1.GethWnd, EM_LINEINDEX, lineCount - 1, ByVal 0)
    If ChrsUpToLast = 0 Then
        DocSize = Api_SendMessage(Edit1.GethWnd, EM_LINELENGTH, ChrsUpToLast, ByVal 0)
    Else If ChrsUpToLast < 65000 Then
        DocSize = Api_SendMessage(Edit1.GethWnd, EM_LINELENGTH, ChrsUpToLast, ByVal 0) + ChrsUpToLast
    End If
    Text2.SetWindowText Format$(DocSize, "##,###文字")
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End