第一次来大富翁提问题,相信不会失望,关于Expert(200分)

  • 主题发起人 主题发起人 xrain
  • 开始时间 开始时间
X

xrain

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi7/Sources/demos/toolsapi/xpformwiz有个不错的DEMO,
Delphi6中没有的,例子是增加一个窗体向导,比DELPHI5开发人员指南中的简单明了
如果自己想在Delphi中加入一个模板,这是第一步要做的也是很关键的地方,
可惜提供的信息还是少了一些,不知道怎么在创建后的窗体上增加组件
(那个FormCreated在什么情况下触发)?我想应该是用到TIFormInterface,
在exptintf单元的说明里也说的很清楚:这个是自定义窗体或者模板的基础。
Delphi的data form wizard只能用于TTable,TQUERY,我想建一个基于ADO的模板,
就是上面这个地方过不去了,大家有谁知道的提供一点信息吧,不胜感谢!
 
给你几个链接,不过有的需要代理才能上去
http://www.tempest-sw.com/opentools/intro.html
http://www.gexperts.org/opentools/
 
好不容易才能上大富翁一次 没想到我的问题这么久了都没什么人看一看 郁闷的说
不过还是很感谢yzhshi 第一个回复者 +50
我搜遍了大小网站 找到的例子都比较简单 大家再帮忙看一看吧 帮我顶一顶也行
 
水平有限,帮你UP
 
提前一下
 
帮你提前一下
 
步骤:
(1)根据用户在向导上的选择,动态生成窗体文件和单元文件的文本文件.至于窗体文件的格式,你只要打开delphi6以上版本的随便一个form的dfm文件参考一下其他窗体是怎么定义的,就很容易懂得如何定义窗体文件.
(2)用ObjectTextToResource把窗体文件转化成资源文件
(3)CreateCppModule生成窗体,窗体向导就实现了.
(4)向导的注册和toolsApi的使用参考别人给出的资料,delphi5/demo/expert下也有个例子.

给出QuickReport的几处关键代码实现,参考它,你的功能应该不难实现.

=====================================================================
窗体文件和单元文件格式定义如下
==================================================
===================

QuickReportUnitSource =
'unit %0:s;'#13#10 +
#13#10 +
'interface'#13#10 +
#13#10 +
'uses Windows, SysUtils, Messages, Classes, Graphics, Controls,'#13#10 +
' StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls;'#13#10 +
#13#10 +
'type'#13#10 +
' T%1:s = class(TQuickRep)'#13#10 +
' private'#13#10 +
#13#10 +
' public'#13#10 +
#13#10 +
' end;'#13#10 +
#13#10 +
'var'#13#10 +
' %1:s: T%1:s;'#13#10 +
#13#10 +
'implementation'#13#10 +
#13#10 +
'{$R *.DFM}'#13#10 +
#13#10 +
'end.'#13#10;

QuickReportDfmSource = 'object %s: T%0:s end';

=====================================================================
生成窗体的代码
=====================================================================
procedure TNewQuickReport.Execute;
var
UnitIdent, Filename: string;
ReportName: string;
CodeStream, HdrStream, DFMStream: IStream;
DFMString, DFMVCLStream: TStream;
InCppBuilder: Boolean;
begin
if not ToolServices.GetNewModuleName(UnitIdent, FileName) then Exit;
ReportName := 'QuickReport' + Copy(UnitIdent, 5, 255);
InCppBuilder := HexDisplayPrefix <> '$';
if InCppBuilder then
begin
HdrStream := TIStreamAdapter.Create(TStringStream.Create(Format(QuickReportCppHeader,
[UnitIdent, ReportName])), soOwned);
CodeStream := TIStreamAdapter.Create(TStringStream.Create(Format(QuickReportCppSource,
[UnitIdent, ReportName])), soOwned);
end else
begin
HdrStream := nil;
CodeStream := TIStreamAdapter.Create(TStringStream.Create(Format(QuickReportUnitSource,
[UnitIdent, ReportName])), soOwned);
end;
DFMString := TStringStream.Create(Format(QuickReportDfmSource, [ReportName]));
try
DFMVCLStream := TMemoryStream.Create;
DFMStream := TIStreamAdapter.Create(DFMVCLStream, soOwned);
ObjectTextToResource(DFMString, DFMVCLStream);
DFMVCLStream.Position := 0;
ToolServices.CreateCppModule(FileName, ReportName, 'TQuickRep', '',
HdrStream, CodeStream, DFMStream, [cmAddToProject, cmShowSource, cmShowForm,
cmUnNamed, cmMarkModified]);
finally
DFMString.Free;
end;
end;
 
好!答得好
 
再帮你提一下了!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部