0

私のアプリケーションは、特定のWindowsバージョンで、カスケード、タイル水平/タイル垂直の同じWindowsメッセージを受信または処理していないようです。

Windows XPx32-動作しない
WindowsXPx64-テストされ
ていないWindowsVistax32-動作しない
WindowsVistax64-正常に動作しますか?
Windows7x32-テストされていません
Windows7x64-動作していません

なぜこれが当てはまるのかについてのアイデアはありますか?他の人と一緒にいないVistax64に固有の何かがありますか、私はそうは思いませんでした!

アップデート

具体的には、アプリケーションの1つ以上のインスタンスを開いており、Ctrlキーを押しながらタスクバーからこれらを選択して、カスケード/タイリングを試みた場合を指します。

Delphi 2009にアップグレードする前の古いバージョンのアプリケーションは、期待どおりに機能しているようです。これとの違いは、現在DevExpressリボンコンポーネントを使用していることです。さらに苛立たしいのは、Delphi 2009にあり、リボンを使用している別のバージョンのアプリケーションがあり、それが正常に機能することです。

4

2 に答える 2

1

Delphi の TForm.Cascade および TForm.Tile メソッドについて話している場合は、ドキュメントから (便利だった Delphi 7):

Cascade を使用して、MDI 子フォームを配置し、それらが重なるようにします。

カスケードは、フォームが MDI 親フォームである場合 (つまり、フォームの
FormStyle プロパティは fsMDIForm です)。

ご覧のとおり、これらは MDI 子フォーム専用に設計されています。非 MDI 子フォームには影響しません。それが、あなたがテストした 4 つの OS のうち 3 つで動作しない理由を説明するかもしれません。(Vista x64 の動作は、ある種のまぐれではないかと思います。)

編集:コメントに基づいて、問題は TForm.Cascade/Tile に関連していません。

しかし、クレイグ・ヤングは正しい方向に進んでいると思います。追加してみましたか

Application.ShowMainFormOnTaskbar := True;

.DPR ファイルに? 問題は、プロジェクトが以前のバージョンの Delphi で開始され、その後新しいバージョンに更新された場合、フラグが設定されておらず、アプリケーションのウィンドウがタスクバーに表示されることである可能性があると思います。代わりにメインフォームに変更すると、問題が解決する場合があります。

于 2009-12-08T20:39:40.567 に答える
0

シンプルな Delphi アプリには、2 つの「メイン」ハンドルがあります。1 つはメイン フォーム用で、もう 1 つは TApplication インスタンス用です。

個人的には、デスクトップ上でアプリケーションをタイルまたはカスケードする機能を使用しません (最大化して実行することを好みます)。その結果、私はその振る舞いを掘り下げようとはしませんでした。しかし、私はいくつかの指針を与えることができます:

  • ほとんどの場合、TApplication.WndProc メソッドがメッセージを受信して​​いますが、サイズを変更しようとしても役に立ちません。
  • 関連するメッセージをインターセプトし、それらをメイン フォームのハンドルに渡すことをお勧めします。
    • TApplication.OnMessage イベントは最も単純で、十分です。
    • そうでない場合は、TApplication.HookMainWindow(); を使用してみてください。
于 2009-12-09T12:51:43.910 に答える