A5:SQL Mk-2

開発のこと、日々のこと

古いDelphiのプロジェクトでモーダルダイアログが前面表示ウィンドウに隠れて操作できなくなる時

| 1件のコメント

A5:SQL Mk-2でいつからか起こっていた、少し怪しげな動き。

少し前のA5:SQL Mk-2で、前面表示のウィンドウ(コンソール画面とか、ER図のプロパティとか)があるときに、モーダルダイアログを表示すると、モーダルダイアログが前面ウィンドウの後ろに隠れて、前面表示のウィンドウも操作できなくなって、なにも操作できなくなるとかみたいな不具合がありました。

Delphiは昔から、秘密のメインウィンドウというのがあって、どうもこれが悪さをしているのではないかと思ってはいたのですが、どうにも解決策が分かりませんでした。

この秘密のメインウィンドウのせいで、Windows Vista以降で、タスクバー周りの動作も怪しかったのですが、以下のページの対処ではタスクバー周りの動作はともかく、前面表示ウィンドウとモーダルダイアログの問題はおかしいままで、根本対処にはならないようです。

Delphiで、Windows Vista Readyアプリケーションを作る

 

これの対処のために、A5:SQL Mk-2はいろいろトリッキーで対処療法的なコードをたくさん書いてました。モーダルダイアログを表示しているときは、前面表示ウィンドウを一時的に非表示にするとか…。

 

で、今回ようやく対処法を見つけました。プロジェクトのソースで、「Application.MainFormOnTaskBar := True;」と記述することです。新しいDelphiで新しいプロジェクトを作るとこのプロパティはデフォルトでTrueにされるようです。

TApplication.MainFormOnTaskBar プロパティ

これで、タスクバー周りの動作も、前面表示ウィンドウとモーダルダイアログの問題も解決です!!。

副作用として、「このプロパティが MainForm の Z オーダーに影響を与える点に注意してください。 」とあるようです。…多分A5:SQL Mk-2には影響ないはず…。

でも、結構前のDelphiで導入されたプロパティみたい…。Delphi 2007くらい?。10年間気が付いていなかったのですかね…。

 

1件のコメント

  1. この現象、結構困っていました。
    対処ありがとうございました。

コメントを残す

必須欄は * がついています