奇怪(100分)

  • 主题发起人 ling0303
  • 开始时间
L

ling0303

Unregistered / Unconfirmed
GUEST, unregistred user!
在多文档窗体中,怎样才能使子窗体一打开就最大化,象Query Analyzer一样,下面这种方法做到了,就是很难看!!可以看到子窗体最大化全过程,由原大小变为最大。纳闷啊。
谢谢!!!!!!!!!!!!
var
ChildForm:tForm2;
begin
ChildForm:=tForm2.Create(MainForm);
ChildForm.WindowState:=wsMaximized;
end;
 
我也想问这个问题,子窗体像SPY++一样?
 
本来就这样啊!你还想怎么样?
要不你把visabled设为false,然后最大了再显示看看行不?
 
子窗体是不能使用visible和hide的
 
何必最大化,窗体尺寸按屏幕改寸设置就行了。在FormCreate中写:
Form.Left := 0;
Form.Top := 0;
Form.Width := Screen.Width;
Form.Height := Screen.Height;
什么?挡住任务条了?别急别急。我这有个函数,保证不挡住任务条(如果任务条在的话):
procedure MaxizeForm(AForm: TForm);
var
A, B, C, D: Integer;
Rahmen: TRect;
begin
GetWindowRect(FTaskBarHandle, Rahmen);
A := Rahmen.Left + 2;
B := Rahmen.Top + 2;
C := Rahmen.Right - 2;
D := Rahmen.Bottom - 2;
AForm.Position := poDesigned;
if A = 0 then
begin
if B = 0 then
begin
if D < 480 then
begin
//顶部
AForm.Left := 0;
AForm.Top := D;
AForm.Width := C;
AForm.Height := FPixelHeight - D;
end else
begin
//左边
AForm.Left := C;
AForm.Top := 0;
AForm.Width := FPixelWidth - C;
AForm.Height := D;
end
end else
begin
//底部
AForm.Left := 0;
AForm.Top := 0;
AForm.Width := C;
AForm.Height := B;
end
end else
begin
//右边
AForm.Left := 0;
AForm.Top := 0;
AForm.Width := A;
AForm.Height := D;
end;
end;
 
楼主的意思可能是不想看到闪烁的最大化过程,这个好解决,只要在建子窗体前锁定
主窗体就可以了。如:
LockWindowUpdate(Handle);
ChildForm:=tForm2.Create(MainForm);
ChildForm.WindowState:=wsMaximized;
LockWindowUpdate(0);
另外,我想借问一下,有办法像SPY++一样,可以保存子窗体状态,即后面建的子窗体
会随已有子窗体的状态变化而变化。
 
var
ChildForm:tForm2;
begin
LockWindowUpdate(Handle);
ChildForm:=tForm2.Create(MainForm);
ChildForm.WindowState:=wsMaximized;
ChildForm.Show;
LockWindowUpdate(0);
end;
 
欧????YuZi手快呀![:D][8D]
 
在FormCreate中调用是看不到最大化过程的。
 
下面的方法最好,上面用的方法会使全屏幕都闪烁一下,
procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Perform(WM_SETREDRAW, 0, 0);
Child := TMDIChild.Create(Application);
Child.WindowState := wsMaximized;
Child.Caption := Name;
if FileExists(Name) then
Child.Memo1.Lines.LoadFromFile(Name);
Perform(WM_SETREDRAW, 1, 0);
RedrawWindow(Handle, nil, 0, RDW_FRAME + RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
end;
我靠,可算遇到一个我会的问题,嘿嘿[:D][:D]
 
各位,真的非常感谢!!小弟还有一个问题,怎样才能使主窗体不出现滚动条,在任何情况下。星期天还在公司搞了半天,头昏!
 
来自:沈前卫 时间:2000-3-21 22:56:47 ID:203593
告诉你一个非常简单的方法:
将Forms.Pas拷贝到你的工程文件的目录,并用Project菜单中的Add to Project....
将Forms.Pas加到你的工程文件中。改写procedure TCustomForm.CreateWnd;

FClientHandle := Windows.CreateWindowEx(WS_EX_CLIENTEDGE, 'MDICLIENT',
nil, WS_CHILD or WS_VISIBLE or WS_GROUP or WS_TABSTOP or
WS_CLIPCHILDREN or WS_HSCROLL or WS_VSCROLL or WS_CLIPSIBLINGS or
MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth, ClientHeight, Handle, 0,
HInstance, @ClientCreateStruct);
改为就搞定:
FClientHandle := Windows.CreateWindowEx(WS_EX_CLIENTEDGE, 'MDICLIENT',
nil, WS_CHILD or WS_VISIBLE or WS_GROUP or WS_TABSTOP or
WS_CLIPCHILDREN or WS_CLIPSIBLINGS or
MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth, ClientHeight, Handle, 0,
HInstance, @ClientCreateStruct);
 

Similar threads

I
回复
0
查看
500
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
892
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部