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.