怎样使一个窗口变成另一个窗口中panel的子窗口?(10分)

  • 主题发起人 主题发起人 cjh_xf
  • 开始时间 开始时间
to cjh_xf:
>> 按照你的方法,在form1中的panel1和panel2中显示form2和form3,还是会出现showform的声明
>>错误:
>>Unsatisfied forward or external declaration: 'TForm1.ShowForm'
把ShowForm的声明放到全局或者实现部分,而不是TForm1的就可以了,或者是把
ShowForm的实现代码部分变为procedure TForm1.ShowForm(...)就可以了,如果这都不能自己
解决,还是先了解Delphi再说吧[:)]
 
我的一个程序就是用这种方法显示窗口的。
源程序在:
http://wolfsoft.nugoo.com/srcdetail.asp?flag=2&id=85
 
参照:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1084743
 
to wind2000:
按照你的方法做的如何释放panel上的Form,
让panel上创建其它Form呢?
用Form2.Free不行,没有反应!
 
看看Delphi 5 开发人员指南是怎么写的吧!
{
Copyright ?1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit ChildFrm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls, Menus;

type

TChildForm = class(TForm)
private
FAsChild: Boolean;
FTempParent: TWinControl;
protected
procedure CreateParams(var Params: TCreateParams)
override;
procedure Loaded
override;
public
constructor Create(AOwner: TComponent)
overload
override;
constructor Create(AOwner: TComponent
AParent: TWinControl)
reintroduce
overload;

// The method below must be overridden to return either the main menu
// of the form, or nil.
function GetFormMenu: TMainMenu
virtual
abstract;
function CanChange: Boolean
virtual;
end;

var
ChildForm: TChildForm;

implementation

{$R *.DFM}
constructor TChildForm.Create(AOwner: TComponent);
begin
FAsChild := False;
inherited Create(AOwner);
end;

constructor TChildForm.Create(AOwner: TComponent
AParent: TWinControl);
begin
FAsChild := True;
FTempParent := aParent;
inherited Create(AOwner);
end;

procedure TChildForm.Loaded;
begin
inherited;
if FAsChild then
begin
align := alClient;
BorderStyle := bsNone;
BorderIcons := [];
Parent := FTempParent;
Position := poDefault;
end;
end;

procedure TChildForm.CreateParams(var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
if FAsChild then
Params.Style := Params.Style or WS_CHILD;
end;

function TChildForm.CanChange: Boolean;
begin
Result := True;
end;

end.
 
那么它如何调用和释放呢?
请给出MainForm的程序,谢谢!
 
Delphi 5 开发人员指南中父窗体创建和释放自窗体的过程:
创建:
procedure TMainForm.btnChildClick(Sender: TObject);
begin
if not Assigned(FNewChildForm) then
begin
FNewChildForm := TNewChildForm.Create(Application, pnlParent);
FNewChildform.Show;
pnlParent.Height := pnlParent.Height-1;
end;
end;
释放:
procedure TMainForm.btnFreeClick(Sender: TObject);
begin
if Assigned(FNewChildForm) then
begin
FNewChildForm.Free;
FNewChildform := nil;
end;
end;
 
Delphi 5 开发人员指南第四章有讲的,
用frame和childform都有!
我已经把我的程序全改了!
我强烈建议你去看看!
大富翁的资料下载里就有!
 
这个简单。要源代码我给你们。
 
只是如果按照指南上的方法,如果你在子窗口中写Close之后,用assigned()判断就应该会发现
还存在这个子窗口吧。
 
mdc:给我一个,谢谢!
jeremy_z@sina.com
 
强烈建议使用frame!!!!
 
frame 没有oncreate,onshow,onactive,onclose,ondestory一类的属性,感觉上很不方便!
 
使用FRAME可以,
请参考DELPHI自带例子:Frames
 
很简单,设有两个窗口,form1,form2
在form2的create中,setparent(form1.panel1)
并设form2.borderstyle为none
align=alclient,
ok,一切搞定!
 
我来贴一段代码吧:
注意,子窗体也要用一个panel控件,所有东东都要放到这个panel上。
调用代码:ShowPanel(fmStandard.pnForm);
可以在同一个panel上显示任意子窗体
fmstandard 为子窗体. pnform为子窗体上的panel.
本程序在delphi6 win98下调试通过。

pnParent: TPanel;//为主窗体中要显示子窗体的panel;
procedure TMainForm.ShowPanel(APanel: TPanel);
var
I: Integer;
AControl: TControl;
begin
APanel.Parent := pnParent;
APanel.Left := 0;
APanel.Top := 0;

APanel.Visible := True;
for I := 0 to pnParent.ControlCount - 1 do
begin
AControl := pnParent.Controls;
if (AControl is TPanel) and (AControl <> APanel) then
AControl.Visible := False;
end;
end;
 
多人接受答案了。
 
有源码吗,谢谢
ganlg@yahoo.com.cn
 
后退
顶部