MDIじゃないMDIの裏でMDI

1643 letters | 1368 views | コメントする

 Windowsの仕様かDelphiの仕様か知らないが、MDIを実装するとどうしても抑止できない描画が発生するため、仕様を越えて特殊なことをやってでも無理矢理どうにかしようと頑張っている。とりあえず描画には違いないんだから、描画を行わせるWM_ERASEBKGNDかWM_PAINTを捕捉してどうにか出来るはずと当然思うわけで、でもこれを全部捕捉しても結局は目的の描画をやめさせる事が出来なかった。ユーザーレベルでコントロールできる描画を完全シャットアウトしても、MDIの余計な描画だけは望まずとも発生しちゃう。少なくともDelphiでは、どう頑張っても抑止できない描画のせいでチラつくという問題は回避不能ってことだ。でもそんなチラつくMDI描画を、それより前面にもう一つ塗りつぶしたウィンドウを配置して丸っきり隠しちゃう事が出来る。描画をストップさせるのは無理でも、それを裏で行わせて、見える部分に出さないことは出来るわけだ。しかしこの隠し役を表示したり消したりしてたらまたそれもちらつく事になる。じゃぁもういっそ隠しっぱなしで裏でMDIさせつつ、表になるべくちらつかない偽MDIを描画しちゃおうかってことにしたら良い感じ。MDIになったり偽MDIになったりの切り替えのタイミングでだけ大きいチラツキはあるけど、それ以外は結構スムーズにうまく行った感じ。まだ納得してないが。

 あと、これもMDIがらみだけど、メインメニューにMDIを操作するためのボタンがいくつか自動表示されるわけだが、これがメインメニューをチラつかせる。閉じるボタンや元の大きさに戻すボタンはいいんだけど、子ウィンドウのアイコンを親ウィンドウに表示してるやつが良くない。あたしとしてはこの部分を子ウィンドウのアイコンではなくタブのアイコンにしたいんだけど、それも逐一変更するとアクセス違反が発生するDelphiの仕様に阻まれてうまく行かなかったから、だったらここに表示しなくてもいいじゃんって事でもう無理矢理消しちゃった。

 「行へ移動」はメモ帳についてるから倣って付けたんだけど、物理行で表示してても論理行にしか指定できないのはどうかなと思った。よく、何行目を修正して下さいって事で、指定されるのはもちろん折り返ししてない論理行なわけで、物理行へのジャンプはもしかしたら不要なのかも知れない。メモ帳では、折り返し表示にするとこの機能自体が使えなくなる仕様によって、論理行にしかジャンプせずに済んでいる。真魚では、論理行とか物理行とか言う言葉は難しい物と判断して避けている。また、メモ帳のように使えたり使えなかったりする仕様では、使いたいときになぜ使えないのか分からないという状況が発生するので避けたい。しかも初期設定では物理行表示だ。と言う事で、物理行表示にしてる場合は物理行で移動しちゃうことにした。よそから何行目を修正せよと言われたときは、何文字で折り返した場合の話か、折り返さなかった場合の話か、と、まぁそこまで知恵が及ばない場合は仕方ないが、とりあえず確認して折り返さなかった場合の行数だと分かった時点で、折り返さないアイコンをクリックしてから行へ移動をするだけ。これなら論理行とか物理行とか全然意識しなくて済む。真魚に論理行表示があることに気がつかない人ですらどうにかなりそうだ。

 スクリプト専用のツールバーから、スクリプトを実行するためではなく編集するために呼び出す事も出来るようにした。つーかこれがないと自作するのに不便すぎ。他人の作った物を使うだけだったら実行だけでいいんだけどね。とりあえずここまで作って一段落にしたが、あとはこのスクリプト実行のためにショートカットキーが必要だな。しかしツールバーを表示してない時でもショートカットキーを効かすかどうか、それはまだ決めてない。それから今までの履歴から呼び出す方は削除でいいな。

たぶん関連のある記事:

コメントは終了しています。