• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi cxpagecontrol融合窗体

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

功能说明:

 一、在需要融合的每个窗体加一句

initialization
  RegisterClasses([TFrmDataDict]); //类名

二、cxpagecontrol融合窗体,在调用时

  1. 如果不存在,创建窗口并显示到cxTabsheet中;

  2.如果已存在,则找到窗体并显示

//ClassName窗体类名,Caption窗口名称,Args参数
function TFrmMain.OpenForm(ClassName: string; Caption: string; Args: array of Variant): TcxTabSheet;
var
  I: Integer;
  aSheet: TcxTabSheet;
  aForm: TBaseForm; //继承自TForm的基类窗体,定义了一个procedure Execute(const Args: array of Variant); virtual; 所有窗体从此类窗体继承
begin
  Result := nil;
  //如果模块已存在,则显示
  for I := 0 to cxPageControl.PageCount - 1 do
  begin
    if cxPageControl.Pages[I].Name = 'TabSheet_' + ClassName then
    begin
      cxPageControl.Pages[I].Show;//或者 cxPageControl.ActivePageIndex:=i;
      //如果有传参数,则调用Execute
      if Length(Args)>0 then
      begin
        Application.ProcessMessages;
        TBaseForm(cxPageControl.Pages[I].Tag).Execute(Args);  //传参数并调用Execute方法,方法名可以TBaseForm自定义
      end;
      Result:=cxPageControl.Pages[I];
      Exit;
    end;
  end;

  //窗体不存在
  if GetClass(ClassName) = nil then
  begin
    DialogInformation('' + ClassName + '】不存在或未注册!');
    Exit;
  end;

  //不存在则创建
  aSheet := TcxTabSheet.Create(Self);
  aSheet.Name := 'TabSheet_' + ClassName;
  aSheet.PageControl := cxPageControl;
  aSheet.Align := alClient;
  cxPageControl.ActivePage := aSheet;
  //创建窗口
  try
    aForm := TFormClass(FindClass(ClassName)).Create(self) as TBaseForm;
    aForm.Name := ClassName + 'Ex';
    aForm.Parent := aSheet;
    aForm.BorderStyle := bsNone;
    aForm.Align := alClient;
    aForm.Show;
    if Caption='' then Caption:= aForm.Caption; 
    aSheet.Caption := Caption;
    aSheet.Tag := THandle(aForm);
    Application.ProcessMessages;      //如果下面这句执行较慢,可加这一条先让画面显示出来
    TBaseForm(aForm).Execute(Args);   //创建时,传参并调用
    Result := aSheet;
  except
    FreeAndNil(aForm);
    FreeAndNil(aSheet);
    Abort;
  end;
end;

 

调用方法

procedure TFrmMain.Button1Click(Sender: TObject);
begin
   //方式一, cxtabsheet的caption取TFrmQueryOrder的caption
   OpenForm('TFrmQueryOrder');
   //方式二, cxtabsheet的caption=订单查询
   OpenForm('TFrmQueryOrder','订单查询');
   //方式三, 传参并调用
   OpenForm('TFrmQueryOrder','',['ORD1001',3,DateStart, DateEnd]);
   //方式四,直接调用某个窗体的方法
   TFrmQueryOrder(OpenForm('TFrmQueryOrder').tag).ReFlashRecord; 
end;

//方式三的响应,在TFrmQueryOrder中实现父类方法
procedure Execute(const Args: array of Variant); override;

procedure TFrmQueryOrder.Execute(const Args: array of Variant);
var
  OrderNO:string;
  Start,End:TdateTime;
  order_type:integer;
begin
   if Length(Args)>0 then
   begin
      OrderNO:=Args[0];  //订单号
      order_type:=Args[1]; //订单类型
      Start:=Args[2];  //开始日期
      End:=Args[3];    //结果日期

      ...........根据参数查询,略..........
   end;
end;

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Matlab求三重积分发布时间:2022-07-18
下一篇:
matlab下二重积分的蒙特卡洛算法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap