为什么我不能改变MDI窗体初如状态的大小?感觉太宽了,我想调窄一点,但是启动起来还是一样宽,不因我改变数值而改变?是怎么回事啊?
解决方案 »
- 怎样查找exe文件中的一段16进制数据并替换!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 使用 Indy的pop3 和TidMessage 接收邮件TidMessage在LoadFromStream 时出现uneven size in decodetostream 错误提示
- Socket异常的问题
- 有关MapInfo Professional 7.0?
- 如何在window进程中隐藏程序?
- 如何拦截程序启动,并出个提示???
- 如何把一个30分钟的mp3文件,每五分钟分一个文件就行,随便对等分几段也可
- Android控的自白:这个世界早晚全是机器人的
- (斑竹留情)多谢各位帮我评述简历,再送分!一天结贴
- 为什么总是返回cursor not returned from query
- 操作DBGrid时,如何让 ClientDataSet.RecNo 不动??
- 哪位有用过TDBGridEh导出功能?
procedure TMainForm.CreateMDIChild(const Name: string;AChildFormClass: TFormClass);
var
i:Integer;
begin
For i := 0 To MDIChildCount - 1 Do
Begin
If SameText(MDIChildren[i].ClassName, AChildFormClass.ClassName) Then
Begin
MDIChildren[i].BringToFront;
Exit;
End;
End;
AChildFormClass.Create(Application).Caption:=Name;end;
如果只是一個簡單MDI子窗體,不可能不會是設計期的大小。除非你的程序有特別處理。
看你帖出來的代碼,猜測你的程序有 窗體基類的,建議你查一下基類窗都做些什么....
Create,Show 事件中都没有任何代码!!!
你可以试着把你的主窗体宽度变化一下,看看你的子窗体宽度变化不。我是说系统的MDIChild窗口基类里有窗口大小调整的代码。你查看下Forms.pas
你看看,但愿对你有帮助。procedure CreateChild(nd:TTreeNode; fm:Integer; note:Boolean);
var cfm:TBaseChildForm;
begin
cfm := nil;
MainForm.LockClientWindowUpdate;
Screen.Cursor := crHourGlass;
try
case fm of
0 : cfm := TedForm.Create(MainForm);
1 : cfm := TwbForm.Create(MainForm);
2 : cfm := TimForm.Create(MainForm);
3 : cfm := TdocForm.Create(MainForm);
end;
if cfm = nil then Exit; with cfm do
begin
eoForm := MainForm.CurESOForm;
Node := nd;
IsNote := note;
IsChildfm := True;
DHMgr.PIRec := nd.Data;
FormStyle := fsMDIChild;
if MainForm.btmin.Visible then Exit;
Left := 1;
Top := 1;
Height := MainForm.pnlLeft.Height - 6;
Width := MainForm.ClientWidth - MainForm.pnlLeft.Width - 8;
end;
finally
Screen.Cursor := crDefault;
MainForm.UnlockClientWindowUpdate;
end;
end;
我只用了这句来创建窗体
.
.
.
aFrm := TFormClass(findClass(frmname));
CreateMDIChild(aCaption,aFrm);procedure TMainForm.CreateMDIChild(const Name: string;AChildFormClass: TFormClass);
var
i:Integer;
begin
For i := 0 To MDIChildCount - 1 Do
Begin
If SameText(MDIChildren[i].ClassName, AChildFormClass.ClassName) Then
Begin
MDIChildren[i].BringToFront;
Exit;
End;
End;
AChildFormClass.Create(Application).Caption:=Name;end;
由于Delphi会预先设置MDI子窗体的大小,并根据这个大小预置新的MDI子窗体的位置,然后才轮到子窗体的Oncreate事件,因此你在子窗体的Oncreate事件里面重新指定子窗体的大小和位置是管用的。
Width:=200;
Height:=200;
运行后一切ok。难道是Delphi版本的问题?
建议LZ用和我相同的方法新建一个MDI工程进行一下试验。如果试验的结果是ok的,而LZ的代码仍然不起作用,就得猜测可能在LZ的程序中其它什么地方有对子窗体的重置代码。