chamar procedimento de outro form.

Delphi

20/08/2005

Bom Noite,

Tenho um form pai, nesse form tem uma procedure com o seguinte parametro:

ImprimirRelatorio(idrelatorio);

é possivel um form filho, chamar um evento,com esse procedimento no form pai ?


Por exemplo, um form filho assim:


with TfrpPedido.Create(nil) do
begin
rlPedido.BeforePrint.[color=red:b3c6af4b96]ImprimirRelatorio(idrelatorio); [/color:b3c6af4b96]
rlPedido.Preview;
free;
end;

No caso, executar esse procedimento no evento do Form pai.


Eu sei que está errado o código acima, (Volta um erro de parametro), alguém sabe como ficaria isso ?


Obrigado


Lynx

Lynx

Curtidas 0

Respostas

Marco Salles

Marco Salles

20/08/2005

Tenho um form pai, nesse form tem uma procedure com o seguinte parametro:


Quando voce diz que tem um Pai , voce esta se referindo a formulários
MDIForm Ou voce esta se referindo que derivou um Formulario de um formulário Anscedente

Type TFormPai = Claas(TForm); blaBlaBla... Type TFormFilho=Class(TFormPai);


[b:58dfbd1150]Acho que para proseguir , isto talvez tenha que ficar esclarecido[/b:58dfbd1150] , bem como o parametro de drelatorio :
Inteiro , Boolean , etc...

E se possível a Definição de ImprimirRelatorio(idrelatorio);
entre outras...


GOSTEI 0
Lynx

Lynx

20/08/2005

para ser mais direto, eu preciso que um form qualquer, execute um procedimento no evento de um form que vai abrir.


(Imagine um botao assim em um Form de Cadastro)


Quando clicar nele vai executar isso


with TfrpPedido.Create(nil) do
begin
[color=red:fabb993300]rlPedido.BeforePrint.ImprimirRelatorio(idrelatorio); [/color:fabb993300]
rlPedido.Preview;
free;
end;

A linha em vermelho está errada, mas é isso que eu preciso.
Preciso que abra o form, com esse evento.

Acho que deu para entender...

Eu preciso disparar um evento no form do relatório, através de outro form.


GOSTEI 0
Lynx

Lynx

20/08/2005

para complementar, o procedimento está assim no form de relatório:

    procedure TfrpPedido.ImprimirRelatorio(idpedido : Integer);



no relatório eu consigo fazer assim

procedure TfrpPedido.rlPedidoBeforePrint(Sender: TObject;
  var PrintIt: Boolean);
begin
  ImprimirRelatorio(frmCadPedidos.idpedido);
end;



[color=red:31a8887a6a](Preciso que o TfrpPedido.rlPedidoBeforePrint seja executado dinamicamente de outro form !)[/color:31a8887a6a]


GOSTEI 0
Marco Salles

Marco Salles

20/08/2005

Eu preciso disparar um evento no form do relatório, através de outro form.


Se voce presisa so disso então tem que se por partes....

1) Declarar na secção Uses abaixo de Implementatiom o Nome da Unit Que contem o Form (Do evento que sera disparado)

implementation

uses
UNomedaUnit form do relatório ;

{$R *.DFM}


2)Ápos criado o form ele não deve ser destruido , ja que em algumas situações o seu método sera disparado
Então , não se deve atribuir Nil ao form e nen action:=Cafree no seu evento Onclose entre outros métodos...

3)A Outra etapa é conhecer os paramentros do evento a ser Executado
Não deu para entender , de qual Método BeforePrint que voce quer executar, se é de uma banda se e do proprio QuickReport e qual o sentido disso :?: :?: :?: :?:

Agora se voce queiser imprimir o Relatorio de qualquer form , basta fazer as etapas 1 e 2 e chamar [b:0c1cabeac4]NomeDoForm.NomeDoQiuckRepot.Preview[/b:0c1cabeac4]
Esta instrução tambem dispara o evento BeforePrint , tanto das bandas quanto do componenente quickReport


GOSTEI 0
Massuda

Massuda

20/08/2005

with TfrpPedido.Create(nil) do begin [color=red:c7019718de]rlPedido.BeforePrint.ImprimirRelatorio(idrelatorio); [/color:c7019718de] rlPedido.Preview; free; end;
Você não poderia simplesmente fazer...
with TfrpPedido.Create(nil) do 
begin 
  ImprimirRelatorio(idrelatorio);
  rlPedido.Preview; 
  Free; 
end;



GOSTEI 0
Lynx

Lynx

20/08/2005

o relatório é Fortes Report, é o TRLReport o componente.

O Sentido de executar o evento BeferoPrint, em um outro form é para passar o valor do ID, para o relatório imprimir...


GOSTEI 0
Lynx

Lynx

20/08/2005

[quote:87c9c69a28=´lynx´]with TfrpPedido.Create(nil) do begin [color=red:87c9c69a28]rlPedido.BeforePrint.ImprimirRelatorio(idrelatorio); [/color:87c9c69a28] rlPedido.Preview; free; end;
Você não poderia simplesmente fazer...
with TfrpPedido.Create(nil) do 
begin 
  ImprimirRelatorio(idrelatorio);
  rlPedido.Preview; 
  Free; 
end;
[/quote:87c9c69a28]


Massuda até poderia, mas isso precisa fazer no evento beforeprint do relatório...


GOSTEI 0
Lynx

Lynx

20/08/2005

Massuda, um form qualquer precisa enviar o ImprimirRelatorio no evento BeforePrin do form relatório.

Não posso fixar no Form do relatório [color=red:4772286479]frmCadPedidos.idpedido [/color:4772286479]por exemplo.

Iria funcionar, mas só para esse form.


Preciso que os forms, executem o beforte print do relatório.
Obrigado


GOSTEI 0
Massuda

Massuda

20/08/2005

...mas isso precisa fazer no evento beforeprint do relatório...
Não conheço o Fortes Report, mas me parece ser incoerente precisar mandar imprimir (ImprimirRelatório) no evento OnBeforePrint de um relatório... não seria o caso de rever seu código? Afinal, o natural seria o evento OnBeforePrint ocorrer em consequencia do fato de você iniciar a impressão do relatório.


GOSTEI 0
Lynx

Lynx

20/08/2005

mas no onbeforeprint que eu mando imprimir meu relatório.

Criei esse procedimento para passar o idpedido, para funcionar a impressao.


Segue abaixo um exemplo:

procedure TfrpPedido.ImprimirRelatorio(idpedido : Integer);
begin
  with qryRelPedido do
    begin
      Close;
      SQL.Clear;
      SQL.Add(´select * from PEDIDOS where IDPEDIDO = :IDPEDIDO´);
      ParamByName(´IDPEDIDO´).AsInteger:= idpedido;
      Open;
      idformapagamento:= FieldByname(´IDFORMAPAGAMENTO´).AsInteger;
      idcaminhao:= FieldByname(´IDCAMINHAO´).AsInteger;
      idcliente:= FieldByname(´IDCLIENTE´).AsInteger;
      {Data e Número do Pedido}
      lblData.Caption:= ´Data: ´+FieldByname(´DATA´).AsString;
      lblPedido.Caption:= ´Pedido Nº ´+FieldByname(´CODPEDIDO´).AsString;
      {Observação,Previsão de Entrega,ICMS,IPI}
      mmObservacao.Lines.Text:= FieldByname(´OBSERVACAO´).AsString;
      lblPrevEntrega.Caption:= ´Previsão de Entrega: ´+
      FieldByname(´PREVENTREGA´).AsString;
      lblIcms.Caption:= ´ICMS: ´+FieldByname(´ICMS´).AsString;
      abaixo tem mais códigos, mas segue esse padrão





e no evento onbeforeprint

procedure TfrpPedido.rlPedidoBeforePrint(Sender: TObject;
  var PrintIt: Boolean);
begin
  ImprimirRelatorio(frmCadPedidos.idpedido);
end;



Então, eu peguei o idpedido do frmCadPedidos, mas no caso eu quero imprimir agora da tela de pesquisa.

Se eu fixar ImprimirRelatorio(frmPesqPedidos.idpedido) vai funcionar na pesquisa e não vai funcionar no cadastro.

Por isso gostaria de passar o evento beforeprint antes de abrir o relatório, para funcionar em ambas as telas.



Desculpe, talvez estou fazendo errado, é que funciona perfeitamente em 1 form, agora apareceu esse problema para imprimir da tela de pesquisa também.

Obrigado.


GOSTEI 0
Lynx

Lynx

20/08/2005

com certeza é viagem minha, resolvi de uma forma muito simples.
Ao invés de pegar o idrelatorio das outras telas, criei uma variavel no relatória, e fiz as outras telas passar o valor para o relatório.


GOSTEI 0
POSTAR