「エディットボックス(1)」の編集履歴(バックアップ)一覧はこちら

エディットボックス(1)」(2010/01/11 (月) 23:58:54) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*エディットボックスについて † エディットボックスは文字や数字を入力できるコントロール 作られた直後は32KBまで編集可能 EM_SETLIMITTEXTメッセージを使うと最大で2GBか4GBまで増やせるが、9x系のOSだと64KBまでという制限がある **エディットボックスのスタイル † RADで変更できるエディットボックスのスタイルについて -無効(使用不可) 入力エリアが灰色になって入力フォーカスを受け付けないが、Set、GetWindowTextは普通に使える -可視 チェックしておかないとエディットボックスが見えない グループ グループボックス?を参照 タブストップ 加筆plz 複数行 複数行のテキストが扱えるようになる 水平スクロールバー、垂直スクロールバー、垂直オートスクロールのスタイルが使用可能になる パスワードスタイルは使えない 番号 数字以外入力できなくなる 水平スクロールバー エディットボックスの下端にスクロールバーが出る 右端を越えようとすると勝手にスクロールする 水平オートスクロール 右端を越えようとすると勝手にスクロールするが、スクロールバーは表示されない 垂直スクロールバー エディットボックスの右端にスクロールバーが出る 下端を越えようとすると勝手にスクロールする 水平オートスクロール 下端を越えようとすると勝手にスクロールするが、スクロールバーは表示されない パスワード 文字を入力すると*表示になり変換キーが使えなくなる このスタイルだけはウィンドウを作った後に変更できない 常に選択を表示 エディットボックス内で文字を選択している時、フォーカスを失うと通常は選択エリアは表示されなくなるが これがチェックされていると選択範囲が表示されたままになる OEM変換 たぶんANSI文字セットで入力された文字がOEM文字セットに変換されてるんだと思う 改行を許可 ENTERによる改行を許可する。 ダイアログボックスにデフォルトのボタンが付いている場合、ENTERを押すとそっちのボタンを押してしまう…らしいが チェックしてなくとも複数行スタイルがチェックされてればENTERで改行できる。謎。 ABのダイアログボックスは擬似的な物だからだと思う。 本当のダイアログボックスでデフォルトのボタンが付いてた場合、Enterを押すとボタンが押されるはずだ。 それを解除し、Enterで改行を許可するかどうかを決めるプロパティがこれ。 大文字変換/小文字変換 そのまんま 読み取り専用 無効に似ているがフォーカスが当たる。コピーなどの操作が可能 テキストの配置 そのまんま ↑ [edit] 操作サンプル † 以下の例では特に記述が無ければhEditBoxはエディットボックスのハンドルを示す またSendMessage以外の関数を用いる方法は他のアプリケーションが持つウィンドウに使用することはできない ↑ [edit] 現在の文字数を取得する † 方法1 return = GetWindowTextLength(hEditBox) 方法2 return = SendMessage(hEditBox,WM_GETTEXTLENGTH,0,0) どちらの方法でもreturnに文字数が入る ↑ [edit] テキストを設定する † 方法1 SetWindowText(hEditBox,Buffer) 方法2 SendMessage(hEditBox,WM_SETTEXT,0,Buffer) Bufferはセットしたい文字列の先頭のポインタを示すBytePtr型の変数 もしくはString型変数をStrPtrに渡した戻り値 ↑ [edit] テキストを取得する † 例としてエディットボックスの文字列を全て取得してみる Dim Buffer As BytePtr Dim Length As Long Length = GetWindowTextLength(hEditBox) Buffer = calloc(Length+1) GetWindowText(hEditBox,Buffer,Length+1) MessgaeBox(hEditBox,Buffer,NULL,MB_OK) free(Buffer) 多少注意が必要な点があります 文字列の長さはLengthの値で合っていますが、GetWindowTextは文字列の終端にNULL文字(&H00)を書き込もうとする為 必要なバッファが1バイト多くなってしまいます この状態でLengthをそのまま使うと尻が切れてしまうので、Length+1にして修正しています callocの引数も+1している事にも注意して下さい それが無いとヒープエラー出ます またGetWindowTextの所は SendMessage(hEditBox,WM_GETTEXT,Length+1,Buffer) で代用可能です ↑ [edit] 元に戻す処理 † SendMessage(hEditBox,WM_UNDO,0,0) ただし元に戻せるのは1回だけ ↑ [edit] 切り取り/コピー/貼り付け処理 † 上から順に切り取り、コピー、ペースト処理。それ以外特に書くことは無い。 SendMessage(hEditBox,WM_CUT,0,0) SendMessage(hEditBox,WM_COPY,0,0) SendMessage(hEditBox,WM_PASTE,0,0)

表示オプション

横に並べて表示:
変化行の前後のみ表示: