title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2018/08 >>12345678910111213141516171819202122232425262728293031
Powered by BLOM オリジナルエディタの開発
小さくも大きくも閉じたりもしません
13/02/05 02:24 / その他のソフト

photo


現在、オリジナルのエディタを開発しています。

と言っても、エディタアプリでは無く、エディタエンジンの方です。

i4Portable のエディタは Delphi 標準の TMemo(というか Windows の Common Control の Edit Class のラッパー)を利用しているのですが、標準だけあって最低限の機能しかありません。

いくら簡易と言えども 最低でも、ある程度の回数を実行できる Undo / Redo は欲しいなと思ったのがきっかけでして、最初は TCustomEdit を継承して作ろうと思っていたのですが、取りあえず止めて、i4Portable にも使っているオリジナルの HTMLレンダーを改造すれば出来るんじゃないかなと考えたのです。

当初の予定としては

1)テキスト出力については i4Portable で HTMLレンダーの基礎エンジンを使えば十分高速化出来ているので問題ないだろう。

2)後はタグの解析を削って改行処理を行っておけばいいかな?

3)入力は WM_KEYDOWN とか処理すればいいんでしょ?

なんて考えていたのですが、そんなに甘くは無く途中で頓挫。
理由は
1)元々の HTML レンダーの構造解析が邪魔でしょうがない(そらそうだ)
2)所詮出力に特化したライブラリなので入力側をまったく考慮していない構造。(もっともだ)

てなことで、再度フルスクラッチで作ることに・・・

エディタの開発はやったことないのですが、0から作るとなると相当大変なのは理解しているので、どうしようかなーとは思ったのですが、何事も経験ですし、苦手意識を克服(どうにも UI が絡む物は避ける傾向が・・・先日から作っている似非Win8 Class で意識改革があったこともありますが)出来るかもしれないってことで。

さて、フルスクラッチで作る以上、越えなければならない壁があります。
特に基本クラスを TCustomEdit 等からの継承では無く、TWinControl から作るので、全て自力でやらなければなりません。

噛み砕いて言うと「Windows から紙だけ貰う。そこに線を引いて文字を書いて、カーソル動かしたり、点滅させたり、スクロールしたり、ラップしたり、キーやマウス入力受けたり、選択とかも自分で計算したりと、全部自力でやる」ってことです。

TCustomEdit からの継承だと、上のようなことは全部 Windows がやってくれるのですが、その分制限があります。
いわゆるテンプレートな動作は完璧なんですが、変わった動作をさせようとすると、とたんに難しくなります。

あと文字を装飾したりとかできないんですよ(文字装飾とかもできる RichEdit って Class もありますが、なんか違うんですよ)

さて、越えなければならない壁があると書きましたが、大雑把に書き出してみると

1)文字の出力

プロポーショナルでは無いフォントならまぁ作業量は結構減るんですが、プロポーショナルフォント(文字のサイズが1文字づつ違うフォントをこう言います)にも対応したいので細かな計算が必要になります。

2)カーソル(キャレット)制御

テキストの現在地を示すカーソルですね。
Win32 API には CreateCaret 等の便利そうな API があるのですが(実際便利です。点滅などの制御まで全部自動でやってくれます)どうも作っていた出力と相性が悪く、これも自前で処理します。

3)キー入力制御

エディタなので当然ですが、キー入力を受け付けなければなりません。一部普通の方法では制御できないキー(タブとか。次のコントロールに移動してしまうので)などもありますので、色々とごにょごにょします。
当然ですが、日本語入力が出来ないと意味無いので、IME の制御も自前で行わなければなりません。

4)選択範囲とかコピペ

クリップボードに対応していないとか駄目すぎるので。
単なるテキストエディタならそんなに大変では無いんですが、後述しますが実装したい機能があるので。

大雑把に書くとこんなもんです。
実際には細かくやらなければならないことが大量にあります。

ここまで作るとシンプルなテキストエディタなのですが、追加で実装したい機能として・・・

5)多段階 Undo / Redo

当初の目的です。と言いつつ、面倒そうなので思い切り後回しになっていますが。

6)文字装飾
基本的な、太字、斜体、打ち消し、アンダーライン、色、サイズに加えて、上付き文字、下付き文字辺りも対応したい所です。
あと、文字サイズも混合サイズ(1行中に複数のサイズの指定)も対応したいです。

出力形式もテキスト出力に加えて HTML 出力に対応したいんですよ。上記の文字装飾で色を青にするなら
span タグで囲って出力とか。
(RichEdit を使わないのはこれができないので)

7)タッチ操作

似非Win8 Class の流れに従ってタッチ操作に対応させます。
色々と UI を考えているのですが、マルチタッチを使わない以上(某社がうざいし)工夫が必要になると思います。

なんか自分で凄くハードルを上げている気がしますが(^-^;
こういう基礎的な物を作るのは勉強になるので、のんびり作っていこうと思います。

[更新日付:2013/02/05 03:34:15]
トラックバックを見る(0)
Log Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+9440e5da4cd9c0df8e6a3102399b00e7f44d3fdb]
TB Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+9440e5da4cd9c0df8e6a3102399b00e7f44d3fdb]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.