一个类的问题,可能有些难度,解决问题,即送分。

ZXYSOSO 2006-01-12 12:42:08
假如一个pas:Forms
Forms就是一个大类,里面有很多子类,如TApplication,TControlScrollBar....等,如何通过代码,一个循环,把这些子类放入TList中?
...全文
150 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yrb 2006-01-13
  • 打赏
  • 举报
回复
去分析分析delphi源码及其生成的pe文件,看delphi有没有数据结构记录原类信息,我估计有的。
快乐老猫 2006-01-13
  • 打赏
  • 举报
回复
这个帖子很怪。

如果想知道一个PAS文件里面定义了多少类,这个可以作到;想知道一个一个运行的程序自身有多少类,估计上帝才知道。
飞天揽月 2006-01-12
  • 打赏
  • 举报
回复
可以对里边的对象操作了就
飞天揽月 2006-01-12
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
AList: TList;
i: Integer;
begin
AList := TList.Create;
for i := 0 to Form1.ComponentCount - 1 do
begin
AList.Add(Form1.Components[i]);
end;
ShowMessage(IntToStr(AList.Count ));
end;
NightCloud 2006-01-12
  • 打赏
  • 举报
回复
list1:=TStringList.create(nil);
for i:=0 to form1.componentCount-1 do
begin
list1.Add(form1.components[i].name);
list1.addobject(form1.components[i]);
end;
ZXYSOSO 2006-01-12
  • 打赏
  • 举报
回复
当然如果按 yrb的做法,完全是没问题的,只是这种做法写死程序,我不想做,才有这个贴子出现。
whisht 2006-01-12
  • 打赏
  • 举报
回复
GZ
NightCloud 2006-01-12
  • 打赏
  • 举报
回复
“同时在该unit的initialization节记录你的所有类”yrb的意思是不是写死,还是通过什么手段?
yrb 2006-01-12
  • 打赏
  • 举报
回复
你可以这样实现:
在form所在的unit中定义全局List变量,同时在该unit的initialization节记录你的所有类,在finalization节释放相关变量。需要的时候访问全局List变量就可以获得全部的类。
aiirii 2006-01-12
  • 打赏
  • 举报
回复
问题是,好像你提的例子, TTest 和 TForm1 之间其实并没有关系啊
要么是我还不知道,要么就要从其它比较偏门的方法下手
moonetra 2006-01-12
  • 打赏
  • 举报
回复
不知道LZ要解决什么问题

TList保存的是对象,不是类。
NightCloud 2006-01-12
  • 打赏
  • 举报
回复
你的问题应该是无解的。程序编译好后,程序应该不会保存着那个unit里面有哪些类这种信息,而是可能保存着该程序有多少个类的消息即可.unit只是为了编码时方便,编译后程序无视
Randomize 2006-01-12
  • 打赏
  • 举报
回复
這個好象不好做到
aiirii 2006-01-12
  • 打赏
  • 举报
回复
好像无解
ZXYSOSO 2006-01-12
  • 打赏
  • 举报
回复
楼上所有都错了
再看一下我的问题想法:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TTest=class
private
oForm:TFormClass;
cFname:string;
public

end;

TForm1 = class(TForm)
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
oList:TList;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
oList:=TList.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i:=0 to componentCount-1 do
showMessage(components[i].ClassName);
end;

end.

结果:只有“TButton”,我的意思是在Unit1中,要取得类TTest,TForm1放入TList中

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧