Newsgroup: it.comp.lang.delphi
Titolo: evento AfterScroll

non uso i controlli Dbtext e vari ma semplici campi TEdit,
lo scopo e' intercettare un Flag che mi permetta di riempire
i campi TEdit con i valori presenti nella Tabella del DB.
poniamo 2 form +1 unit per le variabili globali
Form1 (per i campi TEdit) , e Datamodule (per il DB)
Unit1 con variabile f_Parti:Boolean;
quando intercetto AfterScroll pongo fParti:=true;
su Form1 ho un Timer per intercettare f_Parti.
Form1 usa il Datamodule ma non viceversa, cosi' non ci sono
riferimenti circolari.
procedure Tfrm_NoteStoriche.Timer1Timer(Sender: TObject);
begin
 if Flg_PartiNS then
 begin
  f_Parti:=False;
  [...]
  end;
 end;
end;
unit unt_Unit1;
interface
uses Dialogs,Forms,Graphics,StdCtrls,Buttons;
var f_Parti:Boolean;
[...]
vorrei avere lo stesso risultato, senza usare variabili globali.
grazie Stefano.

serve il codice eseguito sulla form.
AS

 non uso i controlli Dbtext e vari ma semplici campi TEdit,
Perché ?

>
ecco il codice;
la parte relativa al form riguarda questo:
procedure Tfrm_NoteStoriche.Timer1Timer(Sender: TObject);
//variabili globali
unit unt_Globale;
interface
 uses Dialogs,Forms,Graphics,StdCtrls,Buttons;
 var f_PartiNS:Boolean;
end.
//Form1
type
  Tfrm_NoteStoriche = class(TForm)
  [...]
  private
  public
 end;
var
  frm_NoteStoriche: Tfrm_NoteStoriche;
//uso la unit delle varaibili globali unt_Globale
     e la unit del datamodule unt_Dati
implementation
uses unt_Globale, unt_Dati;
// ********************************************
//sull'evento del timer controllo la variabile globale f_PartiNS
//e la pongo a false
procedure Tfrm_NoteStoriche.Timer1Timer(Sender: TObject);
begin
 if f_PartiNS then
 begin
  f_PartiNS:=False;
  with frm_Dati do
  begin
   if IB_PartiNS['NOMEARGOMENTO']<>Null then 
Edit5.Text:=IB_PartiNS['NOMEARGOMENTO']
   else Edit5.Text:='';
   if IB_PartiNS['NOMEPAGINA']<>Null then 
Edit4.Text:=IB_PartiNS['NOMEPAGINA']
   else Edit4.Text:='';
   [etc]
  end;
 end;
end;
//questo nel Datamodule nell'evento AfterScroll
//imposta a true f_PartiNS
procedure Tfrm_Dati.IB_PartiNSAfterScroll(DataSet: TDataSet);
begin
 //imposto la variabile f_PartiNS a true
 f_PartiNS:=True;
end; 

 ecco il codice;
Con tutto il rispetto: pessimo codice.  Ma come si fa a pensare 
seriamente di scrivere applicazioni in questo modo?
Sarebbe molto meglio se tu adottassi un partner del tipo Observer: non 
appena viene eseguito lo scrollo, tutte le classi interessate vengono 
aggiornate.  Ma in ogni caso, non capisco proprio perché usi una DBGrid 
e non usi gli altri controlli db-aware.

 Sarebbe molto meglio se tu adottassi un partner[...]
partner=pattern

> partner=pattern
spiegati meglio,
ricercando nell'help di D7
- observer non ottengo alcuna indicazione
- partner ottengo qualcosa che non serve
program Prog;
uses Unit2;
const a = b;
...
unit Unit2;
interface
uses Unit1;
const b = c;
...
unit Unit1;
interface
const c = 1;
non uso dbaware , per maggior flessibilita';
ad es. quando digito nelle caselle Edit non devo
essere in modalita' insert. 

 non uso dbaware , per maggior flessibilita';
E tu me la chiami "flessibile" la condizione in cui stai sviluppando?
Stai facendo dei salti mortali, cercando di fare esattamente le stesse 
cose che si fanno in modo del tutto automatico con i componenti 
db-aware.  Non ci vedo nessuna controindicazione, poi, al fatto che per 
inserire dei dati in un dataset, tu debba essere in uno stato coerente 
(dsInsert o dsEdit) con l'operazione che vuoi fare.
Prima di abbandonare i componenti db-aware, bisogna essere realmente 
consapevoli di ciò che si vuol realizzare.
Se stai sviluppando un programmma a livello professionale, per qualcuno 
che lo userà seriamente, butta via la tecnica che stai utilizzando 
perché è una pessima tecnica.

 ha scritto nel messaggio 
news:K0sbf.3734$OR3....@tornado.fastwebnet.it...


 - le tue opinioni sull'uso dei db-aware te le puoi tenere.
Andrea è molto diretto, ma non credo che abbia tutti i torti riguardo 
l'uso dei "Data Control" nel tuo caso specifico.
Ti spiego come la penso: se io - leggendo il tuo problema - noto che 
l'uso dei "Data Control" è in grado di risolverlo in maniera corretta, 
funzionale e abbastanza collaudata, come posso suggerirti una soluzione 
differente? :-/
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 - le tue opinioni sull'uso dei db-aware te le puoi tenere.
Ne prendo atto, ma questo significa che terrò per me qualsiasi altra 
risposta io possa avere a qualsiasi altro quesito che tu ponga in futuro.

> risposta io possa avere a qualsiasi altro quesito che tu ponga in futuro.
di solito in un ng si chiedono opinioni , e di dovrebbero ricevere
riposte costruttive, tu invece ti ritieni onnipotente e deposotario
della verita' assoluta.
ecco perche' non vale la pena proseguire, non sei costruttivo. 

 della verita' assoluta.
Sei libero di contare le risposte "costruttive" che ho dato in 
questo ng in tutto il tempo che lo frequento.  Accusare qualcuno 
di sentirsi onnipotente o depositario di verità assolute è una 
scusa troppo banale e scontata per tapparsi le orecchie di fronte 
alle critiche.  Se ti sforzassi tanto così, capiresti che forse la 
mia risposta è la più costruttiva che tu possa avere.  Se poi vuoi 
che la gente ti dica ciò che vuoi sentirti dire, allora da me non 
verrai soddisfatto.  Se sei alle prime armi con Delphi, impara ad 
apprezzare i consigli di chi lo conosce meglio di te.  Passo e chiudo.

 - le tue opinioni sull'uso dei db-aware te le puoi tenere.
Condivido pienamente l'opinione di andrea (anche se un po troppo diretto:).
Leggo spesso su questo ng gente che non utlizza i dbaware .. che poi non 
ho capito per quale motivo.. penso che i client dataset diano un buon 
livello di astrazione rispetto ai dati relai ed un buon metodo di lavoro 
.Metodo di sicuro piu stardard e sicuro del tuo.
Quando hai parecchi di dati il cds ti viene incontro con il paket record
voglio vedere a mano come fai a simulare una cosa del genere.
Poi liberissimo di adottare le tue tecniche .. fossi in te ci penserei 
un attimino.
ciao
   gabriele

 ecco il codice;
[CUT]
Se vuoi mantenere il tuo modus operandi faresti meglio a copiare in 
Edit4 ed Edit5 i valori dal DB direttamente nell'AfterScroll che viene 
eseguito solo se ti posizioni su un record diverso.
In questo modo eviteresti di usare un Timer che appesantisce, 
inutilmente in questo caso, l'applicazione.