大蝦們幫幫我吧﹐不好意思我沒有積分了﹕怎么才能使窗口的大小不會改變﹖(10分)

  • 主题发起人 主题发起人 胡圖崇
  • 开始时间 开始时间

胡圖崇

Unregistered / Unconfirmed
GUEST, unregistred user!
這個主窗口總是雙擊它會變小﹐怎么樣才能使它的大小不能改變﹖
請大蝦們幫幫我﹗
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Constraints.MaxHeight:=Height;
Constraints.MaxWidth:=Width;
Constraints.MinHeight:=Height;
Constraints.MinWidth:=Width
end;
 
你好﹐還是會出現一個情況﹕雙擊窗體﹐會使窗體的位置變動
怎么辦﹖
 
将它设置为对话窗口
 
将form的BorderIcons属性中
biSystemMenu设为True,
biMinimize设成False
biMaximize设成False
biHelp设成False
试试
 
謝謝2位﹐效果一樣的﹗
To LeeChange:
是不是要定好它的坐標﹖怎么設置呢?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
OriginalLeft, OriginalTop: Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Constraints.MaxHeight:=Height;
Constraints.MaxWidth:=Width;

OriginalLeft:=Left;
OriginalTop:=Top
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Left:=OriginalLeft;
Top:=OriginalTop
end;

end.
 
哎﹐俺水平太菜了﹐還是沒有弄出來﹐這些height,width,top,left是用系統的還是自己賦值給它呢﹗我就用系統的﹕
Constraints.MaxHeight:=Height;
Constraints.MaxWidth:=Width;
OriginalLeft:=Left;
OriginalTop:=Top
還是不行﹗
 
To LeeChange:
謝謝你的幫助﹐功能已實現﹐但有一個缺陷﹕第一次雙擊窗口時﹐窗口會先變小一瞬間又回復到設置的固定大小﹗第二次就不會了。
這個可能就是賦值問題吧﹐但是在Formcreate里面對constraints.minwidth,constraints.minheight都賦值了啊﹗
這是什么原因呢﹖
 
把 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.
 
謝謝wqhatnet相信的解答﹐但是按照你的解決方法不行﹐因為我控制的是MDI主窗口﹐如果全部回應滑鼠的Client事件的話﹐我連主菜單都不能點擊了﹗這個該怎么處理呢﹖
 
后退
顶部