Unicode対応のリッチエディットコントロールをクラスにしてみました。
が、実はVCLのTRichEditはそのままでもUnicode対応であることが後で分かりました。
このソースでUnicode対応のリッチエディット(ではあるけれど機能的にはTEditやTMemo)コントロールが作成できます。
実際の運用にはポップアップメニューを作ったりVCLコンポーネントとの連携をとるために小手先の技を使わないといけないので標準のコンポーネントよりかなり使いづらいです。
シングルラインのエディットで(TMyEdit)右寄せにしたり数値のみの入力にしたりパスワード入力用にしたりというのはやっていません。
そのへん私があまりシングルラインのエディットを必要としていないせいで手抜きです。
マルチラインのエディット(TMyMemo)で「右端で折り返す」のを実現させるため一度ウィンドウを破棄して再作成していたりするのでややこしい感じもあります。
ページの一番下にRichEditコントロールのショートカットキーの一覧が(英語ですが)あります。
編集機能については特別な実装は何も行っていないのでWindowsのRichEditコントロールが持っている編集機能がもれなくそのまま使えます。
単語削除や単語移動などは結構便利に使えると思います。
Ctrl+Z | 戻す。 |
Ctrl+Y Ctrl+Shift+Z |
やり直し。 |
Ctrl+X | 切り取り。 |
Ctrl+C Ctrl+Insert |
コピー。 |
Ctrl+V Shift+Insert |
貼り付け。 |
Shift+Delete | 選択範囲がある場合のみ選択範囲を削除。 選択範囲がなければなにもしない。 |
Ctrl+A Ctrl+(テンキーの)5 |
すべて選択。 Ctrl+キーボード上部にある数字キーの5は無効。 |
Ctrl+Backspace | 現在のカーソル位置から単語の先頭までを削除。 (行頭へ向かっての単語削除) |
Ctrl+Delete | 現在のカーソル位置から単語の末尾までを削除。 (行末へ向かっての単語削除) |
Ctrl+Left | 行頭へ向かっての単語移動。 |
Ctrl+Right | 行末へ向かっての単語移動。 |
Ctrl+Up | 1行上の行頭へ移動。 |
Ctrl+Down | 1行下の行頭へ移動。 |
Home | 行頭へ移動。 |
End | 行末へ移動。 |
Ctrl+Home | 文書の先頭へ移動。 |
Ctrl+End | 文書の末尾へ移動。 |
Ctrl+Page Up | 表示中のページの先頭に移動。 |
Ctrl+Page Down | 表示中のページの末尾に移動。 |
Ctrl+Shift+A | 選択範囲を大文字に変換。 |
Alt+Shift+X | カーソル位置の文字を16進のUnicodeのコード番号に変換。 |
Alt+X Alt+Shift+Ctrl+F12 |
選択した16進数字をUnicodeのコード番号であるとみなして対応する文字に変換。 |
Alt+(テンキーの)0nnn.. | Altキー押したままテンキーの0に続いて10進のUnicodeのコード番号をテンキーから入力してAltキーを離すと対応する文字がカーソル位置に挿入される。 キーボード上部にある数字キーでは入力できない。 |
フォームのサイズが変わったときにRichEditのサイズも変更しなければならないときはOnFormResizeイベントに記述します。
作成するUnicode対応のリッチエディットクラスが一つだけなら簡単ですが、複数ある場合それぞれにポップアップメニューを作る必要があります。
あるいは一つのポップアップメニューで済ませるならそれぞれのメニュー項目で処理をふりわける必要があります。
以下の例ではF_GetFocusEditで現在フォーカスのあるリッチエディットを返すようにしています。
そしてそれを利用して各編集コマンドを分けて処理できるようにしています。
簡易なエディターです。
検索ボックスと本文にUnicode対応のリッチエディットのクラスをTDrawGridを親ウィンドウにして作成しています。
Unicodeなファイルの読み書きができます。
ファイルへの書き込みはUnicodeな文字があればBOM付のUTF-8で、なければShift-JISで行います。
読み込みはShift-JIS、EUC、JIS、UTF-8、UTF-16、UTF-7を自動判定して読み込みます。
エクスプローラからのファイルのドラッグアンドドロップにも対応しています。
レジストリには何も書き込みません。
iniファイルも作りません。