呵呵,Delphi好像是通过一个什么消息来着,来找到第一个符合条件的数据源。
解决方案 »
- indy idftp 客户端上传时如何判断服务器磁盘剩余空间
- 心寒啊.本来想年后换个工作的.上51job一看,招delphi的只有7条记录.好凄凉.....
- tdxTreeList v4.0 for D7的哪里下载...
- 在线求助
- 想转Delphi,大家提点建议,给点经验
- 如何做出压缩ACCESS时的Progress Bar?
- 怎样知道.ocx控件已注册
- Invalid variant operation????
- 问各位大侠一个问题,很难的。能否实现在客户端不安装任何插件的情况下,在远程主机可以给它发送消息
- 如何显示击健的代码信息!
- Delphi做的一个图标工具
- 请教如何实现用quickrep显示dbgrid中的内容?
TBasicAction->TContainedAction->TCustomAction->TAction->TDataSetAction
->TDataSetInsert
在组件类TComponent中有如下方法,如下代码所示:
function TComponent.ExecuteAction(Action: TBasicAction): Boolean;//!
begin
if Action.HandlesTarget(Self) then
begin
Action.ExecuteTarget(Self);
Result := True;
end
else Result := False;
end;
注意其中的一句:Action.ExecuteTarget(Self),它调用了TBasicAction的一个方法,该方法在Delphi中的声明如下所示:procedure ExecuteTarget(Target: TObject); virtual;它的实现代码如下:
procedure TBasicAction.ExecuteTarget(Target: TObject);
begin
end; 也就是说,它只申明了一个虚方法,用来在后来的继承类中实现。在该类的继承类中实现了这一方法
procedure TDataSetInsert.ExecuteTarget(Target: TObject);
begin
GetDataSet(Target).Insert;
end;
而GetDataSet方法是从类TDataSetAction中继承而来,其实现如下:
function TDataSetAction.GetDataSet(Target: TObject): TDataSet;
begin
{ We could cast Target as a TDataSource since HandlesTarget "should" be
called before ExecuteTarget and UpdateTarget, however, we're being safe. }
Result := (Target as TDataSource).DataSet;
end;
由此可见,当组件类被赋予了特定的行为时,调用方法ExecuteAction,将自身作为参数传递给类TBasicAction的方法ExecuteTarget,此时的Target参数的实参就是TComponent自身。
TNowDataSetAction = class(TDataSetAction)
private
FNowDataSet: TDataSet;
function GetNowDataSet: TDataSet;
public
procedure ExecuteTarget(Target: TObject); override;
procedure UpdateTarget(Target: TObject); override;
published
property DataSource;
property NowDataSet: TDataSet read GetNowDataSet;
end;{ TNowDataSetAction }procedure TNowDataSetAction.ExecuteTarget(Target: TObject);
begin
inherited;
FNowDataSet := GetDataSet(Target);end;function TNowDataSetAction.GetNowDataSet: TDataSet;
begin
Self.Execute;
Result := FNowDataSet;end;procedure TNowDataSetAction.UpdateTarget(Target: TObject);
begin
inherited;
FNowDataSet := GetDataSet(Target);
if Assigned(FNowDataSet) then
Enabled := True
else
Enabled := False;end;
create它,然后用aNoqDataSet.NowDataSet就OK了
求出当前激活的DataSource对象。