Fórum Implementar um método em tempo de execução pela hierarquia ? #279517
29/04/2005
0
v_Componente := TRLDBMemo.Create(ReportNotaFiscal); v_Componente.Parent := v_Parent; v_Componente.AutoSize := True; v_Componente.Name := v_Name; v_Componente.Left := StrToInt(v_Margem); v_Componente.Top := StrToInt(v_Altura); v_Componente.Width := StrToInt(v_Largura); v_Componente.DataSource := v_DataSource; v_Componente.DataField := v_DataField; v_Componente.Alignment := v_Alinhamento; v_Componente.Behavior := [beSiteExpander]; v_Componente.Visible := True;
Até aí tudo bem mais preciso colocar mais um parâmetros que seria o abaixo :
RLDBMemo8.BeforePrint := ?????
A declaração de código acima solicita um tipo [b:4274eb8a08]TRLBeforeTextEvent[/b:4274eb8a08]. O que eu sei é que a [b:4274eb8a08]assinatura[/b:4274eb8a08] do método (no caso no evento) é a seguinte:
RLDBMemoBeforePrint(Sender: TObject; var Text: String; var PrintIt: Boolean);
:(
O maior problema que terei é porque ele utiliza os parâmetros [b:4274eb8a08]Text [/b:4274eb8a08]e [b:4274eb8a08]PrintIt[/b:4274eb8a08], por dentro do código esses parâmetros são para imprimir o valor do texto a ser impresso e o outro para dizer se esse texto será ou não impresso.
Resumindo a história, como poderei implementar um método em tempo de execução para o componente TRDBMemo do FortesReport para o evento BeforePrint do mesmo que que tenha também como parâmetros os mesmos [b:4274eb8a08](Sender: TObject; var Text: String; var PrintIt: Boolean)[/b:4274eb8a08], sendo assim manipulados internamente dando a fidelidade de funcionamento ?????
Espero que tenham entendido aguardo um retorno. :wink:
Faelcavalcanti
Curtir tópico
+ 0Posts
29/04/2005
Faelcavalcanti
:cry:
Preciso de toda ajuda e reforço possível . Câmbio e desligo!
Gostei + 0
29/04/2005
Massuda
Talvez eu esteja sendo simplista, mas acho que [url=http://forum.clubedelphi.net/viewtopic.php?t=57985]este tópico[/url] pode ser útil a você.
Gostei + 0
29/04/2005
Faelcavalcanti
v_Component.BeforePrint := ?????
é esperado o tipo [b:cf4e0fa9dc]TRLBeforeTextEvent[/b:cf4e0fa9dc], mas eu também poderia implementar o [b:cf4e0fa9dc]TRLBeforePrintEvent[/b:cf4e0fa9dc].
Gostaria de associar um método que eu criei como você informou no tópico ao meu componente criado no momento. No seu caso o [b:cf4e0fa9dc]OnClick[/b:cf4e0fa9dc], teria como parâmetro o [b:cf4e0fa9dc]Sender[/b:cf4e0fa9dc] e pronto. No meu caso eu tenho um tipo que está descrito da seguinte forma :
TRLBeforeTextEvent = procedure(Sender: TObject; var Text: string; var PrintIt: boolean) of object;
Como poderia implementá-lo da mesma forma ???
Obrigado Massuda, me ajudou um bocado mais ainda vou precisar de mais uma força!!! :roll:
Gostei + 0
29/04/2005
Massuda
type TSeuForm = ... ... private procedure RLDBMemoBeforePrint(Sender: TObject; var Text: string; var PrintIt: boolean); .... procedure TSeuForm.RLDBMemoBeforePrint(Sender: TObject; var Text: string; var PrintIt: boolean); begin ... end; // quando você cria seu RLDBMemo você faz... // RLDBMemo.BeforePrint := RLDBMemoBeforePrint;
Gostei + 0
29/04/2005
Faelcavalcanti
Mas no meu caso ele campo Componente irá executar diversas vezes no relatório com mais de 10(dez) páginas aí quando é para executar neste momento ele não faiz nada.
Sei que o erro certamente está entre a [b:ad4df4cba3]cadeira [/b:ad4df4cba3]e o [b:ad4df4cba3]teclado[/b:ad4df4cba3] :D , mas ainda não consegui associar a este evento. Quanto a um evento Onclick de um Button tudo bem, mas com esse não funcionou e até agora não sei porque. Why ????
Gostei + 0
29/04/2005
Faelcavalcanti
no meu caso seria
Quando eu for implementar o primeiro seria como passado por você:
Button.OnClick := SuaProcedureQueTrataOnClick;
no meu caso terei :
var v_Text : String; v_PrintIt : Boolean; begin RLDBMemo.BeforePrint := MeuMetodoBeforePrint(Nil, v_Text, v_PrintIt); end; // meu método abaixo function MeuMetodoBeforePrint(Sender: TObject; var Text: string; var PrintIt: boolean) : TRLBeforeTextEvent; begin ShowMessahe(´Até que enfim hein´); end;
Após isso feito só é executado na hora da atribuição, após isto não é mais executado. O que estou fazendo de errado ????
Gostei + 0
29/04/2005
Massuda
Outro ponto importante é que todo tratador de evento é um ponteiro para um método de um objeto, ou seja, é declarado como sendo
TAlgumEvento = procedure (....) of object;
Pegando o código que você postou aqui, você teria de fazer algo assim...
v_Componente := TRLDBMemo.Create(ReportNotaFiscal); v_Componente.Parent := v_Parent; ... v_Componente.Visible := True; v_Componente.BeforePrint := ReportNotaFiscal.RLDBMemoBeforePrint; ... type TReportNotaFiscal = class ... public procedure RLDBMemoBeforePrint(Sender: TObject; var Text: string; var PrintIt: boolean); ... procedure TReportNotaFiscal.RLDBMemoBeforePrint(Sender: TObject; var Text: string; var PrintIt: boolean); begin ... end;
Gostei + 0
30/04/2005
Faelcavalcanti
Como segue a descrição sobre a implementação abaixo :
Primeiro criei um procedimento que seja suportável a um tipo Object:
type
TForm1 = class(TForm)
...
...
RLReport1: TRLReport;
...
...
private
{ Private declarations }
public
{ Public declarations }
procedure Teste(Sender : TObject;
var Text : String;
var PrintIt : Boolean);end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Teste(Sender : TObject;
var Text : String;
var PrintIt : Boolean);
begin
ShowMessage(´You Win!!!´);
end;
Ao meu componente eu declaro da seguinte forma :
var v_NewMemo : TRLDBMemo; begin v_NewMemo := TRLDBMemo.Create(Nil); v_NewMemo.AutoSize := True; v_NewMemo.Parent := RLBand1; v_NewMemo.Visible := True; v_NewMemo.Name := ´Rlm_NewMemo´; v_NewMemo.BeforePrint := Teste; end;
Estava viajando em outro planeta quando pensei que tivesse que implementar uma função com o mesmo tipo de retorno implementando, ou seja, através do [b:c5803b3779]override[/b:c5803b3779], o seu comportamento. Já pensaram!!! Nothing to see!!!!
Bem obrigado pela força Massuda, se não fosse você não teria chegado a esta conclusão ainda mais, olha só são 03:20 mas consegui!!!!!!! Aaaaaaahhhhhhhhhhhh! :twisted: :twisted:
É como eu sempre digo na maioria das vezes a culpa ficam em torno de 5¬ no delphi, 5¬ na máquina e 90¬ nos programadores, ou seja, o problema está entre o teclado e a cadeira. Bah que merda!!!! :x
:wink: :wink: :wink:
Valeu!!!!!
Gostei + 0
20/03/2007
Cabelo
Estou com o mesmo problema do amigo.. mas ele conseguiu resolver de forma simples, e foi a primeira coisa que tentei fazer.. mas acho que estou errando em algo simples..
Segue o código de criação..
v_band_detail := TRLBand.Create(l_component); with v_band_detail do begin BeforePrint := P_BeforePrint; Parent := v_rl_report; BandType := btDetail; end;
segue minha procedure
procedure P_BeforePrint(Sender: TObject; var PrintIt: boolean); begin SowMessage(´Imprimindo´); end;
Espero que quando o BeforePrint do componente seja disparado, eu possa utilizar a procedure, para tratar os dados que irão aparacer em um TRLImage, dependendo do que o select retornar..
Quando faço exatamente como está acima, gera um erro :
Não sei o que estou fazendo, mas tenho a impressão de ser uma coisa muito simples..
Alguém pode me ajudar????
Obrigado a todos antecipadamente!!!!
Um abraço.
Gostei + 0
22/03/2007
Cabelo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)