如何获得可用的DataSource(300分)

  • 主题发起人 主题发起人 郭玉梁
  • 开始时间 开始时间

郭玉梁

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得可用的DataSource。就象IDE环境中,给DBEdit付值,只要从DataSource下拉框
选择就行。
 
需要可用DataSource的列表。
 
一样呀,你use一下有DataSource的窗体
 
就这么简单?????
for i:=0 to ComponentCount-1 do
begin
if Components is TDataSource then xxxx
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i:=1 to ComponentCount do
begin
Memo1.Lines.Add(Components[i-1].ClassName);
if Components[i-1].ClassName='TDataSource' then
Memo2.Lines.Add(Components[i-1].Name);
end;
end;
 
你们想的太简单了,以上的我都想到了。
引用其它窗体上的DataSource如何获得?这是最关键的!!!
例如Form1用了Form2,Form2上有DataSource1
那么Form1上得到的DataSource因该有Form2.DataSource1!!!
 
道理不是一样的么,再同理判断一下form2的不就行了
 
我如何知道我这个窗体用了From2?
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i:=1 to form2.ComponentCount-1 do
begin
Memo1.Lines.Add(form2.Components[i-1].ClassName);
if form2.Components[i-1].ClassName='TDataSource' then
Memo2.Lines.Add(form2.Components[i-1].Name);
end;
end;
 
我如何知道我这个窗体用了From2?
这是最关键的!!!
 
把所有的数据源都放到数据模块上再用楼上所说的方法不就行了吗?
 
for i:=1 to application.ComponentCount-1 do
showmessage(inttostr((application.Components as Tform).componentcount));
这个可以取得你的程序中所有的窗体,第0个是空的,
至于有没有USE到....就不知道了丫....
 
我要做的是控件,不能有过多前提条件。
Delphi能做到,我想会有方法的!!!
 
你看一下TDataSource的源代码,估计就知道她怎么做的了。
 
你的控件里必须定义有DATASOURCE属性关键的是要有Notification方法
哎,我一时说不清楚,你看看我一个控件的源代码
http://www.playicq.com/downfile.asp?ID=211&location=HSBarCodeImage.zip
很简单的
 
你那些不能用,因为你用的是IDE的属性编辑器,而我要自己写一个属性编辑器。
DataSource列表IDE已经替你准备好了,而我要自己写!
 
请参考如下语句:
Designer.GetComponentNames(GetTypeData(PtypeInfo(TDataSource.ClassInfo)), LoadDataSource);
其中Designer为属性编辑器的成员,LoadDataSource为获取一个名字后的处理过程。
GetComponentNames看帮助。
 
哦,那我就不说什么了。楼上的已经说了
 
多人接受答案了。
 
后退
顶部