Entry No.
470
|
VCL - 一般 - フォーム
フォームが最大化/最小化/リストアされるとき、FormResize イベント内でのフォームの WindowState プロパティは正しい値ではない。WindowState は FormResize イベントの後に更新されている。
|
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 |
Absent |
Absent |
Absent |
Absent |
Absent |
Exists |
Exists |
Exists |
Exists |
Unknown |
Unknown |
Unknown |
Unknown |
Unknown |
N/A |
|
(訳注:5.01 日本語版では Exists でした)
|
解説
|
|
Reported by David Willis
再現するには、最大化/リストアの際に、FormResize イベント内で WindowState プロパティの値を確認してください。値は間違っています。Delphi 1.02 と Delphi 3 では正しい値を返します。添付のサンプルコードは、フォーム上のラベルを現在の WindowState の値で更新します。最大化とリストアを試してみてください。(訳注:添付ファイルは本家へのリンクです)
このバグを修正するには、FORMS.PAS を編集する必要があります。私は WM_SIZE メッセージをトラップすることで回避できると確信していますが、VCL のコードを修正しない回避方法は試していません。
TCustomForm.WMSize プロシージャを、WindowState プロパティをセットしている case 文の後で "inherited" が呼ばれるように修正する必要があります。
procedure TCustomForm.WMSize(var Message: TWMSize);
begin
{inherited;} // この行を削除
if not (csDesigning in ComponentState) then
case Message.SizeType of
SIZENORMAL: FWindowState := wsNormal;
SIZEICONIC: FWindowState := wsMinimized;
SIZEFULLSCREEN: FWindowState := wsMaximized;
end;
inherited; // ここに移動
RequestAlign;
......
私は US 英語版 Delphi 4.0 Professional に 1998/08/12 のパッチを当てたバージョンを使用しています。
|
|
ユーザーからのコメント
|
Thad Suits
29 Dec 2003 09:46 PM GMT
|
このバグは Delphi 6.0 でも存在します。残念なことに、Delphi 4 用に提案されている上記の回避方法は Delphi 6 では使えませんでした。更新された回避方法を知ることが出来ればうれしいです。
|
|