根据.DFM文件动态生成窗体以及在之前先必须注册窗体中使用到的类

根据.DFM文件动态生成窗体之前要先注册窗体中使用到的类。

在脚本中要使用窗体中的控件对象之前也要先注册这些控件对象。

 

unit UClass;
{$DEFINE EHLIB}
{$DEFINE RAIZE}
{$DEFINE DBANYWHERE}
{$DEFINE TMS}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Contnrs,
  ActiveX,
  ActnList,
  ADODB, DB,
  Buttons,
  Clipbrd,
  CommCtrl,
  ComObj,
  ComServ,
  DateUtils,
  DBCtrls,
  DBGrids,
  DBTables,
  ExtCtrls,
  Grids,
  IniFiles,
  Isapi,
  Isapi2,
  Mask,
  Math,
  Menus,
  Midas,
  MMSystem,
  MPlayer,
  msxml,
  OleDB,
  OpenGL,
  Printers,
  Registry,
  RichEdit,
  ScktComp,
  ShellAPI,
  ShlObj,
  SvcMgr,
  SyncObjs,
  UrlMon,
  WinInet,
  WinSock,
  WinSpool
  {$IFDEF RAIZE}
  ,rzedit
  ,rzpanel
  ,rzdbedit
  ,rzbtnedt
  ,rzsplit
  ,rzgrids
  ,rzbutton
  ,rztray
  ,rzbhints
  ,rzdbgrid
  ,rzdbcmbo
  {$ENDIF}
  {$IFDEF EHLIB}
  ,DBGridEh
  ,PrnDbgeh
  {$ENDIF}
  {$IFDEF TMS}
  ,atPascal
  ,atScript
  {$ENDIF}
  {$IFDEF DBANYWHERE}
  ,remoteStoredProc
  ,remoteupdateSql
  ,remoteUdpDataset
  ,remoteudpconnection
  ,applicationupdate
  ,remotetcpconnection
  {$ENDIF}
  ,XPMan
  ;

procedure RegClass;                                                    // 注册支持的类别
procedure LoadFromDFM(const DFMname: string; Sender: TComponent);      // 装载DFM脚本生成界面
procedure PianLiComps(Owner: TComponent; scripter: TatPascalScripter); // 遍历所有控件,脚本加载之

var
  ClassArr: Array[0..85] of TPersistentClass;

implementation

procedure PianLiComps(Owner: TComponent; scripter: TatPascalScripter);
var
  i, t: Integer;
begin
  if owner = nil then exit;
  for i := 0 to Owner.ComponentCount - 1 do
  begin
    scripter.AddComponents(Owner.Components[i]);
    if (Owner.Components[i] is TPanel) or (Owner.Components[i] is TScrollBox)
    then
      if TWinControl(Owner.Components[i]).ControlCount > 1 then
        for t := 0 to TWinControl(Owner.Components[i]).ControlCount - 1 do
          Scripter.AddComponents(TWinControl(Owner.Components[i]).Controls[t]);
  end;
end;

procedure RegClass;
begin
  ClassArr[0] := TAnimate;
  ClassArr[1] := TButton;
  ClassArr[2] := TCheckBox;
  ClassArr[3] := TColorDialog;
  ClassArr[4] := TComboBox;
  ClassArr[5] := TComboBoxEx;
  ClassArr[6] := TCommonCalendar;
  ClassArr[7] := TCommonDialog;
  ClassArr[8] := TCoolBand;
  ClassArr[9] := TCoolBands;
  ClassArr[10] := TCoolBar;
  ClassArr[11] := TDateTimePicker;
  ClassArr[12] := TEdit;
  ClassArr[13] := TFindDialog;
  ClassArr[14] := TFontDialog;
  ClassArr[15] := TForm;
  ClassArr[16] := TFrame;
  ClassArr[17] := TGroupBox;
  ClassArr[18] := THeaderControl;
  ClassArr[19] := TImageList;
  ClassArr[20] := TLabel;
  ClassArr[21] := TListBox;
  ClassArr[22] := TListItem;
  ClassArr[23] := TListView;
  ClassArr[24] := TMemo;
  ClassArr[25] := TMonthCalendar;
  ClassArr[26] := TOpenDialog;
  ClassArr[27] := TPageControl;
  ClassArr[28] := TPageScroller;
  ClassArr[29] := TPrintDialog;
  ClassArr[30] := TProgressBar;
  ClassArr[31] := TRadioButton;
  ClassArr[32] := TReplaceDialog;
  ClassArr[33] := TRichEdit;
  ClassArr[34] := TSaveDialog;
  ClassArr[35] := TScrollBar;
  ClassArr[36] := TScrollBox;
  ClassArr[37] := TStaticText;
  ClassArr[38] := TStatusBar;
  ClassArr[39] := TStatusPanel;
  ClassArr[40] := TTabControl;
  ClassArr[41] := TTabSheet;
  ClassArr[42] := TToolBar;
  ClassArr[43] := TToolButton;
  ClassArr[44] := TTrackBar;
  ClassArr[45] := TTreeNode;
  ClassArr[46] := TTreeView;
  ClassArr[47] := TUpDown;
  ClassArr[48] := TPanel;
  ClassArr[49] := TBitBtn;
  CLassArr[50] := TShape;
  ClassArr[51] :=TRadioGroup;
  ClassArr[52] :=TImage;
  ClassArr[53] :=TMediaPlayer;
  ClassArr[54] :=TPaintBox;
  ClassArr[55] :=TSpeedButton;
  ClassArr[56] :=TMainMenu;
  ClassArr[57] := TMenuItem;
  ClassArr[58] := TDBGrid;
  ClassArr[59] := TDBNavigator;
  ClassArr[60] := TDataSource;
  ClassArr[61] := TADOTable;
  ClassArr[62] := TDBGridEh;
  ClassArr[63] := TPrintDBGridEh;
  ClassArr[64] := TRzPanel;
  ClassArr[65] := TRzToolbar;
  ClassArr[66] := TRzStatusBar;
  ClassArr[67] := TRzButtonEdit;
  ClassArr[68] := TRzEdit;
  ClassArr[69] := TRzDBEdit;
  ClassArr[70] := TRzButton;
  ClassArr[71] := TRzBitBtn;
  ClassArr[72] := TRzTrayIcon;
  ClassArr[73] := TRzBalloonHints;
  ClassArr[74] := TRzStringGrid;
  ClassArr[75] := TRzDBGrid;
  ClassArr[76] := TRzDBComboBox;
  ClassArr[77] := TRemoteTCPConnection;
  ClassArr[78] := TRemoteUdpConnection;
  ClassArr[79] := TRemoteUdpDataSet;
  ClassArr[80] := TRemoteUpdateSql;
  ClassArr[81] := TApplicationUpdate;
  ClassArr[82] := TRemoteStoredProc;
  ClassArr[83] := TADOQuery;
  ClassArr[84] := TADOConnection;
  ClassArr[85] := TXPManifest;
  RegisterClasses(ClassArr);
end;

procedure LoadFromDFM(const DFMname: string; Sender: TComponent); //根据.DFM文件动态生成窗体
var
  DFMStream: TFileStream;
  BinStream: TMemoryStream;
begin
  DFMStream := TFileStream.Create(DFMname, fmOpenRead);
  BinStream := TMemoryStream.Create;
  try
    ObjectTextToBinary(DFMStream, BinStream);
    BinStream.Position := 0;
    BinStream.ReadComponent(Sender);
  finally
    DFMStream.Free;
    BinStream.Free;
  end;
end; 

initialization
  RegClass;
finalization
  UnRegisterClasses(ClassArr);
 
end.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Raize Components是Delphi和C++Builder下的用户界面组件,拥有超过125种通用原生VCL控件集合。此次发布的Raize Components v6.1版本新增加IDE支持和帮助文档,以及其他一些组件更新。 Raize组件, Delphi和C + + Builder的是一个用户界面的设计系统。在它的心是一个集合超过125个通用的原生VCL控件。内置技术的基础上,第一次创建超过15年前,这些高品质的组件为开发人员提供无与伦比的力量和灵活性而不牺牲易于使用。除了核心的控件集, Raize组件包括超过100个组件设计师专注于简化用户界面开发。现在比以往任何时候都多,开发人员使用Raize组件来构建复杂的用户界面,在更短的时间内,以较少的努力。 Raize组件6的主要焦点是在新的VCL功能已被添加到Embarcadero公司的RAD Studio的。具体来说, 64位的VCL支持和很酷的新VCL样式支持。不同于其他版本的RAD Studio只需重新编译现有代码库提供了一套新的日间护理单位和包,有很多低层次的变化VCL的。例如,许多控件顺利迁移到64位,但许多其他需要低层次的修改。此外, Raize组件的每一个控制受新的VCL样式。每个控件的显示代码,需要进行大幅修改,全力支持VCL样式时,他们。已经做了大量的工作,但我们确信你会发现最终的结果真的很酷! 还有其他的改进和修正Raize组件6 ,但64位和VCL样式的支持是主要的新功能。 Raize组件6肯定利用RAD Studio和得到最RC6的,你需要的RAD Studio XE2或更高版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值