Fórum chamar procedimento de outro form. #292470
20/08/2005
0
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
Curtir tópico
+ 0Posts
20/08/2005
Marco Salles
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
[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
21/08/2005
Lynx
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
21/08/2005
Lynx
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
21/08/2005
Marco Salles
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
21/08/2005
Massuda
with TfrpPedido.Create(nil) do begin ImprimirRelatorio(idrelatorio); rlPedido.Preview; Free; end;
Gostei + 0
21/08/2005
Lynx
O Sentido de executar o evento BeferoPrint, em um outro form é para passar o valor do ID, para o relatório imprimir...
Gostei + 0
21/08/2005
Lynx
with TfrpPedido.Create(nil) do begin ImprimirRelatorio(idrelatorio); rlPedido.Preview; Free; end;
Massuda até poderia, mas isso precisa fazer no evento beforeprint do relatório...
Gostei + 0
21/08/2005
Lynx
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
21/08/2005
Massuda
Gostei + 0
21/08/2005
Lynx
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
21/08/2005
Lynx
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
Clique aqui para fazer login e interagir na Comunidade :)