把 Form 控制成不能放大/缩小/移动/关闭
我想把 Form 控制成不能放大/缩小/移动/关闭的方式运作可是用 Delphi 的话呢,一直没办法作到不能关闭(把 systemmenu 拿掉会出问题)也没办法作到不能移动,user 常会把我的画面拉着到处跑..再跟我说不能输入,看不见....
请各位帮我想想办法吧...
您可以覆写 CreateParams() 这个 TWinControl 的虚拟程序, 改变 form的 wc.Style, 将 WS_SYSMENU 这个旗标解除, 这样, 就不会有左上角的SystemMenuBox 了.
至於不能移动.缩小/放大, 可以自已拦下 WM_NCHITTEST, 然後一概回应滑鼠点在视窗的 Client 区域, 相信这个视窗就呆呆的不会动了.
详情可以查一下 Win32API Help 的 CreateWindow() 与 WM_NCHITTEST 的说明.
信末是我试你问题时作的程式, 请叁考看看; 另外, 视窗世界已经开始其传统, 造出这样一个视窗, 实在不能算高明, 所以, 最好还是能多与使用者沟通.
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;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
Style := Style xor WS_SYSMENU; // 去除 SystemMenuBox
// 如果要将视窗极大化, 请叁考以下这行
//Style := Style xor WS_SYSMENU or WS_MAXIMIZE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close; // 不可少, 因为已经使用者已经没有其他方法关闭此视窗了
end;
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
inherited;
// 这样, 放大/缩小/移动都不可能了...
Msg.Result := HTCLIENT;
end;
end.