GARANTIR DESCONTO

Fórum Standard Actions #355353

13/03/2008

0

Completando a estrutura das Standard Actions , gostaria de criar uma que aplicasse as atualizações no BD usando ApplyUpdates.
Pesquisando na net , encontrei um artigo de Andreas Smith que trata deste assunto , adicionando uma Action de Impressão da tela ativa.
segue o código....

You can register your own new action classes with
RegisterActions.

Here is a usefull example of a action printing the current form:
Don´t forget to add this unit to a design time package.



unit AjsStdActions;

interface

uses windows, StdActns, classes, forms;


type
TWindowPrint = class(TWindowAction)
public
constructor Create(AOwner: TComponent); override;
procedure ExecuteTarget(Target: TObject); override;

function HandlesTarget(Target: TObject): Boolean;override;
procedure UpdateTarget(Target: TObject); override;

end;

procedure Register;


implementation

uses ActnList, Dialogs, Menus;

{ TWindowPrint }

constructor TWindowPrint.Create(AOwner: TComponent);
begin
inherited;
// new default Shortcut
ShortCut := TextToShortCut(´F3´);
// new default Caption
Caption := ´Print Window´;
end;

procedure TWindowPrint.ExecuteTarget(Target: TObject);
begin
// only for testing
ShowMessage(´Printing Windows....´);
// print the current form
GetForm(Target).Print;
end;


function TWindowPrint.HandlesTarget(Target: TObject): Boolean;
begin
Result := ((Form <> nil) and (Target = Form) or
(Form = nil) and (Target is TForm));
end;


procedure TWindowPrint.UpdateTarget(Target: TObject);
begin
// override the behavior of TWindow.UpdateTarget
end;



procedure Register;
begin
// register our new action class
RegisterActions(´window´, [TWindowPrint], nil);
end;


end.

Bom , parece que funciona e fica publicado corretamente na IDE.
Agora , gostaria de estender e criar uma Action do tipo ApplyUpdates.
Tentei assim :

TDataSetApplyUpdates = class(TDataSetAction)
public
procedure ExecuteTarget(Target: TObject); override;
procedure UpdateTarget(Target: TObject); override;
end;

{ TDataSetApplyUpdates }

procedure TDataSetApplyUpdates.ExecuteTarget(Target: TObject);
begin
(GetDataSet(Target) as TClientDataset).ApplyUpdates(-1);
end;

procedure TDataSetApplyUpdates.UpdateTarget(Target: TObject);
begin
with GetDataSet(Target) do
Enabled := Active and CanModify and (State in dsEditModes)
and Modified;
end;

procedure Register;
begin
// register our new action class
RegisterActions(´Window´, [TWindowPrint], nil);
RegisterActions(´PsDataSet´, [TDataSetApplyUpdates], nil);
end;

end

Mas não consegui fazer funcionar.
Estes codigos foram adicionados a uma unit de um pacote de componentes e compilados normalmente.
As duas actions aparecem normalmente , mas a especializada em Apply dá um erro de Wrong Type.
Agradeço antecipadamente.


Emerson Azevedo

Emerson Azevedo

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar