关于属性编辑器(100分)

  • 主题发起人 主题发起人 pyliu
  • 开始时间 开始时间
P

pyliu

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位先生小姐用过tTable控件?,当选择databasename 后
就可以选择tablename,(很多表名在下拉框里供选择)这个针对
string的编辑器该怎样做呢?
我在里覆盖了getValues方法并且调用proc(aString)
是可以的,但是我需要动态的根据databasename得到table names,
怎么把他们放到propertyeditor的派生类里的方法里?
 
delphi有一个全局的session对象,你可以通过它获得table names
另外delphi5公开了大部分的属性编辑器的源码
好象是在/source/property editor下
 
list dbtables.pas
 
用SESSION的方法(查一下帮助)可以动态的获得数据库别名和表名
 
hubdog:
是source/toolsapi

---------------------

好象是GetTableNames
 
先生女士们:
表名我是可以得到的,关键是属性编辑器的类和我做的控件不是一个类!我在我的
控件里可以得到tablename,因为在控件里我声明了数据库属性:
private: FDatabaseName: string;
published: DatabaseName read FDatabaseName ...
得到DatabaseName以后,我就可以用各位提供的方法得到tablenames.
但是在属性编辑器里就不行了,因为属性编辑器是另外一个类,我没有办法使用
DatabaseName!
再帮帮忙了!
 
你难道没看property editor/下的bdereg.pas?
看看borland是怎么干的吧,你不就清楚了吗

TTableNameProperty = class(TDBStringProperty)
public
function AutoFill: Boolean; override;
procedure GetValueList(AList: TStrings); override;
end;

function TTableNameProperty.AutoFill: Boolean;
begin
Result := IsDatabaseOpen(GetComponent(0) as TDBDataSet);//重要
end;

procedure TTableNameProperty.GetValueList(AList: TStrings);
const
Masks: array[TTableType] of string[5] = ('', '*.DB', '*.DBF', '*.DBF', '*.TXT'); { Do not localize }
begin
with GetComponent(0) as TTable do//重要
DBSession.GetTableNames(DatabaseName, Masks[TableType],//通过GetComponent 不就可以得到databasename了吗?
TableType = ttDefault, False, AList);
end;
 
hubdog:
我还没有试验就知道差不多了
你怎么会想到看bdereg.pas呢?
我看了ibtable.pas 和 dbtables.pas都没有找到
原来在那里!
多谢!
接收答案了。
 
后退
顶部