title: Phi::Edit
author: YOSHIDA Kazuhiro
mailto: moriq@moriq.com

1. Phi::Edit

Windows の 1 行編集コントロールのラッパー

標準的な Windows 編集コントロールをフォーム上に配置できる。編集コントロールを使うと，入力されたテキストを取り出すことができる。編集コントロールはテキストを表示することもできる。

テキストを表示するだけの場合，そのテキストを選択してクリップボードにコピーできるようにするには編集コントロールを使う。このような編集コントロールの機能が不要の場合は， Phi::Label# オブジェクトを使ってテキストを表示すればよい。

1.1. super class

Phi::WinControl#

1.1. properties

: auto_select : Boolean
  focus を得たときにすべてのテキストを自動的に選択するかどうか

  テキストが追加されるよりも置換される場合の方が多いと思われるときに %c:true% を指定しよう。

: auto_size : Boolean
  テキストに合わせて self の高さを自動的に変更するかどうか

  %c:auto_size% はクライアント領域の高さをテキストに合わせるように編集コントロールのサイズを調整するのに使う。

  : false
    編集コントロールの高さは固定である。
  : true
    フォントや境界線のスタイル変更のようにコントロールの高さに影響する変更が発生したときにコントロールのサイズが再調節される。

  : 注意
    %c:auto_size% は編集コントロールの高さのみを調整する。 %c:auto_size% が %c:true% の場合でも，テキストの幅がコントロールよりも大きくなった場合はテキスト表示が切れてしまうことがある。

: border_style ： Fixnum (BorderStyle)
  クライアント領域の周囲に単一線の境界をもつかどうか

  : BS_SINGLE
    周囲に単一線の境界を持つ。
  : BS_NONE
    境界はない。

: can_undo : Boolean
  取り消し可能な変更が編集コントロールに入っているかどうか

  テキストに対して加えた変更内容が #undo を呼び出すことによって取り消すことができるかどうかを判別できる。変更を加えるようなコマンドに相応するメニュー項目を有効にしたり無効にしたりするときに役立つ。

: char_case : Fixnum (CharCase)
  テキストの大文字と小文字を決定する。

  テキストを大文字または小文字に変換する。以下に %c:char_case% の値を示す。

  : EC_LOWER_CASE
    テキストを小文字に変換する
  : EC_NORMAL
    テキストは大文字と小文字のどちらでもよい
  : EC_UPPER_CASE
    テキストを大文字に変換する

  %c:char_case% が %c:EC_LOWER_CASE% または %c:EC_UPPER_CASE% である場合，ユーザーが編集コントロールに入力する時点で文字の大文字と小文字が変換される。 %c:char_case% を %c:EC_LOWER_CASE% または %c:EC_UPPER_CASE% に変更すると，テキストの表示だけでなく実際のデータも変更される。大文字と小文字を区別する情報は失われるため， %c:char_case% を %c:EC_NORMAL% に戻しても復旧はできない。

: hide_selection : Boolean
  focus が他の control に移動したとき，テキストの範囲選択の描画をしないか否か

  : false
    %c:self% が focus を持たない状態でもテキストが選択されたときと同じ長方形領域を描画したままにする。
  : true
    %c:self% が focus を持っている場合にのみ選択された長方形領域を描画する。

  %c:hide_selection% は選択の実際の値には無関係で，その視覚的な表示にのみ影響する。常に %c:hide_selection% を %c:false% にしてしまうと編集コントロールの多いフォームが見づらくなることがある。

: max_length : Fixnum
  ユーザーが編集コントロールに入力できる文字の最大長

  %c:max_length% は，編集コントロールに入力できる文字の長さをバイト単位で指定する。テキストが固定長バッファにコピーされることがありえる場合に， %c:max_length% を使ってテキストの長さを制限するとよいだろう。

  値を 0 に設定すると，動作環境に依存した値 ( 現在の Windows では 64 KB ) が使われる。

  : 注意
    %c:lines% を直接扱うと， %c:max_length% を超えるテキストを保持することができる。 %c:max_length% を変更しても既に保持されているテキストの長さを変更することはできない。 %c:max_length% よりテキストの長さが長い場合には，それ以上の文字の追加ができなくなる。

: modified : Boolean
  ユーザーが編集コントロールのテキストを編集したかどうか

  %c:modified% は，編集コントロールの #text が変更されたかどうかを調べる。 #text をプログラムで直接変更する場合， %c:modified% も %c:true% に設定しなければならない。

: oemconvert : Boolean
  編集コントロールに入力された文字を ANSI から OEM に変換して再び ANSI に戻すかどうか

  編集コントロールに入力された文字が確実に OEM 文字セットに変更されるようにするには， %c:oemconvert% を %c:true% に設定する。これにより，すべての文字が入力時に ANSI から OEM に変換されてその後で ANSI に戻される。

  テキストを OEM 文字列にマップする必要がない場合は %c:oemconvert% を %c:false% に設定すれば変換のオーバーヘッドを回避できる。

: password_char : Fixnum (Char)
  入力された実際の文字の代わりに表示する文字

  %c:password_char% を 0 に設定すると，編集コントロールはテキストをそのまま表示する。 %c:password_char% が 0 以外の場合は，編集コントロールは入力された文字の代わりに %c:password_char% の文字を表示する。 %c:password_char% は編集コントロールの表示のみに影響する。 #text の値は入力された実際の文字を示す。

: read_only : Boolean
  ユーザーが編集コントロールのテキストを変更できないか否か

  編集コントロールを表示のみに制限するには %c:read_only% を %c:true% に設定する。編集コントロールでの編集を可能にするには %c:read_only% を %c:false% に設定する。

  %c:read_only% を %c:true% に設定するとテキストの変更はできなくなるが，テキストの選択はできる。選択されたテキストをアプリケーションによって操作したり，クリップボードにコピーしたりすることができる。

: sel_length : Fixnum
  選択されている文字の数

  %c:sel_length% は，選択されているテキストの長さをバイト数で調べる。 %c:sel_length% を設定すると，選択の内容を #sel_start から始まり， %c:sel_length% の長さの文字列に変更できる。

  : 注意
    %c:sel_length% の値を #sel_start が示す文字からテキストの最後までの文字数よりも大きく設定すると #sel_start からテキストの最後までのすべての文字が選択される。 %c:sel_length% の値を利用できる文字数よりも大きく設定した後に %c:sel_length% を参照すると，設定した値ではなく実際に選択されている文字の長さが返される。

: sel_start : Fixnum
  テキスト選択の先頭文字の位置

  %c:sel_start% は，範囲選択されている文字列の開始位置を調べる。編集コントロールの先頭位置は 0 である。選択されているテキストがない場合， %c:sel_start% はカーソル位置を示す。 %c:sel_start% を設定すると現在の選択範囲はクリアされ，指定した文字の直前にカーソルを置くことができる。特定の範囲のテキストを選択するには，まず %c:sel_start% を設定してカーソル位置を決め， #sel_length を使って選択範囲を指定する。

: sel_text : String
  編集コントロールのテキストの選択部分

  %c:sel_text% は現在選択されているテキストである。 %c:sel_text% を設定すると選択したテキストを新しいテキストで置き換えることができる。範囲選択されていない編集コントロールに %c:sel_text% を設定すると，カーソル位置に新しい文字列を挿入できる。
