文字カウント

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
I am 馬鹿

文字カウント

#1 投稿記事 by I am 馬鹿 »

*icrosoft社のWo*dやディスカバーソフトのThe Text のように
文字カウントの機能を入れたいのですがどうすればいいでしょうか。

ソースを教えていただけませんか。

情報

MainWnd の EditBox1 の文字数をカウント。 (バイト数ではなく)
カウントした文字数を別のWindow (例 MainWnd2 )のEditBox1 に表示する。

お願いいたします。
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

Re: 文字カウント

#2 投稿記事 by Sinryow »

SendMessage・SendDlgItemMessageのUNICODE版であるSendMessageW・SendDlgItemMessageW関数を使うのがよいかと思います。
Windows 95あたりではうまく動かない可能性がありますが・・・

コード: 全て選択

Declare Function SendMessageW Lib "user32" _
   (hWnd As HWND, _
    Msg As DWord, _
    wParam As WPARAM, _
    lParam As LPARAM) As LONG_PTR

Declare Function SendDlgItemMessageW Lib "user32" _
   (hDlg As HWND, _
    nIDDlgItem As Long, _
    Msg As DWord, _
    wParam As WPARAM, _
    lParam As LPARAM) As LONG_PTR

Dim nChars As DWord, bufChars As String
nChars = SendDlgItemMessageW(hMainWnd, EditBox1, WM_GETTEXTLENGTH, 0, 0)
bufChars = Str$(nChars)
SetDlgItemText(hMainWnd, Static1, StrPtr(bufChars))
※EditBox1の文字数を取得し、Static1にセットするとした。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
卓漏
記事: 32
登録日時: 2005年11月30日(水) 06:38
お住まい: 静岡県の田舎町

#3 投稿記事 by 卓漏 »

すでに「MainWnd2」が表示されているときを想定して作りました。
「MainWnd」の「EditBox1」に文字が入力されると、
リアルタイムに「MainWnd2」の「EditBox1」に文字数が表示されるようになっています。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: 文字カウント

#4 投稿記事 by 7 »

> 文字数をカウント。 (バイト数ではなく)
situmon
記事: 35
登録日時: 2005年5月31日(火) 09:39
お住まい: 岐阜

#5 投稿記事 by situmon »

>7さん
この関数だと、たとえば2バイト開始コードが2つ並んでしまうような文字が含まれると
正確にカウントできないと思いますが・・・
やるのであれば以下のようなコードになると思います。

コード: 全て選択


Function mb_lstrlen(ByVal lpString As LPCSTR) As Long 
Dim cnt=0 As Long 
    While lpString[cnt]<>0 
        If IsDBCSLeadByte(lpString[cnt]) = TRUE Then 
             cnt++
        End If 
        mb_lstrlen++
        cnt++ 
    Wend 
End Function 
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#6 投稿記事 by 7 »

> この関数だと、たとえば2バイト開始コードが2つ並んでしまうような文字が含まれると
> 正確にカウントできないと思いますが・・・
マジっすか( ̄□ ̄ノ;)ノ
2バイト文字の先頭バイトが2つ並んでる文字の存在すら知りませんでしたし、並んでたとしても後ろが2バイト文字の先頭バイトで、一つ前にも2バイト文字の先頭バイトがある場合、 FALSE を返してくれるんじゃないだろうかと勝手に妄想してました...。
返信する