如何得到表单中所有的字符串(200分)

  • 主题发起人 主题发起人 apiao
  • 开始时间 开始时间
A

apiao

Unregistered / Unconfirmed
GUEST, unregistred user!
就是设计时候保存在DFM的字符串。
不要使用文本编辑器来查看DFM文件
所有的字符串,在设计的时候定义。
我如何在运行中给提取出来。
普通的元件中字符串类型的属性能提取出来,但是类似DBGrid中标题的字符串属性就无能为力了。
我想要找个通用的方法,无论表单包含什么类型的元件,只要有字符串属性的,都能给提取出来。
 
能不能说得清楚一点?
 
一些控件都包含字符串的属性,在设计的时候被保存在DFM文件中了。
我想在运行的过程中将这些字符串都提取出来替换。
如何能做到。
但是像DBGrid这样控件的标题,我怎么也提取不出来。
因为表单太多,不能一个个的手工提取。看看有没有什么好办法。
分数不是问题
 
有這樣一個控件,從網上有下載。
是在運行程序時,具有設計時控件,像在DELPHI設計時一樣具有所有屬性等。
 
to bbscom:
哪有?能帮忙找么。有源代码么。
其实普通的控件可以使用publish的可见性来获取所有的属性值
可是像TColumn虽然有publish的属性,但是我遍历不到。
 
//uses TypInfo

procedure TForm1.ListStringPropClick(Sender: TObject);
var
i : integer;
lst : TStrings;

procedure ListObjectStringProp(const AObject : TObject);
var
PropList : PPropList;
i : integer;
begin
if not Assigned(AObject) then
exit;
for i := 0 to GetPropList(AObject, PropList) - 1 do
begin
if PropList.PropType^.Kind in [tkString, tkLString, tkWString] then
if (GetStrProp(AObject, PropList) <> '')
and (PropList.Name <> 'Name') then
if AObject is TComponent then
lst.Add(TComponent(AObject).Name + '.' + PropList.Name + ' = ' +
GetStrProp(AObject, PropList))
else
lst.Add(AObject.ClassName + '.' + PropList.Name + ' = ' +
GetStrProp(AObject, PropList));
if PropList.PropType^.Kind = tkClass then
ListObjectStringProp(GetObjectProp(AObject, PropList));
end;
if AObject is TCollection then
for i := 0 to TCollection(AObject).Count - 1 do
ListObjectStringProp(TCollection(AObject).Items);
end;

begin
lst := TStringList.Create;
try
ListObjectStringProp(self);
for i := 0 to ComponentCount - 1 do
ListObjectStringProp(Components);
Memo1.Text := lst.Text;
finally
lst.Free;
end;
end;
 
感谢大家的参与
感谢轻舞肥羊,您的功力佩服!
 
呵呵,发薪水了!
 
多少,能让兄弟羡慕羡慕吗?
 
上次我以为把银子发给大家了,可是却没有成功!
是系统的问题,不是我的问题:(
这次再给补上!利息么,找大富翁要好了
 
后退
顶部