Newsgroup: it.comp.lang.delphi
Titolo: Accedere eventi in datamodule

 faccio?
Seleziona l'oggetto TADO... ecc ecc poi dall'  "Object Inspector" vai negli
eventi e 2click su "AferScroll"... poi inserisci
StatusBar1.Panels[0].Text := 'Record ' + IntToStr(dmPROVA.qrUTENTE.RecNo) +
 ' of ' + IntToStr(dmPROVA.qrUTENTE.RecordCount);
nella procedura che Delphi crea automaticamente...
Spero di esserti stato utile
Massimiliano Etere
maxe...@infinito.it

 cui nella
Supponendo che la form che contiene la statusbar si chianmi Form1 allora
scrivi:
       Form1.StatusBar1.Panels[0].Text := 'Record ' +
IntToStr(dmPROVA.qrUTENTE.RecNo)
Poi vai sul menù "file" di Delphi, seleziona "Use Unit" ed includi la unit
della Form1
vedi un po'...
Max Etere
maxe...@infinito.it


Vedo che ti hanno già dato alcune risposte.. cmq
Se nell'evento after scroll del DM scrivi "form1......." quell'evento potri
usarlo solo se richiamato da form1 e no nel caso in cui tu lo voglia su ltre
form.
Come al solito si possono prendere molte strade ( in fondo tutte portano a
Roma;) ) io, mia personalissima opinione, ti suggerisco 2 strade:
1: nella tua form1 ti dichiari una procedura Myafterscroll che nel create di
form1 ti attache al db e nel destroy lo stacchi
2: nel Dm ti dichiari 2 variabili o property a livello di public che poi vai
a settare nell'evento after scroll e da qualsiasi form le richiami loro
restituiscono i valori recno e record count
Poi vedi tu...
Saluti

Non so che db usi, ma quanti record hai nella tabella su cui
vuoi fare 'sta cosa?
Se non vado errato la recordcount non viene impostata
alla apertura della query.
Per calcolarla, viene eseguito un fetchall con conseguente rallentamento.
Fossi in te, proverei a mettere almeno 10.000 record nella tua tabella e
fare un test di velocita.
Saluti
AS
-- 
Posted from  [212.177.19.163] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 fare un test di velocita.
Ottimo suggerimento! Perchè la RecordCount funzioni è necessario caricare
TUTTI i record! Devi spostarti alla fine con MoveLast e poi tornare
all'inizio (se vuoi)... mah!
Max Etere
maxe...@infinito.it

> Ho una form che usa un datamodule, vorrei visualizzare nella status
bar il numero del record attivo e i record totali, riesco a
visualizzarli ma vorrei inserire l'istruzione nell'evento AfterScroll
del TADOCustomDaset, come faccio? <<
Oltre ai suggerimenti che ti hanno dato aggiungerei questo paio (il
primo e' un po' piu' dettagliato perche' e' quello che uso piu' spesso).
Aggiungi un evento (custom o semplicemente di tipo TDataSetNotifyEvent)
al datamodule e sfruttalo dalla main form. E' da notare che in questo
modo puoi passare attraverso un solo handler gli spostamenti di tutti i
dataset che hai nel datamodule. Puoi evitare di definirti l'evento
custom ed usare semplicemente un TDataSetNotifyEvent; in tal caso,
dall'handler della main form dovrai poi chiedere RecNo e RecCount al
dataset (o, meglio, interrogare apposite proprieta' o chiamare un metodo
che li restituisca).
Ancora, definisci una interfaccia tipo IRecChangeShower, implementala
nella mainform, passala al dm alla costruzione. Nell'event handler
dell'AfterScroll ne invochi i metodi opportuni.
A differenza del caso precedente e' la form che offre il servizio.
<overkill?>
Infine (tardiva aggiunta, ma rapidissima da implementare) definisci un
msg custom da lanciare (Post o SendMessage) ad
Application.MainForm.Handle; in WParam e LParam metti RecNo e RecCount.
btw, questo ti permette di disaccoppiare l'evento dall'esecuzione
dell'aggiornamento. afaik, non e' portabile su Kylix.
Saluti
Paolo Arosio
<code>
// segue esempio con event handler custom
// codice scritto qui (potrebbe richiedere aggiustamenti)
// ----------------------
unit dmProva;
...
type
TDataSetRecChange = procedure(DataSet: TDataSet;
        Current, Total: integer) of object;
TdmProva = class(TDataModule)
  ...
    procedure XxxxAfterScroll(DataSet: TDataSet);
  private
    FOnDSRecChange: TDataSetRecChange;
  ...
  public
    OnDSRecChange: TDataSetRecChange read FOnDSRecChange write
FOnDSRecChange;
  ...
end;
implementation
...
procedure TdmProva.XxxxAfterScroll(DataSet: TDataSet);
var nr, ntot: integer;
begin
  if Assigned(OnDSRecChange) then begin
    nr := TAdoCustomDataSet(DataSet).RecNo;
    ntot := TAdoCustomDataSet(DataSet).RecCount;
    OnDSRecChange(Sender, nr, ntot);
  end;
end;
// ----------------------
unit frmMain;
type
 TfmMain = class(TForm)
   ...
 private
   procedure DSRecChangeHandler(DS: TDataSet; RecNo, RecTot: integer);
 end;
implementation
uses ..., dmProva;
procedure TfmMain.FormShow(Sender: TObject);
begin
  if not Assigned(dmProva) then
    dmProva := TdmProva.Create(Self);
    // bind dell'handler all'evento
  dmProva.OnDSRecChange := DSRecChangeHandler;
end;
procedure TfmMain.DSRecChangeHandler(DS: TDataSet; RecNo, RecTot:
integer);
begin
  // aggiorna status bar
end;
</code>