我們可以通過設置窗體的屬性以及編程的方法,限制和控制窗體的變化。如讓窗體不能最小化、最大化、移動,甚至不能關閉。
使用Form的BorderIcon屬性,我們可設置窗體是否具有系統菜單(biSystemMenu)、最小化按鈕(biMinimize)、最大化按鈕(biMaximize)和幫助按鈕(biHelp)。
BorderIcon屬性的這4個子屬性均只有True和False屬性。默認情況下四個子屬性均為True。若將biSystemMenu屬性設置為False,則不管其他屬性如何設置,窗體此時不僅沒有系統菜單,連最大最小按鈕也沒有,窗體不能最小化,也不能關閉。不管如何設置BorderIcon屬性,窗體都能通過拖動邊界來改變大小。
使用Form的BorderStyle屬性,可以設置窗體的邊界風格。常用的選項有四種:BsDialog(對話框邊界)、bsNone(無邊界)、bsSingle(單線邊界)和bsSize(可改變大小的標准邊界)。如果設置BorderStyle屬性為BsDialog,則不能通過拖動邊界來改變窗體大小,另外如果此時BorderIcon的biHelp子屬性為True,窗體將顯現出幫助按鈕。如果設置BorderStyle屬性為bsSingle,也不能通過拖動邊界來改變窗體大小,但此時具有最大、最小和關閉按鈕。
通過Form的Position屬性可設置窗體的初始位置,如選擇DesktopCenter為桌面中心,ScreenCenter為屏幕中心,等等。
如何不讓窗體移動能,這是不能通過屬性設置來實現的。我們可以通過編程來實現,攔下 WM_NCHITTEST 消息, 對該消息的處理為:一概回應鼠標點在窗口的 ClIEnt 區域, 相信這個視窗就呆呆的不會動了。
例程如下:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private { Private declarations }
procedure WMNCHitTest(var Msg: TMessage);
message WM_NCHITTEST; public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close; // 不可少, 因為已經沒有其他方法能關閉此窗口了
end;
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
inherited; // 這樣,移動就不可能了...
Msg.Result := HTCLIENT;
end;