Board logo

Subject: 问一个和专家包不相关的问题 [Print This Page]

Author: Jackey    Time: 2011-4-19 14:34     Subject: 问一个和专家包不相关的问题

在其他的几个论坛发了贴,没人答复,来这里试试。

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TRttiOrdinalType;
begin
  Memo1.Clear;

  //先从类型名获取类型信息对象
  t := TRttiContext.Create.GetType(TypeInfo(Byte)) as TRttiOrdinalType;
  Memo1.Lines.Add(Format('%s - %s', [t.Name, t.QualifiedName]));
  Memo1.Lines.Add(Format('Size: %d', [t.TypeSize]));
  Memo1.Lines.Add('QualifiedName: ' + t.QualifiedName);
  Memo1.Lines.Add(Format('Min,Max: %d , %d', [t.MinValue, t.MaxValue]));
  Memo1.Lines.Add(EmptyStr); //空字串

  //可以用 AsOrdinal 方法代替前面的 as TRttiOrdinalType
  t := TRttiContext.Create.GetType(TypeInfo(Word)).AsOrdinal;
  Memo1.Lines.Add(Format('%s: %s', [t.Name, t.QualifiedName]));
  Memo1.Lines.Add(Format('Size: %d', [t.TypeSize]));
  Memo1.Lines.Add(Format('Min,Max: %d , %d', [t.MinValue, t.MaxValue]));
  Memo1.Lines.Add(EmptyStr);

  //也可以直接强制转换
  t := TRttiOrdinalType(TRttiContext.Create.GetType(TypeInfo(Integer)));
  Memo1.Lines.Add(Format('%s: %s', [t.Name, t.QualifiedName]));
  Memo1.Lines.Add(Format('Size: %d', [t.TypeSize]));
  Memo1.Lines.Add(Format('Min,Max: %d , %d', [t.MinValue, t.MaxValue]));
  Memo1.Lines.Add(EmptyStr);
end;
这里是万一博客里面的代码,他也只实现了读取枚举类型的数据,没有说怎么写回去,请问这里有人知道吗?
Author: Passion    Time: 2011-4-19 18:45

写回去?譬如修改Integer类型的上下限?貌似不合适吧?
Author: Jackey    Time: 2011-4-20 09:04

上下限能通脱MinValue和MaxValue得到,这个到不是问题,而且我想Delphi本身都能通过RTTI把数据写回应该就有方法的,只是我不知道。呵呵。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0