HTMLエディタを作る(12)(1999/09/14)
う゛〜。やっぱし、TRichEdit.Change メソッドや TRichEdit.OnChange イベントの中では Line.EndUpdate できませんなぁ〜。ブツブツ。
動的着色のまとめ……て言うほど完成度は高くないんですが、俺的に限界なのでまとめてしまいます。
最終的には、ウダウダ言わないで TRichEdit.Change メソッドをオーバーライドしてしまった。と言うのは更新後に、前後のタグの端っこまでを走査して再構成しなおすと言う仕様にしたから。いちいちチラついてしまうので、速度面では最低のものだが……ウチの環境が PentiumII-450MHz にグレードアップしたので気にしない事にしたという
オイオイ
クリップボードからの転送では基本走査範囲より外にもタグが配置される事が予想されるので、TRichEdit.CopyToClipBoard を上書きして「ペーストされる予定の文字数を取得」しておき、OnChange イベント最中の着色処理で最低限その長さは処理を続行するとした。ちなみにペンIIが450MHzだろうが500MHzだろうが、多分600MHzが700MHzでも重そう……へへっ(開き直った)
ちなみに SelText プロパティでの挿入は、キーボードからの1文字つづの入力と同じみたいだった。
しかしコレ……Tipsどころかコンポーネントとして公開するのさえも嫌クサ……ダメ過ぎ。まぁ、思うが侭に追加追加してきたでソースコード読めないし、一遍0から書きなおしたら良いんだけど。
タグが閉じるときに着色……という簡易の方法を提案してもらったんだけど、シーケンシャルに打ちこまれるまであればその方法でもいいとは言え、スクリーンエディタではタグを壊す修正も行われる事で厄介極まりないと言う事になんで。
でも原則としては「<」「>」だけが着色に関わるのだから、その入力と削除だけを監視するのは悪くないって訳です……カット&ペーストを別にすれば、KeyPress イベントの周辺をを追う事になりそう。コレに関しては現行の物を一回書きなおして安定させてから取り掛かる予定と言う事で……
今のはキーボード入力とカット&ペーストでの入力とを統合して処理する方針なので、そうするともう殆ど書き直しになっちゃうという……。「<」「>」の入力と削除を監視するのって意外に面倒なんだよな……ってぇのは初期の段階でチョロっとやってみたわけ。入力はともかく削除されるかも知れないを追いかけるのが大変!
AboutDelphi のTipsは確認済み。Win32SDK のヘルプが英語なんで、リッチエディット用のイベントって良くわかんないんだよな。選択したり着色したりする API があることはあるのか……さしあたってイベントをマスクするコードだけ利用してみたら、それだけでかなり高速化した。インド人もびっくりだ。
Lines.BeginUpdate メソッドを使いたいけど使えないのは説明済み。TRichEdit.Text プロパティなんかをそのまま使わずに、ローカル変数にコピーしてから使って書き戻す、なんてのは知ってたから最初からそうしてた。んー。
と、言うわけで、次のがα版リリース6。
ボタン編集中の画面。マクロは今の頃はベタに挿入するだけだけど、行く行くは色々なダイアログを使用できるようにする予定。
実行ファイルを適当なフォルダに配置して起動すると、こんな風にエクスプローラ風の表示ができる。ただ、これってファイラーの機能なのに、どうして新規作成のところで書いてしまったのかは全くの謎…
ファイルの新規作成ルーチンが途中なんで、そのウィンドウを閉じると終了しちまいます(笑) ここの処理は間違っていて、なんかファイラーみたいな事をやってしまった。嗚呼、勘違い。で、消す前にそのソースコードを利用してファイラー用のコンポーネントを作っている、と。
どんなものかと言うと、フォルダを読み出してそのファイルに関連付けされているアイコンを内部に持ち、二度目の表示から高速化しよう……というもの。なのでエクスプローラと同じ表示が可能。基本機能は完成してしまったので、比較的すぐに単体で公開もできるんですが……準備不足だからパス。近々、と言う事で。