The Delphi Bug List

Entry No.
45
VCL - 一般 - フォーム - TForm
メインフォームを WindowState = wsMaximized かつ Position = poScreenCenter にすると、誤って表示される(時々、下に約 10-15 ピクセル、右に 20-25 ピクセルずれて表示される)。
1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 4.03 5.0 5.01 6.0 6.01 6.02 Kylix 1.0
Exists Exists Exists Exists Exists Exists Exists Exists Exists Exists Exists Unknown Unknown Unknown N/A
解説
Checked by Torbjorn Pedersen
WindowState=wsMaximized かつ Position=poScreenCenter のメインフォームを作成すると、そのメインフォームは誤って表示されます(時々、下に約 10-15 ピクセル、右に 20-25 ピクセルずれて表示されます)。

Jordan Russell 追記 (2000/08/09):
このバグは OS に依存するようです。Windows 95、98、NT 4.0、2000のうち、私が再現させることが出来たのは Windows 95 だけでした。しかしながら BorderStyle を bsNone に変更すると、全ての OS で再現するようです(この情報を教えてくれた Gate 氏に感謝します)。
解決策 / 回避方法
Position=poScreenCenter とはせず、poDefault のままにしてください。ウィンドウを最大化するのなら、そのウィンドウを中央に表示しようとする必要はないはずです。
ユーザーからのコメント
Martin Lindboe
14 Aug 2001  01:36 PM GMT
上記(Entry No. 45)に関係しているかもしれない似たようなバグに出くわしました(C++Builder 5 です)。

プロパティを BorderStyle = bsDialog、Position = poScreenCenter としてフォームを作成した場合、私はそれが画面またはデスクトップの中央に表示されることを期待しました。Position = poDesktopCenter の場合には、以下の内容も適用されたことに注意してください。

そのフォームは、画面の下端の約 28 ピクセルを占めるウィンドウズのタスクバーを考慮せず、スクリーンの中央に表示されただけでした。つまりフォームは、14 ピクセル下に配置されたのです。デスクトップ全体を埋めるほど大きなフォームを使用すると、この問題は非常に明確になります。

タスクバーをリサイズするとフォームが正しく配置されるので、これは特徴ではなく、バグだと思います。まだ試していませんが、おそらく MS Office のタスクバーでも同様だと思います。

簡単な回避方法は、フォームの生成時にフォームの Create メソッド(または C++ ならコンストラクタ)内で(centerWindow()関数を呼んで)中央寄せすることです。
Latest update of this entry: 2000-08-27
本家 The Delphi Bug List のエントリーはこちら
The Delphi Bug List 日本語訳 へ