Delphi中TRzPageControl实现多窗口的融合窗口详细方法

GZSYSTEM 2011-11-03 12:49:46
请求前辈帮忙详细讲解如何把现有的系统(只能单窗口操作,调用方式为showmodal)改为show后会只能看到最前面的窗口.把子窗口的FormStyle属性改为mdichildform后无法运行(只能是fsNormal).
在网上看到说TRzPageControl可以实现多窗口的融合窗口,不知详细的方法是如何操作的?

由于本人只能发100分的贴子,要是谁能帮我实现了我结贴时再加80分(哈哈,再多就没有了,因为我只有180分)!
...全文
1540 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoudagezhoudage 2014-07-07
  • 打赏
  • 举报
回复
按高手 提供的方法 TRzPageControl多窗口的融合 成功, 那么请问 如何 取消 多窗口的融合(关闭已融合的窗口)...我 取消不了了.....
清风古韵 2013-06-27
  • 打赏
  • 举报
回复
你这个弄的太复杂了,窗体容合已经实现了,只是你的代码和你窗体控件有冲突,你改下你的代码就行了。
GZSYSTEM 2011-11-17
  • 打赏
  • 举报
回复
难道就没有解决办法吗?
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 tgbd 的回复:]

你是不是想让控件获取焦点啊,用例 edit1.setfocus;
[/Quote]

你说得对,就是。不过除了改成****.setfocus;有没有别的办法?因为使用FocusControl(***)太多了。
另外除了FocusControl(***)会有问题外还有其它的问题哦?经单步调试发现走到这里:if flbm.ADOQuery1parent.IsNull then 也会出现上图这个提示。有没有人知道这是什么意思?该如何解决?
tgbd 2011-11-05
  • 打赏
  • 举报
回复
你是不是想让控件获取焦点啊,用例 edit1.setfocus;
tgbd 2011-11-05
  • 打赏
  • 举报
回复
FocusControl(***)改成****.stFocus;你是不是这个意思,让某控件获取焦点?
想到才能做到 2011-11-05
  • 打赏
  • 举报
回复
朋友图呢?帮你顶了
想到才能做到 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 gzsystem 的回复:]

http://hi.csdn.net/attachment/201111/5/6256647_1320482906pUBb.jpg
[/Quote]

图呢?
想到才能做到 2011-11-05
  • 打赏
  • 举报
回复
朋友图呢?帮你顶了
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
http://hi.csdn.net/attachment/201111/5/6256647_1320482906pUBb.jpg
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
使用tgbd提供的方法已能将窗口融合于gzpagecontrol,但有错误提示。如下图:

GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tgbd 的回复:]

再浪费一下CSDN的资源,刚做了简单的测试给你。
Delphi(Pascal) code

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RzTabs;

type
TForm1 =……
[/Quote]

非常感谢你的热心解答,目前已能运行并且能调用。
不过有一点我搞不明白,为什么以这种方式打开窗口后凡是遇到FocusControl(***) ;都要出错呢?有没有办法可以解决?
tgbd 2011-11-05
  • 打赏
  • 举报
回复
再浪费一下CSDN的资源,刚做了简单的测试给你。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RzTabs;

type
TForm1 = class(TForm)
page1: TRzPageControl;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure PageAddForm(mform:TForm;TmFormClass:TClass);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

{ TForm1 }

procedure TForm1.PageAddForm(mform: TForm; TmFormClass: TClass);
begin
application.CreateForm(TcomponentClass(TmFormClass),mForm);
// mForm.show;
mForm.ManualDock(page1);
mForm.Visible :=true; //这种方法的效果比用 show的效果要好一些
page1.ActivePageIndex :=page1.PageCount-1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
pageAddForm(Form2,TForm2);
end;

end.


============================

unit Unit2;

interface

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

type
TForm2 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

end.


GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
我的主窗口为mainform
目前过程如下:
procedure Tmainform.PageAddForm(aPage:TRZpageControl;aForm:TForm;TaFormClass:TClass);
begin
application.CreateForm(TComponent(TaFormClass),aForm);
aForm.MaualDock(aPage)); //融合至pageControl,
aForm.Visible:=true; //这个比用 show效果更好
aPage.ActivePageindex:=aPage.PageCount-1;
end;
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 tgbd 的回复:]

因为你是作为主表单的 局部过程,所以实现部分要加上主表单的类名

procedure Tfm_MainForm.PageAddForm(aPage:TRZpageControl;aForm:TForm;TaFormClass:TClass);
begin
......
end;
[/Quote]

有加:Tmainform.
tgbd 2011-11-05
  • 打赏
  • 举报
回复
因为你是作为主表单的 局部过程,所以实现部分要加上主表单的类名

procedure Tfm_MainForm.PageAddForm(aPage:TRZpageControl;aForm:TForm;TaFormClass:TClass);
begin
......
end;
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tgbd 的回复:]

比如这个过程是建立在主程序mainform中
将这个过程定义在private中

比如在button1的OnClick调用:

PageAddForm(aPage,Form2,TForm2);//其中aPage就是你想融合的目标rzPageControl
[/Quote]

你好,加了你写的过程后运行报错:
[错误] mainformpas.pas(709): Incompatible types: 'TComponentClass' and 'TComponent'
[错误] mainformpas.pas(710): Undeclared identifier: 'MaualDock'
[错误] mainformpas.pas(710): 'END' expected but ')' found
tgbd 2011-11-05
  • 打赏
  • 举报
回复
比如这个过程是建立在主程序mainform中
将这个过程定义在private中

比如在button1的OnClick调用:

PageAddForm(aPage,Form2,TForm2);//其中aPage就是你想融合的目标rzPageControl
GZSYSTEM 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tgbd 的回复:]

提供一个过程,供参考:
Delphi(Pascal) code

procedure PageAddForm(aPage:TRZpageControl;aForm:TForm;TaFormClass:TClass);
begin
application.CreateForm(TComponent(TaFormClass),aForm);
aForm.MaualDock(aPag……
[/Quote]

请问如何在打开新窗口的事件中调用你的过程?老是报错呀?可否举个调用实例?比如我想打开FORM2窗口是怎么调用的?
加载更多回复(8)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧