Form の大きさを制限する
|
93 |
FormSizeLimit |
動作確認 |
Delphi2007 |
更新日 |
2010/06/23(水) |
FormのConstraintsプロパティは正しくFormのサイズを制限してはくれません。
ConstraintsのMinHeight/MinWidthを設定しても
ウィンドウの左上のドラッグしてリサイズすると
右下にスライドするような奇妙な動作をします。(D5/D6/D2005/D2007で確認済み)
自動コンポーネント配置処理によるものでしょうが
もっとまともにサイズを制限してほしいです。
まともにFormサイズ制限するためには
WM_GetMinMaxInfoメッセージを使って実装します。
────────────────────
type
TForm1 = class(TForm)
private
procedure WM_GetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
public
end;
(*-------------------------------
//ハンドルからWindowStateを調べる
引数説明: WndHandle: ハンドル
-------------------------------*)
function GetWindowState(WndHandle: HWnd): TWindowState;
var
pw : TWINDOWPLACEMENT;
begin
pw.length := SizeOf(TWINDOWPLACEMENT);
GetWindowPlacement(WndHandle, @pw);
case pw.showCmd of
SW_SHOWNORMAL:{=1}
Result := wsNormal;
SW_SHOWMINIMIZED: {=2}
Result := wsMinimized;
SW_MAXIMIZE: {=3}
Result := wsMaximized;
else
raise Exception.Create('WindowStateのエラー'+IntToStr(pw.showCmd));
end;
end;
procedure TForm1.WM_GetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
with Msg.MinMaxInfo^ do
begin
ptMinTrackSize := Point(200, 200); //マウス操作での最小サイズ
if GetWindowState(Self.Handle) <> wsMaximized then
ptMaxTrackSize := Point(300, 300); //マウス操作での最大サイズ
ptMaxSize := Point(500, 500); //最大化時サイズ
ptMaxPosition := Point(300, 300); //最大化時のForm位置
end;
inherited;
end;
────────────────────
マウストラック時の最大サイズは ptMaxTrackSize で指定します。
この値はFormのWindowStateが最大化ではない時だけ使います。
そうしなければ、最大化ボタンを押すなどで最大化したときも
ptMaxSizeの値ではなく
ptMaxTrackSizeの値によって制限されてしまいます。
ptMaxSizeを指定した場合は
なぜか、最大化時にはFormが移動可能になり、
ptMaxPositionの指定値が意味をなさなくなるようです。
それぞれの値で x,y の一方だけ指定したい場合は
ptMinTrackSize.x := 100;
などと指定してください。
例文では
with Msg.MinMaxInfo^ do
begin
ptMinTrackSize := ...
とやっていますが
Msg.MinMaxInfo^.ptMinTrackSize := ...
Msg.MinMaxInfo.ptMinTrackSize := ...
このような書き方も可能です。
参考────────────────────
[Delphi:47828] Re: フォームサイズ固定
DelphiAcidFloor
http://homepage2.nifty.com\boheme\delphi\tips\tec0700.htm
BorlandDelphiQ&A
フォームのサイズを変更する時の最大値と最小値を制御するには
http://www.borland.co.jp/qanda/delphi/d0005105.html
現在のリンク先はこちら
旧Delphi FAQ - VCL(3)
http://support.embarcadero.com/article/37436
フォームのサイズを変更する時の最大値と最小値を制御するには (98/10/05)
フォームのサイズを変更できないようにするにはどうしますか?
http://www.borland.co.jp/qanda/delphi/d0002876.html
現在のリンク先はこちら
旧Delphi FAQ - Windows API
http://support.codegear.com/article/37295
フォームのサイズを変更できないようにするにはどうしますか?
|