chamar procedimento de outro form.
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
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
Curtidas 0
Respostas
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
20/08/2005
para ser mais direto, eu preciso que um form qualquer, execute um procedimento no evento de um form que vai abrir.
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.
(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
20/08/2005
para complementar, o procedimento está assim no form de relatório:
no relatório eu consigo fazer assim
[color=red:31a8887a6a](Preciso que o TfrpPedido.rlPedidoBeforePrint seja executado dinamicamente de outro form !)[/color:31a8887a6a]
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
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
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
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...
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
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;
Massuda até poderia, mas isso precisa fazer no evento beforeprint do relatório...
GOSTEI 0
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
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
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
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:
e no evento onbeforeprint
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.
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
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.
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