felipe govoni wrote: > desculpe mas nao estou entendendo > > coloquei: > > procedure Tdmgeral.Pintar(Dataset: TDataset); > begin > > end; > > mas da erro pois o pintar nao foi declarado, mas > o evento esta no frmMonitorar, acredito que nao precise isso.
Você associa o ponteiro de evento (OnCalcField) a um método. Métodos são iguais procedures, no entanto carregam um objeto "nas costas" e por isso eles precisam ser declarados em uma classe. Todo ponteiro de evento do Delphi (tal qual OnCalcField) precisa de um método, ou seja, precisa daquele tal "objeto carregado nas costas". A sua declaração acima está perfeita, contanto que você tenha este método Pintar declarado dentro da classe TdmGeral. Assim: TdmGeral = class(TDataModule) private ... public procedure Pintar(Dataset: TDataset); ... end; Agora basta você associar este método, Pintar, ao evento, OnCalcField. Se a rotina que faz esse apontamento está declarada dentro do próprio data module, basta: ...OnCalcField := Pintar; Se estiver declarada em outro canto, por exemplo no form, você precisa dizer qual é o objeto que tem este método, algo assim: ...OnCalcField := SeuDataModule.Pintar; Daí é só teclar Ctrl+F9. -- Joao Morais > > 2008/6/9 Joao Morais <[EMAIL PROTECTED]>: > >> felipe govoni wrote: >>> bah to meio perdido fiz o que vc falou joao >>> mas agora da o seguinte erro inconpatible type: 'method pointer and >> regular >>> procedure' >> Então, você tem que declarar Pintar como um _método_, ou seja, dentro de >> uma classe (TForm, TDataModule, por aí): >> >> procedure TSeuDataModule.Pintar(...); >> >> Depois você associa este método ao evento, sem usar o abre-fecha >> parênteses. >> >> -- >> Joao Morais >> >>> 2008/6/9 Joao Morais <[EMAIL PROTECTED] <post%40joaomorais.com.br> >>> : >>> >>>> felipe govoni wrote: >>>>> blz mas agora da o seguinte erro: >>>>> unsatisfied foward or external declaration Tfrmmonitorar.pintar >>>> É para alterar o cabeçalho do seu método Pintar, não é para declarar >>>> outro cabeçalho sem implementação. >>>> >>>> - declare Pintar dentro de uma classe (ou seja, um método, e não uma >>>> procedure); >>>> - coloque o parâmetro Dataset, como eu citei anteriormente. A declaração >>>> deste método deve ser igual ao que o evento OnCalcFields espera; >>>> - associe este método ao evento OnCalcFields sem colocar o abre-fecha >>>> parênteses. >>>> >>>> -- >>>> Joao Morais >>>> >>>>> 2008/6/9 Joao Morais <[EMAIL PROTECTED]<post%40joaomorais.com.br><post% >> 40joaomorais.com.br> >>>>> : >>>>> >>>>>> felipe govoni wrote: >>>>>>> procedure pintar(Sender: TObject); >>>>>>> begin >>>>>>> //codigo pra pintar >>>>>>> end; >>>>>>> >>>>>>> e no evento on click >>>>>>> >>>>>>> dmGeral.qryBaixa.close; >>>>>>> dmGeral.qryBaixa.OnCalcFields := pintar(); >>>>>>> dmGeral.qryBaixa.open; >>>>>>> >>>>>>> ele da o seguinte erro: not enough actual parameters, mas qual >>>> parametro >>>>>>> falta colocar? >>>>>> declare: >>>>>> >>>>>> procedure Pintar(Dataset: TDataset); >>>>>> ... >>>>>> >>>>>> e retire os parênteses da procedure ao fazer a associação: >>>>>> ... >>>>>> dmGeral.qryBaixa.OnCalcFields := Pintar; >>>>>> ... >>>>>> >>>>>> Joao Morais >>>>>> >>>>>> >>>>> >>>> >>> >>> >> >> > > >