GARANTIR DESCONTO

Fórum chamar procedimento de outro form. #292470

20/08/2005

0

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

Responder

Posts

20/08/2005

Marco Salles

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...


Responder

Gostei + 0

21/08/2005

Lynx

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.


Responder

Gostei + 0

21/08/2005

Lynx

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]


Responder

Gostei + 0

21/08/2005

Marco Salles

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


Responder

Gostei + 0

21/08/2005

Massuda

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;



Responder

Gostei + 0

21/08/2005

Lynx

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...


Responder

Gostei + 0

21/08/2005

Lynx

[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...


Responder

Gostei + 0

21/08/2005

Lynx

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


Responder

Gostei + 0

21/08/2005

Massuda

...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.


Responder

Gostei + 0

21/08/2005

Lynx

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.


Responder

Gostei + 0

21/08/2005

Lynx

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.


Responder

Gostei + 0

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

Aceitar