Newsgroup: it.comp.lang.delphi
Titolo: Sapere se una variabile esiste

Ciao a tutti, mi servirebbe sapere se una variabile esiste, mi spiego
meglio:
ho una variabile dichiarata in una form, però questa form la creo quando mi
occorre, in un'altra unit devo fare un controllo se questa variabile è
visibile .
prog orig:
        if frmAnaArt.Inserimento then
risolto con
    try
        if frmAnaArt.Inserimento then
    except
    end;
Non esiste un metodo più elegante ???
Ciao e grazie a tutti
--
Simone
Honda S2000 driver Blu/black 240cv
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

Non esiste un metodo più elegante ???
prova con:
if Assigned(frmAnaArt.Inserimento) then begin   
   blah blah blah.......
end;
ricordati che assigned verifica solo se l'oggetto e' stato allocato, non la sua validita'.
by the way, l'oggetto che testi e' un boolean, quindi puo' andare bene cosi'...
ciao
morde

 end;
Già provato ma Assigned come argomento chiede un puntare ad una procedura e
non una variabile.....
Adesso mi è venuta un'idea e se provo
    if Assigned(^frmAnaArt.Inserimento) then begin
ma così non funzia...
Come faccio a sapere il puntatore di una variabile ???


 ma cosě non funzia...
Ho provato anche con
    if Assigned(@frmAnaArt.Inserimento) then begin
ma credo di non capire bene come interpretare l'Assigned....
Aiutatemi... proprio non mi piace quel try la in alto..


 by the way, l'oggetto che testi e' un boolean, quindi puo' andare bene
cosi'...
Assigned verifica solo se il puntatore è diverso da nil, nel qual caso
restituisce True.
Un oggetto può essere stato distrutto, ma la sua variabile d'istanza può
rimanere assegnata ad valore a meno che dopo il Free l'oggetto non sia stato
anche posto assegnato a nil (eventualmente può usare la FreeAndNil).
In tutti i modi, il nostro amico può usare la procedura Assigned per
verificare se fmrAnaArt è stata assegnata, dato che crea la form
direttamente a runtime:
if Assigned(frmAnaArt) then
begin
//  Continua qui ad analizzare il valore della variabile all'interno
dell'oggetto
end;
Naturalmente, dopo il Free è fondamentale anche assegnare nil a frmAnaArt.
ciao
Antonio

devi distinguere + form ed eseguire determinate operazioni solo tramite i
form che hanno questa variabile?
A.

 wrote:
[...]
Ineccepibile :)
Morde

 form che hanno questa variabile?
Non devo eseguire una cosa solo se sono stato mandato in quel punto da una
determinata form, altrimenti ne faccio un'altra...
In poche parole se ci arrivo direttamente modifico un record, altrimenti
devo fare un inserimento....
adesso sono cosě:
   try
    if frmAnaArt.Inserimento then begin
        dmDati.qArt.FieldByName('prezzo').AsString :=
FloatToStr(frmAnaArt.cePrezzo.Value);
        ......
 
dmDati.qArt.Post
;
        frmAnacli.Destroy;
        Exit;
    end;
  except
  end;
    DBGrid1.Enabled := False;
    with dmDati.qAna do begin
        eRSoc.Text := FieldByName('ragsoc').AsString;
       ....
         if FieldByName('tipo').AsString = 'F' then
            cbFornit.Checked := True;
    end;
Ciao
SImone



Scusa l'ignoranza, ma come gli dico che deve andare a nil....
Per distruggere la Form io uso Form.Destroy poi cosa devo chiamare....
Grazie


non ti servono le variabili globali.
Puoi definirti un tuo costruttore per la form:
constructor MyCreate(AOwner: TComponent; const IsInsert: boolean);
begin
  inherited Create(AOwner);
  if IsInsert then begin
    // fai la azione a
  end
  else begin
    // fai la azione b
  end
Poi, quando la devi usare:
  With TTuoForm.MyCreate(Self, True ) do begin // oppure metti false....!
     Try
        ShowModal;
    finally
       Free;
   end;
end;:
Bye
A.

[MEGACUT]
Se ti dico che non ho capito ci credi ???
Non devo mica rifare tutto, come idea volevo solo eliminare il Try che mi fa
tanto schifo e se posso evitarlo mi fa molto più elegante...
Il mio prob è che può succedere di fare un test su una variabile che non
esiste, quindi il prob è come sapere a run-tim , senza l'uso della try, la
sua esistenza, senza stare a inventare cose strane che con la try si
risolvono in 2sec...
Ciao e grazie per l'interessamento.
--
Simone
Honda S2000 driver Blu/black 240cv


Sorry!
Non avevo capito che avevi gia qualcosa di pronto basato su questo tipo di
soluzione.
Credevo fossi in una fase di stuido/analisi.
Bye
A.

 Per distruggere la Form io uso Form.Destroy poi cosa devo chiamare....
Generalmente per distruggere un oggetto è meglio chiamare Free. Esiste anche
la procedura FreeAndNil che distrugge ed assegna nil contemporaneamente.
Tuttavia, per le form occorre prestare attenzione a che tipo di form è,
ovvero :
- modale o non modale
- dove la distruggi (es. se all'interno di un evento di un componente che ha
come owner la form stessa nel qual caso devi usare il metodo Release)
- Il metodo Release torna subito per cui è preferibile assegnare nil alla
variabile direttamente nell'evento OnDestroy
- Se è modale puoi usare anche il parametro Action dell'evento OnClose
assegnandolo a caFree. Poi assegni nil alla variabile. Nel caso di form
modali, infatti la semplice chiusura della form non distrugge la stessa.
ciao
Antonio

> Credevo fossi in una fase di stuido/analisi.
Scusa te non credo di essermi spiegato bene...
E' stata una cosa che il cliente mi ha chiesto dopo, quindi diciamo
un'aggiuta e per non stare a stravolgere il programma ho riutilizzato una
form di ricerca che avevo già fatto....
Quindi la soluzione tipo Guardo e neanche il tempo di capire e il try era
già li, ma non mi piace molto.....
Qaundo ero a scuola il prof. mi cazziava se usavo il try oppure Exit, ogni
tanto sono utili ma se posso evitarli mi fa piacere....
Ciao


> Qaundo ero a scuola il prof. mi cazziava se usavo il try
Io uso molto la sequenza try..finally per garantire che le risorse vengano
sempre liberate:
oggetto := TOggetto.Create;
try
   With Oggetto do begin
   ...
    end;
finally
  oggetto.Free
end;
Mi piacerebbe sapere PERCHE ti kazziava..
Bye
A.

tanto sono utili ma se posso evitarli mi fa piacere....
imho sbagliava a cazziarti ( a meno che non li mettessi nei posti davvero sbagliati)
Non capisco perche' ancora oggi ci siano persone che ritengono che inserire 
qualche exit in una procedura sia una bestemmia della programmazione oop.
Spesso una procedura puo' essere scritta in molti modi, sortendo lo stesso effetto.
Durante la mia esperienza di programmazione c++ ho visto decine di migliaia di righe di codice,
e ti garantisco che ne ho visti di try/exit, ecc...
(i GOTO mai!)
Ciao
Morde
P.S.
scusa l'OT

 modali, infatti la semplice chiusura della form non distrugge la stessa.
Nel mio  caso la form è modale è per questo che chiamo la destroy....
Consiglio: uso la caFree o continuo con la Destroy.????


 (i GOTO mai!)
io ho visto anche quelli.
sia xche li usavo (anno 1989 circa..)
sia l'anno scorso in una app delphi5: mi stavano scendendo le lacrime....
A.

 Consiglio: uso la caFree o continuo con la Destroy.????
Se la form è modale allora puoi chiamare il Free piuttosto che il Destroy.
Usa un try..finally. Nel blocco try inserisci la chiamata a showmodal,
mentre nel finally metti il Free della stessa.
Antonio

sia l'anno scorso in una app delphi5: mi stavano scendendo le lacrime....
Lacrime di nostalgia? 
Per quanto mi riguarda, ricordo ancora quando ero bambino, sotto natale, con la neve alta quasi 
un metro (ne scendeva tanta vent'anni fa), andavo da un mio caro amico a giocare
col sinclair spectrum 48k.... ogni notte sognavo babbo natale che me lo portava...
peccato che non fu cosi', la mia famiglia non se lo poteva permettere.
Qualche anno dopo, il grande babbo (quello vero, non quello di natale) mi regalo' il mitico
philips msx 8020: evvai di programmazione!
Mi innamorai dei gosub e return, dei GOTO!
Io non credo che cambiero' mai piu' lavoro, il bambino che c'e' me non si divertirebbe piu'...
Ciao
Morde
P.S.
E non ti dico i brividi che ho avuto sulla schiena, quando ho rivisto i sorgenti da me scritti
in clipper 10 anni fa, poi caduti nel dimenticatoio....
Certe emozioni fanno bene al nostro cuore informatico :)

 Certe emozioni fanno bene al nostro cuore informatico :)
Tipo trovare a casa di un amico un TI994A....
Sob! il tempo passa... :((
A.

[CUT]
 Grazie!!



Parlo solo degli Exit così facciamo prima, allora secondo lei un exit era
come un GOTO fine procedura e quindi per la oop non era 'rispettata'...
fate conto che in un compito in classe, avevo utilizzato un Exit in una
procedura, ovviamente scritta su foglio di carta, sapete il voto :
4(quattro), allora io tutto incazzato le chiedo il motivo, volete sapere :
"non rispetto della prgrammazione oop"...... -> Stronza!!!!!!!
Allora le faccio : "Facciamo una cosa confrontiamo la mia applicazione con
una che ha preso un voto suff e se la mia funziona uguale lo stesso voto lo
merito anche io, nel caso contrario il mio voto diventerebbe 0(zero)." Bene
scendiamo in laboratorio, la mia applicaz era la più veloce, risultato
abbligata a cambiarmi il voto in un bel 9(nove) ......
Vi rendete conto..... Ora mi vengono gli incubi al solo pensiero degli
Exit...
Per i try-finally nulla ma i try-except secondo lei, se li usavi significava
che non avevi scritto bene il programma.....  Vi lascio pensare ....


Invece io il mitico SixDriver!
No, niente di tutto questo, prima di smettere e passare ad altri ambienti di lavoro, ho usato clipper 5.2 e
le clipper-tools. Tutto sotto dos. Tutto sotto i mitici 640K di ram.
Erano i tempi delle mitiche BBS, e delle riviste con su i listati in basic 
per gli home computer di allora.... :-)
Amarcord...
Ciao
Morde

 pensare ....
Se il caso volesse che, oggi o un giorno futuro, la tua prof leggesse
questo thread, questo è il mio commento: cambi mestiere, ci sono tanti
programmatori che vorrebbero farsi 2 mesi e mezzo di ferie.
--
Jax

[CUT]
Temo di non aver capito secondo te aveva ragione lei ???


 Temo di non aver capito secondo te aveva ragione lei ???
No, evidentemente non hai capito :)
--
Jax