分析DFM文件生成程序界面[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 linzhengqun 的 blog

近回答了一个问题,是关于根据dfm文件来生成程序的界面的,花了数天的研究,对于一般的程序界面
基本可以还原了。不敢自留,在这里将代码贴出来,里面没有多少解释,可能阅读不大方便,在这里表示
抱歉,本人没有多少时间,所以就请各位有兴趣地自己分析代码了。
其主要思路是用递归的方式来分析dfm文件,再用流化技术将类生成出来。以下是代码:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面这个单元是注册组件类的,还可以增加,有兴趣者可以自己加上去。
unit uclass;

interface
uses
  windows, messages, sysutils, variants, classes, graphics, controls, forms,
  dialogs, stdctrls, comctrls, contnrs,
  activex,
  actnlist,
  adodb,
  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;

procedure regclass;
var
  classarr: array[0..57] of tpersistentclass;

implementation

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;
  registerclasses(classarr);
end;

initialization
  regclass;
finalization
  unregisterclasses(classarr);
 
end.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面这个就是程序的单元了,不多说了。
unit unit1;

interface

uses
  windows, messages, sysutils, variants, classes, graphics, controls, forms,
  dialogs, stdctrls, extctrls, comctrls, contnrs,uclass;


type
  tform1 = class(tform)
    opendialog1: topendialog;
    panel1: tpanel;
    panel2: tpanel;
    button1: tbutton;
    button2: tbutton;
    memo1: tmemo;
    procedure button1click(sender: tobject);
    procedure button2click(sender: tobject);
    procedure formcreate(sender: tobject);
    procedure formdestroy(sender: tobject);
  private
    { private declarations }
    curp:integer;  //dfm文件的当前行
    ss:tstrings;   //保存dfm文件的文本格式
    ts:tstrings;   //保存dfm文件中的一个类的文本格式
    l:tlist;       //管理dfm文件的所有类
  public
    { public declarations }

本文关键:分析DFM文件生成程序界面
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top