网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi RTTI的使用例子
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
lt;>Null) then
TXRTTI.SetObjValue(obj,ADOQ.Fields[i].FieldName,ADOQ.Fields[i].Value,PropList[ADOQ.Fields[i].Tag]^.PropType^^);
end;

FreeMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
Result:=True;
end;

{ TXRTTI }

class function TXRTTI.GetObjAttTypeInfo(obj: TPersistent;
const AAtt: String;var ATypeInfo:TTypeInfo): Boolean;
var
i:Integer;

PropList: PPropList;
ClassTypeInfo: PTypeInfo;
ClassTypeData: PTypeData;
begin
Result:=False;
ClassTypeInfo := obj.ClassType.ClassInfo;
ClassTypeData := GetTypeData(ClassTypeInfo);
GetMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
GetPropInfos(obj.ClassInfo, PropList);

for i := 0 to ClassTypeData.PropCount - 1 do
if (PropList[i]^.PropType^.Kind <> tkMethod) then
if SameText(AAtt,PropList[i]^.Name) then
begin
// AAtt:=PropList[i]^.Name; 属性名不区分大小写,所以不用反正正确的属性值
ATypeInfo:=PropList[i]^.PropType^^;
Result:=True;
Break;
end;
FreeMem(PropList, SizeOf(PPropInfo) * ClassTypeData.PropCount);
end;

class function TXRTTI.GetObjValue(obj: TPersistent;
const AAtt: String): Variant;
var
AKind:TTypeKind;
ATypeInfo:TTypeInfo;
begin
//给定一个属性名称和值,给对应设置
Result:=True;
GetObjAttTypeInfo(obj,AAtt,ATypeInfo);

case ATypeInfo.Kind of
tkInteger :Result:=GetInt64Prop(obj,AAtt);
tkFloat :Result:=GetFloatProp(obj,AAtt);
tkInt64 :Result:=GetInt64Prop(obj,AAtt);
tkString :Result:=GetStrProp(obj,AAtt);
tkLString :Result:=GetStrProp(obj,AAtt);
tkWString :Result:=GetStrProp(obj,AAtt);
tkVariant :Result:=GetVariantProp(obj,AAtt);
else
Result:=null;
end;
end;

class function TXRTTI.GetObjValueToStr(obj: TPersistent;
const AAtt: String): String;
var
AKind:TTypeKind;
ATypeInfo:TTypeInfo;
begin
//给定一个属性名称和值,给对应设置
GetObjAttTypeInfo(obj,AAtt,ATypeInfo);
case ATypeInfo.Kind of
tkInteger :Result:=IntToStr(GetInt64Prop(obj,AAtt));
tkFloat :Result:=FloatToStr(GetFloatProp(obj,AAtt));
tkInt64 :Result:=IntToStr(GetInt64Prop(obj,AAtt));
tkString :Result:=GetStrProp(obj,AAtt);
tkLString :Result:=GetStrProp(obj,AAtt);
tkWString :Result:=GetStrProp(obj,AAtt);
tkVariant :Result:=VarToStrDef(GetVariantProp(obj,AAtt),'''');
else
Result:='''';
end;
end;

class function TXRTTI.SetObjValue(obj: TPersistent; const AAtt: String;
AValue: Variant):Boolean;
var
ATypeInfo:TTypeInfo;
begin
//给定一个属性名称和值,给对应设置
GetObjAttTypeInfo(obj,AAtt,ATypeInfo);
Result:=SetObjValue(obj,AAtt,AValue,ATypeInfo);
end;

class function TXRTTI.SetObjValue(obj: TPersistent; const AAtt: String;
AValue: Variant; ATypeInfo: TTypeInfo): Boolean;
var
i:Integer;
f:Double;
t:Int64;
begin
//给定一个属性名称和值,给对应设置
Result:=True;
case ATypeInfo.Kind of
tkInteger:
begin
i:=AValue;
SetInt64Prop(obj,AAtt,i);
end;
tkFloat :
begin
f:=AValue;
SetFloatProp(obj,AAtt,f);
end;
tkInt64:
begin
t:=AValue;
SetInt64Prop(obj,AAtt,t);
end;
tkString:SetStrProp(obj,AAtt,AValue);
tkLString:SetStrProp(obj,AAtt,AValue);
tkWString:SetStrProp(obj,AAtt,AValue);
tkVariant:SetVariantProp(obj,AAtt,AValue);
else
Result:=False;
end;

end;

class function TXRTTI.SetObjValueStr(obj: TPersistent; const AAtt: String;
AValue: String): Boolean;
var
AKind

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号