转贴
您可以覆写 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.