曾经在一本书上看到说delphi自动use单元的时候是根据类的RTTI信息的UnitName来添加…… (50分)

  • 主题发起人 QQ989753
  • 开始时间
用不着改名字
Type
TB=UnitB.TB;
就行了.反正这两个类型是兼容的,同名就同名呗.
 
呵呵,原来你早就写了TB=unit2.TB,怪我白长了眼睛。
这样倒是很有意思,假设unit3,同时uses了unit1,unit2,当在unit3使用TB时,会与uses
的次序有关。

当然,delphi的其它单元也有这样的事发生,只是,估计它不是由这样的原因引起的。

:)
 
帮你顶一顶,我也想知道啊:)
 
在A中写上:
type
TB=(amCust,amOffice,amCurr)
 
期待中……
 
曾经也想到过这个问题,不过没有细想,没想到在这里又见到了这个问题~
有一点头绪了,还要继续测试....
 
无限期待中……
 
sorry,好像还是不行,说说我的思路吧,你再想想吧——
将一个控件从控件面板拖到窗体上时,delphi根据该类的RTTI信息找到它所在的单元——
TTypeData结构的UnitName字段。我的想法是在加载包的时候修改该类的RTTI信息,不过好
像并不成功。这是我的测试代码,你看看有没有办法:
unit UnitTest;

interface

uses
Classes, TypInfo, Dialogs;

type
TTest = class(TComponent);

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Test', [TTest]);
end;

procedure SetUseUnit;
var
pTypInfo: PTypeInfo;
pTypData, pTypDataTmp: PTypeData;
begin
pTypInfo := TTest.ClassInfo;
if Assigned(pTypInfo) then
begin
if (pTypInfo.Kind = tkClass) then
begin
pTypData := GetTypeData(pTypInfo);
if Assigned(pTypData) then
begin
GetMem(pTypDataTmp, SizeOf(PTypeData));
try
with pTypDataTmp^ do
begin
ClassType := pTypData.ClassType;
ParentInfo := pTypData.ParentInfo;
PropCount := pTypData.PropCount;
UnitName := 'UnitTest, UnitSec';
end;
Move(pTypDataTmp, pTypData, SizeOf(pTypeData));
ShowMessage(pTypData.UnitName);
finally
FreeMem(pTypDataTmp);
end;
end;
end;
end;
end;

initialization
SetUseUnit;

end.
 
看起来,我低估了问题的难度。本以为经高人一指点就OK,谁料想……,
谢谢所以关心此问题的人!
 
真奇怪,我怎么没遇到过种事,要有我头肯定也大了,呵~~~~~,偶真走运!
 
曾经在一本书上看到说delphi自动use单元的时候是根据类的RTTI信息的UnitName来添加,
不过我取了TADOQuery的RTTI信息,发现它的UnitName还是一个'ADODB',想来delphi不是
根据这个来use单元的。另外修改RTTI的想法似乎也是不可能的。
建议你换个标题,让更多的人看看这个问题吧~
 
星语心愿:十二分的感谢你的热心,我也发现我的问题的标题与讨论的内容不太一致了,正如
我以前所说,我本以为很快就会有答案,哪知道……
我怎么才能换标题呢,是另开一个贴子吗?(知道了! :) )
“delphi自动use单元的时候是根据类的RTTI信息”不知道这信息是真是假,如果是,那不是
要把我们的这种想法完全拒于门外吗?(当然,不乏有那种你就是锁10层锁,我也照入不误的
人)
 
delphi自动use单元的时候的确是根据类的RTTI信息,加一个控件时会把控件类所在的单元和
它的父类们所在的单元都字段use。你的问题的一个变通方法是,在你定义枚举类型的单元里,
定义一个什么也不做的类为你的控件类的父类,TMyLabel=class(TLabel);然后在你的单元里
从这个类继承,TLabel1=class(TMyLabel);这时候就可以自动use那个单元了。
 
星语心愿:
衷心感谢你的热心及你的回答,我终于懂了是什么一回事了。
现在,要处理什么就好办多了。
我当初没有想到这个问题会这么费周折,所以,分给得太少了。这对你不公平。

这样吧,这里的分,我分给大家,另开一贴给你分,不要不来,这是你应得的。
还有,希望结识你这个朋友,我的QQ号:78128222。
 
星语心愿,到另外的地方取分。谢谢大家参与。
 

Similar threads

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