Delphi2007においてForm1.WindowState=wsMaximizedで設計したとき、
下記コードで最大化したときのサイズが取得できません。
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := IntToStr(self.ClientWidth);
Edit2.Text := IntToStr(self.ClientHeight);
end;
何か方法があるでしょうか。
これでは?
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text := IntToStr(self.ClientWidth);
Edit2.Text := IntToStr(self.ClientHeight);
end;
FormShowでも駄目でした。
Delphi7ではうまくいくのですが、
制御方法が変わったのでしょうか。
FormShowで
IntToStr(Screen.width)でうまくいきます。
こんにちは.Mr.XRAYです.
>制御方法が変わったのでしょうか。
制御方法が変わった,と言えば言えなくもないですが,
Delphi 2007以降では,Vista以降のOSのアプリケーションウィンドウに
対応するため,内部的に処理が変更されています.
OnShowでは取得できない場合があります.
取得した値をどんな目的で利用するかにもよりますが,
CM_SHOWINGCHANGEDメッセージかOnResizeイベントで取得してみてください.
今回の件で理解されたと思いますが,実行環境の記述は重要です.
「実行環境」には,OSも含まれます.
質問の趣旨がスクリーンのサイズ取得なのであればOnShowイベント内で
以下のように取得可能です(高さは,screen.Height)
>IntToStr(Screen.width)でうまくいきます。
参考までに.
http://ht-deko.minim.ne.jp/tech045.html#tech095
(個人的には,ちょっとキツイ内容とは思っていますが)
>Delphi 2007以降では,Vista以降のOSのアプリケーションウィンドウに
>対応するため,内部的に処理が変更されています.
根本的に方法を変えないと駄目なようですね。
最初のコードに書きましたが、フォーム作成直後のクライアント領域の
幅高が必要なのですが、Screenサイズから求めるとなるとかなり手ごわそうです。
情報ありがとうございます。
Form表示後に処理を行う
http://delfusa.main.jp/delfusafloor/technic/technic/033_FormShowAfterEvent.html
こういうのでどうでしょうか?