文字カウント
バイト数ならばGetWindowTextLength()で取れます(詳細はヘルプ参照)。
純粋に文字数を数えるならば実際にGetWindowText()で文字列を取得し、CharNext()を使うなどしてNULL文字にたどり着くまでカウントします。
後はご自分でコーディングされるとよいでしょう…。
※CharNext()は標準で定義されていません
純粋に文字数を数えるならば実際にGetWindowText()で文字列を取得し、CharNext()を使うなどしてNULL文字にたどり着くまでカウントします。
後はご自分でコーディングされるとよいでしょう…。
※CharNext()は標準で定義されていません
コード: 全て選択
Declare Function CharNext Lib "user32" Alias "CharNextA" (lpsz As *Byte) As *Byte
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
エディットボックス内の文字数を知るにはGetWindowTextLengthを使います。
ステータスバーの内容を指定するにはSB_SETTEXTを送ります。
合わせると次のようになります。
(メインウィンドウのハンドルをhMainWnd,エディットボックスのIDをEditBox1,ステータスバーのIDをID_STATUSとしています)
ステータスバーの内容を指定するにはSB_SETTEXTを送ります。
合わせると次のようになります。
(メインウィンドウのハンドルをhMainWnd,エディットボックスのIDをEditBox1,ステータスバーのIDをID_STATUSとしています)
[ここをクリックすると内容が表示されます]
コード: 全て選択
Dim str As String
str = Str$(GetWindowTextLength(GetDlgItem(hMainWnd, EditBox1))
SendDlgItemMessage(hMainWnd, ID_STATUS, SB_SETTEXT, 0, StrPtr(str))
アドバイスをください。
str = Str$(GetWindowTextLength(GetDlgItem(hMainWnd, EditBox1))
このコードで↓のような警告がでたのですが、解決するにはどうすればいいですか。
'( )'の相互関係が一致しません
このコードで↓のような警告がでたのですが、解決するにはどうすればいいですか。
'( )'の相互関係が一致しません
まずコマンドボタンが押されたらClickイベントが発生します。
つまりこれからのことはClickイベントのハンドラ内に書けばよいということです。
(詳しくはWin32プログラミング講座などを見てください)
次に文字数を数えたいエディットボックスのウィンドウハンドルが必要です。
ちなみにエディットボックスのIDと親のウィンドウハンドルを知っているのであれば
GetDlgItem(親のウィンドウハンドル, エディットボックスのID)と書けばエディットボックスのウィンドウハンドルが分かります。
(ヘルプには「ダイアログボックスのウィンドウハンドル」と書いてありますが,どんなウィンドウでも平気です)
それが無理なら場合によって色々と方法があるので,また聞いてください。
そうして得たウィンドウハンドルを引き数にしてGetWindowTextLength関数を呼べば文字数(バイト数)が分かります。
あとはこれをエディットボックスに表示させます。
それにはSetDlgItemTextと言いたいところですが,GetWindowTextLengthで得たものは数値であり文字列ではありませんからそのままでは使えません。
Str$などで文字列に変換する方法もありますが,ここでは数値のためのSetDlgItemInt関数を使います。これを書かないとコンパイルできません
IDや関数名は違うでしょうから適宜修正してください。
つまりこれからのことはClickイベントのハンドラ内に書けばよいということです。
(詳しくはWin32プログラミング講座などを見てください)
次に文字数を数えたいエディットボックスのウィンドウハンドルが必要です。
ちなみにエディットボックスのIDと親のウィンドウハンドルを知っているのであれば
GetDlgItem(親のウィンドウハンドル, エディットボックスのID)と書けばエディットボックスのウィンドウハンドルが分かります。
(ヘルプには「ダイアログボックスのウィンドウハンドル」と書いてありますが,どんなウィンドウでも平気です)
それが無理なら場合によって色々と方法があるので,また聞いてください。
そうして得たウィンドウハンドルを引き数にしてGetWindowTextLength関数を呼べば文字数(バイト数)が分かります。
あとはこれをエディットボックスに表示させます。
それにはSetDlgItemTextと言いたいところですが,GetWindowTextLengthで得たものは数値であり文字列ではありませんからそのままでは使えません。
Str$などで文字列に変換する方法もありますが,ここでは数値のためのSetDlgItemInt関数を使います。
コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Declare Function SetDlgItemInt Lib "user32.dll" (hDlg As HWND, nIDDlgItem As Long, uValue As DWord, bSinged As Long) As Long
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
Dim hwndEdit As HWND
hwndEdit = GetDlgItem(...)
Dim TextLength As Long
TextLength = GetWindowTextLength(hwndEdit)
SetDlgItemInt(hMainWnd, EditBox1, TextLength, TRUE)
End Sub
ありがとうございました。
これが最後のお願いです。
MainWndのEditBox1の内容が書き込まれているのに保存せず終了しようとしたとき保存するかしないか、を表示する
つまりWindows標準仕様のメモ帳と同じような機能です。
ソースまたは情報の投稿をよろしくお願いします。
MainWndのEditBox1の内容が書き込まれているのに保存せず終了しようとしたとき保存するかしないか、を表示する
つまりWindows標準仕様のメモ帳と同じような機能です。
ソースまたは情報の投稿をよろしくお願いします。
そのようなことを行うにはMainWndのQueryCloseイベントが最適です。
EM_GETMODIFYをエディットボックスに送ると,内容が変更されているかどうかわかります。
変更されていればMessageBoxで保存するか聞いています。
QueryCloseイベントのハンドラの引数cancelにTRUEを代入すると終了をキャンセルできます。
なお,保存の処理は省かせてもらいました。
例によってIDやMessageBoxで表示する内容は当然適当に書き換えてください。
EM_GETMODIFYをエディットボックスに送ると,内容が変更されているかどうかわかります。
変更されていればMessageBoxで保存するか聞いています。
QueryCloseイベントのハンドラの引数cancelにTRUEを代入すると終了をキャンセルできます。
なお,保存の処理は省かせてもらいました。
例によってIDやMessageBoxで表示する内容は当然適当に書き換えてください。
コード: 全て選択
Sub MainWnd_QueryClose(ByRef cancel As Integer)
' エディットボックスの内容が変更されているかどうか
If SendDlgItemMessage(hMainWnd, EditBox1, EM_GETMODIFY, 0, 0) <> FALSE Then
' 保存するかユーザーに訊く。
Dim ret As Long
ret = MessageBox(hMainWnd, "テキストは変更されています。保存しますか?", "", MB_YESNOCANCEL)
Select Case ret
Case IDYES
' ToDo: ここに保存する処理を書く。
Case IDNO
Exit Sub
Case IDCANCEL
cancel = TRUE
End Select
End If
End Sub
ここは質問をする場所であって他の人にソフトを作らせるところではありません。ですからもう少しご自分で調べてみてはどうでしょう?
(十分調べてからのことでしたら、すみません。)
人に聞くのは楽ですが、自分で調べたほうが知識も付きますし、出来たときの喜びも一入です。
過去ログなども目を通すと、おもしろい発見がたくさんありますよ。
ちょっとえらそうなことを言ってしまいましたが、そういう私はまだまだ自称中級者です。ここのところの受験勉強でストレスが溜まっているのか、
ちょっと荒らしっぽくなってしまい申し訳ありません。
P.S. エラーが出たというだけでは、わかりにくいかもしれないので、どういったエラーが出たのかも書いたほうがいいかもしれません・・・まぁこれは聞き流してくださっても結構です。
(十分調べてからのことでしたら、すみません。)
人に聞くのは楽ですが、自分で調べたほうが知識も付きますし、出来たときの喜びも一入です。
過去ログなども目を通すと、おもしろい発見がたくさんありますよ。
ちょっとえらそうなことを言ってしまいましたが、そういう私はまだまだ自称中級者です。ここのところの受験勉強でストレスが溜まっているのか、
ちょっと荒らしっぽくなってしまい申し訳ありません。
P.S. エラーが出たというだけでは、わかりにくいかもしれないので、どういったエラーが出たのかも書いたほうがいいかもしれません・・・まぁこれは聞き流してくださっても結構です。
エラーについて。
ゲストsが言うとおり、一口に「エラー」といってもOS側から実行時に指摘されるようなエラーもあればコンパイル時に弾かれるエラーもあるわけで。
具体的なエラーメッセージくらいは載せるようにしましょう。
具体的なエラーメッセージくらいは載せるようにしましょう。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。