DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hxh57738897
今日帖子: 25
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hklh2000 (凯哥) ▲▲▲▲▲ -
普通会员
2021/6/18 18:56:30
标题:
动态生成的窗体能不能保存相应的 unit1.pas 文件 浏览:951
加入我的收藏
楼主: 动态生成的窗体能不能保存相应的 unit1.pas 文件, 求大神指点一下。。。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/6/19 9:07:01
1楼: 可以, 自己枚举一下里头的组件名称和类型, 然后填写到一个固定格式的pas文件类定义public部分即可,uses的单元可以固定全都给uses进去,窗体实例直接保存到文件流就是对应的dfm文件
----------------------------------------------
-
作者:
男 hklh2000 (凯哥) ▲▲▲▲▲ -
普通会员
2021/6/19 12:13:22
2楼: 感谢 roadrunner 的指导, 能不能写几句明示一下。。

Tedit,Tlabel,Tdbgrid 分别是 USES  那个文件有没有函数能读取出来 。。。
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2021/6/19 23:28:05
3楼: unit uMainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TfrmMainForm = class(TForm)
    btn_Create_DFM_file: TButton;
    btn_Loading_DFM_file_as_a_Form: TButton;
    procedure btn_Create_DFM_fileClick(Sender: TObject);
    procedure btn_Loading_DFM_file_as_a_FormClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMainForm: TfrmMainForm;

implementation

{$R *.dfm}

procedure TfrmMainForm.btn_Create_DFM_fileClick(Sender: TObject);
var
  myNewDFM: TStream;
  myStreamToWorks: TStream;
begin
  try
    myNewDFM := TFileStream.Create('myNewDFMfile.dfm', fmCreate);
    myStreamToWorks := TMemoryStream.Create;
    try
      //
      myStreamToWorks.WriteComponent(frmMainForm);
      myStreamToWorks.Seek(0, soFromBeginning);
      //
      ObjectBinaryToText(myStreamToWorks, myNewDFM);
    except
      on E: Exception do
        ShowMessage('My Error: ' + E.message);
    end;
  finally
    myNewDFM.Free;
    myStreamToWorks.Free;
  end;
end;

procedure TfrmMainForm.btn_Loading_DFM_file_as_a_FormClick(Sender: TObject);
var
  myNewDFM: TStream;
  myStreamToWorks: TStream;
begin
  try
    myNewDFM := TFileStream.Create('myNewDFMfile.dfm', fmOpenRead);
    myStreamToWorks := TMemoryStream.Create;
    try
      myNewDFM.Seek(0, soFromBeginning);
      //
      ObjectTextToBinary(myNewDFM, myStreamToWorks);
      //
      myStreamToWorks.Seek(0, soFromBeginning);
      //
      frmMainForm.DestroyComponents; // destroying current comoponents...
      //
      // try comment this line to see that the components dont will be "loaded"...
      myStreamToWorks.ReadComponent(frmMainForm); // receiving the components definitions...
      //
    except
      on E: Exception do
        ShowMessage('My Error: ' + E.message);
    end;
  finally
    myNewDFM.Free;
    myStreamToWorks.Free;
  end;
end;

initialization

ReportMemoryLeaksOnShutdown := true;

finalization

end.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/6/20 10:57:37
4楼: 你把delphi所有的单元全都uses一次就可以了
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS