DelphiでMDIでWin7でタスクバー

 まずタスクバーそのものの話をすると、同じアプリを複数起動するとそれらをまとめて表示するかどうかって言うオプションは古いWindowsでも存在した。Windows7ではこれがさらに一歩進んで、単一起動のMDIアプリやタブ式アプリでも、子ウィンドウをタスクバーから切り替え出来るような仕組みを用意している。ただし、普通にMDIやタブのアプリを作ってもそれは実現できなくて、Win7でそれを行う機能を搭載したアプリだけが、今のところ、MDIやタブの切り替えをタスクバーに表示している。



 さて、真魚もその機能を搭載するべく、やり方を調べて自前でやってみたのだが、元々Delphi製アプリはタスクバーにアイコンを表示する方法が特殊なためか、自前で搭載した機能との両立がうまく行かなかった。うまくいかないとは言え、子ウィンドウをタスクバーに表示するという所までは出来てるので、多少は変でも機能を搭載しても良いと思う。逆に、多少変なのを我慢してでも無理矢理に今すぐ搭載したい機能でもない。他のアプリで実現できていることだから真魚にも搭載したいと言うのが動機であって、それが便利だから搭載したいって話じゃないので、今回これを頑張って自前でやらなくてもいいかなと。その元々の特殊なDelphi式との相性なわけだから、ユーザーが自前でやるのではなく、将来的にさらに特殊な表示方法によって公式サポートが行われるかも知れないので、その時に対応でも良いと思う。公式サポートがなければ真魚にも搭載しない。公式サポートがあっても5万円払う気にならなければ真魚には搭載しない。搭載しなくても不便だとは今のところ思わない。こんなの単なるアップデートのネタでしかない。

 具体的にどういう風に変なのかって言われると、ちょっと説明が複雑で難しいが、自分が書いたわけじゃないのに自動的にタスクバーに何かが起る。そしてそれに逆らって変化を打ち消す事も出来るんだけど、その自動的に起ってる事はDelphiアプリとして必要な機能を含むものらしく、他のいろんな機能も一緒に打ち消させる。だから変なのは分かってても変な感じをほっとくしかないかなと。そもそもMS製のソフトによる公式なタスクバー切り替えの動作も、あたしに言わせれば別の意味で変なわけで、完全に公式の動作をパクったとしても完成した動作とは思えないからな。

 その上、切り替えまではどうにかなったがプレビューの作成がうまく行かなくて、アイコンがクルクル回った状態になってしまう。プレビューを書きたいけれど、まぁこれも説明が難しいのだが、アイコンクルクルでタイトルバーが閉じるボタンだけの窓が表示されて、それが親ウィンドウと同じサイズだからどう解決して良いか分からない。例えそこにプレビューを書く事に成功しても、MS製のアプリとは挙動が違う。同じにしたいけど用意されたAPIにはその解決方法が見つからない。

 よーするに、あたしはググってでてきたソースをパクって真魚を作ってるわけだから、世界の誰かがDelphiでMS製のようなタブを実現してそのソースを公開していない限り無理って事だ。独自では無理、C++ソースの移植ではDelphiとの相性問題、Delphiソースはちょうど良い物がヒットしないっていう状態。

Microsoft Office Personal 2010 アップグレード優待

 MDI化とWin7対応とDelphiバグ回避のために、ソースコードの至る所に実験的なコードを書いたりそれをコメントアウトしたりという事が、あまりにも多かったので、現時点でソースにやたらと残骸コードが増えている。

たぶん関連のある記事:

  1. cielphy
    2012年 05月 09日 水曜日 16:31

    MDIというものにご執心の様子ですが、gPadのそのような機能には全く関心がありませんし、真魚の方向性である「メモ帳やMS-Wordなどのように、MS流の操作で動くもの」「カスタマイズ項目が少なく、メモ帳ぐらい簡単に使えて、色分けできてタブ式の物を目指しています」からかけ離れてしまうような気がします。素人ユーザーが偉そうに言いたいのは、規定の文字コードをS-JIS固定ではなく、もっとも使用頻度の高いUTF-8にするか、毎回選ぶ手間をなくすために規定の文字コードをあらかじめ設定させて欲しいです。欲を言えばきりがないですがささやかな願いです。MDIは全く必要ではありませんし、アイコンが縦に二つ並ぶのも不恰好です。gPadに足りてない点はただ1点、プロポーショナルフォント(例えばMeiryo12ptAAなど)が使えないこと。こんな単純なことだったりしますし、不要な機能が多すぎます。

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