キーワードの色分け(2)

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
メッセージ
作成者
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#31 投稿記事 by yu0627 »

 ちょっと色々やっていて返信が遅れました。

 アクセラレータキーについては実装できます。

 今は、RichEdit標準のアンドゥ機能をどうやって生かすかを
考えています。置き換え機能のアンドゥ機能に記録させない設定が
あるので、コードを読み取ってやっていけばよいかと...。
すみません。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#32 投稿記事 by yu0627 »

 こちらの勘違いでした。
リッチエディットのアンドゥ機能を一時的に無効にすることなどできませんでした^^;
というわけで、どうやってアンドゥを呼び出すかです。
とりあえず、やり方はCtrl+Zが押されたことを検出(アクセラレータ使ってるか
WM_KEYDOWN wParam=Zの時にAsyncKeyState(VK_CONTROL)してるか)し、
それを奪い取って(CallWindowProcに渡さずExit Functionで抜ける)、
バッファから文字を追加、削除する。といった感じです。
削除をアンドゥする時はnStart~nEndの文字列をszTextに変換する。
文字追加をアンドゥする時は追加された文字をnStartの位置から削除する。
追加の場合、前のコードは考慮されていませんでしたが、文字選択状態で
"A"なんかを押すと選択部分を削除して文字追加になるのでその部分も
考えなければいけませんでした。
 だいたいは理解できます。
しかし、コードにするのはつらいです...。
ノッチ
記事: 82
登録日時: 2005年6月01日(水) 23:27
お住まい: 北海道札幌市

Re: 返信@yu0627

#33 投稿記事 by ノッチ »

会社からどうどうと(!?)投稿です。 この前と同じように空のプロジェクトのMainWndにEditを追加してMainWnd.sbpの
中身を丸ごと入れ替えて下さい。
上記コードでは中にいろいろコメントしてますが、0~9、A~Zの入力と
そのアンドゥのみ実装しています。
上記条件を満たしていれば文字入力、文字を選択状態での文字入力にも
完璧に対応しています(のはずです)。
これを元にyu0627さんの力でがんばってみて下さい。
僕にやらせると完成が数ヶ月(もしかしたら数年)かかるかもしれません。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#34 投稿記事 by yu0627 »

 確認してみました。しっかりと動いています。
 日本語入力については、IMEの変換状態を取得することでなんとかなりそうです。
あと、リドゥについて考えてみました。


1,通常入力時いつもの入力時はアンドゥを記録する
②アンドゥ時
1,現在の状態をリドゥバッファに記録する
2,アンドゥ時、記録したバッファを適用する。
③リドゥ時
1)リドゥ→アンドゥ
 1,最新のリドゥをリッチエディットに適用
 2,最新のリドゥを破棄
2)リドゥ→リドゥ
 1,最新のリドゥを適用
 2,最新のリドゥを破棄
3)リドゥ→通常入力
 1,リドゥバッファを全て破棄

こんな感じです。
これらはREDO用のコードです。
現在アンドゥの改良をしています。
 では。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

近況報告

#35 投稿記事 by yu0627 »

 こんにちは。yu0627です。
今のところ、以下のところまで来ました。

○日本語入力への対応
→とりやえず実装。ただし二文字以上でゴミが入る。
○BackSpaceとDeleteへの対応
→とりあえず実装。ただし日本語入力で文字化けしたり、ゴミが入る。
 また、英字でゴミが入る。
○切り取りへの対応
→暫定実装。データが大きいサイズを処理するとバグが出る
○貼り付けへの対応
→実装。まだ改良余地あり
○REDOへの対応
→未実装
○その他
・UNDO後のpNewNextポインタの開放でHEAPが起きる

追記:BackSpace、Deleteキーの英字のごみ問題は解決しました。
   しかし、Edit上で日本語と英字のサイズは同じなのに変数上で1バイトと2バイトに分かれるので難しいです。

以下がコードです。
リッチエディット仕様に書き換えてある箇所もあるので、そちらでなんとかしてください(爆)
リッチエディットのハンドル:hEdit
あと、「SetKeywordColor」はコメントアウトで。
大変...。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#36 投稿記事 by yu0627 »

 結局、あまりうまくいかなかったので、ストリームを使用した無限アンドゥに
切り替えました。そして、アンドゥ・リドゥともにうまく実装できました。
仕組みは、ソフトと同じフォルダに「Undo」というフォルダを作成し、そこに書き込んでいってます。
色分けをしている関係上、やはりストリームを使ったほうがさくさくと行きます。
~URL削除~
ということで、問題解決です。あとは自分で改良してやっていきたいとおもいます。
 最後に、ノッチさんにはアンドゥ機能開発の為に多大な時間を使っていただいたことに、感謝をしています。
一部、その技術を使わせていただきました。ありがとうございました。
返信する