Miguel;
 
Eu estou fazendo algo parecido com o que voce mencionou com um sistema
em pacotes (bpls), onde todos os form que estao em diversos pacotes usam
procedimentos para salvar (entre outros) baseados no form principal (que
tb esta em um bpl). eu usei a logica abaixo; esta logica funciona mesmo
se cada form tiver uma maneira direfente para salvar, cancelar entre
outras operações comuns.
 
para facilitar para o todo o grupo o que estou querendo dizer. eu
resolvi criar um exemplo...como segue. (fiz algo bem simples com apenas
um form e com procedimentos simples (sem parametros)). se o pessoal
entender a logica deste aqui...e simples implementar algo mais.
 
Crie um novo projeto, e cole o codigo a seguir na unit1;  listagem 1;
Exiba o formulario em modo texto. (alt+ f12) com o form visivel cole a
listagem 2, volte para o modo form (alt + f12 de novo)
e salve/compile...execute; brinque um poquinho   e me responda, se
ajuda?
 
Atenciosamente;
Elazar
 
LISTAGEM 1
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
  StdCtrls;
 
type
 
  tProced = Procedure of Object;
 
  TForm1 = class(TForm)
    btnBusca: TButton;
    btnCancela: TButton;
    btnSalvar: TButton;
    btnNaoClique: TButton;
    btnAjustar: TButton;
    procedure btnBuscaClick(Sender: TObject);
    procedure btnCancelaClick(Sender: TObject);
    procedure btnSalvarClick(Sender: TObject);
    procedure btnNaoCliqueClick(Sender: TObject);
    procedure btnAjustarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    pSalva   : tProced;
    pBusca   : tProced;
    pCancela : tProced;
    pViaja   : tProced;
    procedure ProcedimentoQueSalva( Proced : tProced);
    procedure ProcedimentoQueBusca( Proced : tProced);
    procedure ProcedimentoQueCancela( Proced : tProced);
    procedure ProcedimentoQueViaja( Proced : tProced);
 

    { Estas seguintes procedure devem ficar nos forms....
      so coloquei aqui para nao criar outros e facilitar o projeto }
 
    procedure FormFilhoSalvar; { Digamos que este e o procedimento que
salva no form filho, que anteriormente estava no click do botao }
    procedure FormFilhoBuscar;
    procedure FormFilhoCancelar;
    procedure FormFilhoViajar;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
{ TForm1 }
 
{  **************************     AJUSTAM NO FORM PRINCIPAL UMA
REFERENCIA AO PROCEDIMENTO QUE ESTA NO FORM FILHO ************** }
 
procedure TForm1.ProcedimentoQueBusca(Proced: tProced);
begin
  pBusca := Proced;
end;
 
procedure TForm1.ProcedimentoQueCancela(Proced: tProced);
begin
  pCancela := Proced;
end;
 
procedure TForm1.ProcedimentoQueSalva(Proced: tProced);
begin
  pSalva := Proced;
end;
 
procedure TForm1.ProcedimentoQueViaja(Proced: tProced);
begin
  pViaja := Proced;
end;
 
{  ************************ FAZENDO COM QUE O PROCEDIMENTO SEJA
EXECUTADO }
 
procedure TForm1.btnBuscaClick(Sender: TObject);
begin
 if Assigned(pBusca) then  pBusca;
end;
 
procedure TForm1.btnCancelaClick(Sender: TObject);
begin
  if Assigned(pCancela) then pCancela;
end;
 
procedure TForm1.btnSalvarClick(Sender: TObject);
begin
  if Assigned(pSalva) then pSalva;
end;
 
procedure TForm1.btnNaoCliqueClick(Sender: TObject);
begin
  if Assigned(pViaja) then pViaja;
end;
{
 
  Este sao os procedimento 'executado' pelos botoes de controle dos
dados que 'existiam no form '
  como se pode ver o botoes (acredito) foram retirados dos forms filhos
e os seus eventos transformados
  em procedures.
 
  }
 
procedure TForm1.FormFilhoBuscar;
begin
   ShowMessage('Busca');
 
   { ....comandos de busca...etc..}
end;
 
procedure TForm1.FormFilhoCancelar;
begin
   ShowMessage('Cancelar');
end;
 
procedure TForm1.FormFilhoSalvar;
begin
   ShowMessage('Salvar ');
end;
 
procedure TForm1.FormFilhoViajar;
begin
   ShowMessage('Viajando');
end;
 
{ quando voce criar o form principal voce deve ligar os 'procedimentos
acima' com o form principal }
 

procedure TForm1.btnAjustarClick(Sender: TObject);
begin
  {Chama o form principal, passando como parametro o procedimento que
deve ser executado }
  ProcedimentoQueSalva( FormFilhoSalvar);
  ProcedimentoQueBusca( FormFilhoBuscar);
  ProcedimentoQueCancela( FormFilhoCancelar);
  ProcedimentoQueViaja(FormFilhoViajar);
end;
 
end.

 
LISTAGEM 2
 
object Form1: TForm1
  Left = 403
  Top = 233
  Width = 308
  Height = 195
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object btnBusca: TButton
    Left = 200
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Busca'
    TabOrder = 0
    OnClick = btnBuscaClick
  end
  object btnCancela: TButton
    Left = 200
    Top = 52
    Width = 75
    Height = 25
    Caption = 'Cancela'
    TabOrder = 1
    OnClick = btnCancelaClick
  end
  object btnSalvar: TButton
    Left = 200
    Top = 80
    Width = 75
    Height = 25
    Caption = 'Salvar'
    TabOrder = 2
    OnClick = btnSalvarClick
  end
  object btnNaoClique: TButton
    Left = 176
    Top = 108
    Width = 99
    Height = 25
    Caption = 'Nao clique aqui'
    TabOrder = 3
    OnClick = btnNaoCliqueClick
  end
  object btnAjustar: TButton
    Left = 12
    Top = 40
    Width = 75
    Height = 25
    Caption = 'Ajustar'
    TabOrder = 4
    OnClick = btnAjustarClick
  end
end
 
 
 
 
 


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a