Newsgroup: it.comp.lang.delphi
Titolo: Piccolo problema su gestione controlli TEdit e TButton.

Ciao a tutti,
ho un problema apparentemente banale. Ipotizziamo quattro controlli TEdit e 
un controllo TButton. Il controllo TButton č inizialmente disattivato.
Come posso rendere attivo il controllo TButton SOLO E SOLO SE tutti e 
quattro i controlli TEdit contengono un valore a esso associato?
In altre parole, il controllo TButton DEVE risultare disabilitato se almeno 
uno dei quattro controlli TEdit non contiene alcun valore.
Grazie in anticipo a chi mi risponde.
Cooper. 

uno dei quattro controlli TEdit non contiene alcun valore.
TuoButton.Enabled := (TuoEdit1.Text<>'') and
                     (TuoEdit2.Text<>'') and
                     (TuoEdit3.Text<>'') and
                     (TuoEdit4.Text<>'');
MI sono limitato a scrivere <>'' perché nel caso di un TEdit bisogna
capire che intendi con "nessun valore" presente.
A me comunque queste soluzioni non piacciono molto.  Molto meglio
porre un controllo alla pressione del bottone.


Esatto, però in questo caso, il button è disattivo per default... il 
controllo alla pressione come sarà gestito? Il problema che riscontro e: 
l'utente assegna un valore a tutte e quattro le tedit, e il button si 
attiva; ma nel momento in cui l'utente, assegna una stringa vuota ad almeno 
un tedit, il button dovrebbe disattivarsi...
Per cui non ho inteso come dovrei procedere; proverò con il tuo suggerimento 
di sopra però se c'è una soluzione migliore ti sarei grato se mi indicassi 
quale.
Grazie ancora,
Cooper.

un tedit, il button dovrebbe disattivarsi...
Capisco che attivare/disattivare il bottone è più bello a livello
grafico, ma io ti suggerisco di non modificare lo stato del bottone e
controllare, invece, alla pressione del bottone, che tutti i TEdit
siano valorizzati.

 controllo alla pressione del bottone.
E sopratutto un bel messaggio che spieghi _perchè_ i dati immessi non
sono validi. Nel caso del button disattivato invece l'utonto penserà
subito "ma perchè quest'accidenti di programma non funziona?" :-)
-- 
http://metallikop.altervista.org/

"Nurax" <nu...@linux.site.INVALID> ha scritto nel messaggio 
news:pan.2006.03.05.09.06.55.276708@NuRaX...

Esattamente, questo è alla base di tutto (occorre mettersi sempre nel caso 
peggiore) quando si sviluppa un applicazione e prevenire ogni "effetto 
collaterale".
Il consiglio di Laforgia è giusto, ma se da un lato risolverebbe il problema 
del codice dall'altro potrebbe indurre l'utente meno esperto a confondersi 
per questo motivo sto cercando di semplificare il tutto ai minimi termini 
evitando nei limiti del possibile eventuali finestre che si aprono etc.
Purtroppo i programmatori (correggetemi se sbaglio) devono trovare un buon 
compromesso affinchè il codice e l'utente meno esperto possano convivere 
allo stesso tempo nella applicazione che stanno sviluppando.
Cooper. 

allo stesso tempo nella applicazione che stanno sviluppando.
L'importante è che l'utente non venga messo in condizione di fare
degli errori.  Tutto qui.  Il resto, su come implementare o meno un
bottone, è zucchero.

 quattro i controlli TEdit contengono un valore a esso associato?
Evento OnChange con il codice postatoti da Andrea.
Puoi utilizzare la stessa procedura per tutti e quattro gli OnChange.
Comunque sono d'accordo con i consigli di Andrea.


Esatto, su questo sono pienamente d'accordo, ma talvolta (non è questo il 
caso specifico) possono verificarsi situazioni in cui ciò non è cosi tanto 
semplice (non impossibile), per cui si rende necessario "intervenire" a un 
livello superiore.
Cmq ti ringrazio, il tuo suggerimento mi è stato molto d'aiuto.
Cooper.
PS: Mi scuso per le domande un po' banali, ma per quanto abbia una certa 
dimestichezza col pascal (intendo quello per dos, sebbene non lo abbia piu 
utilizzato da diversi anni) adesso che mi sto riavvicinando attraverso il 
delphi, sto cominciando a ri-ambientarmi.
Un po' come uno che sta in inghilterra per un paio di anni e impara la 
lingua poi torna alla sua patria e non parla l'inglese per molti anni e 
quando ritorna in inghilterra agli inizi avrà le sue prime difficoltà fino a 
quando non si sarà nuovamente ambientato con la lingua.
Ho cominciato ad avere le idee piu nitide circa la programmazione a oggetti 
per quanto segua una logica completamente diversa dalla programmazione 
lineare tipica del pascal e già questo è un grosso passo avanti, il resto 
viene gradualmente.

livello superiore.
Non capisco che vuoi dire, ma fa nulla.


Scusami se non mi sono espresso chiaramente, provo con un esempio per 
rendere l'idea.
Intendevo dire che non sempre si è in condizione di prevenire tutti i 
possibili "effetti collaterali", per cui talvolta e necessario sbarrare in 
qualche modo la strada per evitare che possano verificarsi.
Un esempio tipico potrebbe essere qualcosa del tipo:
se (variabile) :
  caso1 : { fai questo }
  caso2 : { fai questo }
  caso3 : { fai questo }
   ...
  casoN : { fai questo }
altrimenti
  casoNonPrevisto : { fai questo }
fine.
Il "casoNonPrevisto" è quello che intendevo per "livello superiore"; 
probabilmente lo chiamerai in modo diverso. Ma alla fine non diciamo la 
stessa cosa.

possibili "effetti collaterali"
Non stai capendo ciò di cui ti sto parlando: esistono delle
precondizioni perché una determinata attività abbia luogo?
Bene, testare le precondizioni prima di partire o sbarrare la strada
se non ci sono le precondizioni è assolutamente equivalente.

La persona che ti ha risposto ti consiglia di eseguire il controllo sulle
Edit box solo quando viene premuto il bottone.
Devi gestire l'evento
OnClick del bottone a cui ti riferisci.
Qui devi inserire il codice che ti ha dato e se non viene soddisfatta la
variabile booleana
puoi mettere.
ShowMessage ('Una delle edit box non contine il dato') ;
E non fare eseguire quello che ti proponi di eseguire.
Il pascal è diverso da delphi perchè il modo di pensare della OOP è diverso.
Se conosci il Pascal conosci gia la sintassi del linguaggio ma ti manca
tutto ciò che sta dietro alla "filosofia" della OOP.
Se invece conosci già la filosofia chiedo scusa.
Io ci ho messo molti anni a passare da uno all'altro.
E comunque in bocca al lupo.
Ciao
Mario (
mari...@inwind.it
)

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


per evitare che degli spazi immessi casaulmente ti portino in errore io
farei così
if  Trim(TuoEdit1.Text) + Trim(TuoEdit2.Text) +
   Trim(TuoEdit3.Text) +  Trim(TuoEdit4.Text) = '' then
begin
  ShowMessage ('Una delle edit box non contine il dato') ;
  exit;
end;


per evitare che degli spazi immessi casaulmente ti portino in errore io
farei cosě
if  Trim(TuoEdit1.Text) + Trim(TuoEdit2.Text) +
   Trim(TuoEdit3.Text) +  Trim(TuoEdit4.Text) = '' then
begin
  ShowMessage ('Una delle edit box non contine il dato') ;
  exit;
end;
---
Ringrazio a Mario e Brunella e in generale a tutti coloro che hanno 
contribuito nel risolvermi il problema terrň conto dei vostri consigli e 
suggerimenti :)
Intanto sono riuscito a risolvere :) grazie ancora.
Cooper.