Tedit, cum se face distincția între intrarea utilizatorului și atribuirea textului unei noi valori

TEdit, cum să distingem intrarea utilizatorilor de la atribuirea unei noi valori textului?

Ambele cauzează OnChange. Cum, deci, să distingem?

Sarcina este: există două TEdit, intrarea utilizatorului într-o singură editare1 modifică valoarea într-un alt Editor2, dar numai până când utilizatorul modifică valoarea din Edit2. După aceea, orice editare Edit1 nu afectează Edit2. Cum se distinge intrarea utilizatorului în Edit2 de la Edit2.Text = "Ceva"? Deci, am putea verifica flag-ul flagEdit2UserChanged și apoi, dacă Edit1 a fost schimbat, dacă este bifată caseta de validare, atunci nu mai schimbați Edit2. Reacționați la apăsările de taste din Edit2? și anume folosesc Edit2.OnKeyPress? Până acum, fac asta prin filtrarea simbolului # 13. Există vreo altă soluție? se poate baza pe Win Api?

Oh, da, problema este că forma afișează atribuirea valorilor inițiale, inclusiv în Edit1, care afectează Edit2. Desigur, aceasta nu este o problemă, trebuie doar să țineți evidența când edit1 poate afecta Edit2, dar totuși doriți să știți cum să modificați proprietatea Text fără a apela OnChange?

Atât textul, cât și proprietatea sunt proprietăți.
În plus, există o mulțime de proprietăți, de exemplu, controlul formei active


> sanx # xA0; (Aug 26, 09 22:43) # xA0;

> Edit1 modifică valoarea în altă ediție2, dar numai până la
> pori până când utilizatorul modifică valoarea din Edit2.

Edit2.Modified?

Bear Piglet, nu înțelegi cum poate ajuta acest lucru?
Leonid Troyanovsky ATP, este valabil când modificați Edit2.Text, proprietatea Edit2.Modified nu se modifică. Se modifică numai atunci când textul modifică utilizatorul.

Dar rămâne să învățăm cum să schimbăm textul în TEdit fără să sunăm TEdit.OnChange, este posibil acest lucru?

> sanx # xA0; (26.08.09 23:46) [4]

Ai răspuns deja la întrebarea ta (cu ajutorul lui Leonid). Valoarea inițială a Edit2.Modified = False, se va schimba numai cu introducerea utilizatorului. Acesta este același steag pe care l-ați dorit:


procedură Edit1Schimbați:
începe
# xA0;.
# xA0; dacă nu Edit2.Modified atunci
# xA0; începeți
# xA0; # xA0;. // Utilizatorul nu a schimbat textul în Edit2, așa că îl schimbăm programat
# xA0; sfârșitul;
# xA0;.
se încheie;

Yuri Zotov, da, dar am de gând să inițializa valorile pentru edit1 atunci când deschideți fereastra, iar în acest moment (edit1.text = „textul inițial“) funcționează edit1.onChange, una în care există o verificare în cazul în care nu edit2.modified atunci. Și în acest moment nu am nevoie de asta.

Da voosche rezolva această problemă există, desigur, posibil să se facă de pavilion ca tip de flagThisInit, doar întrebam cum de a modifica proprietățile textului / legendă pentru orice componentă, ci # xA0; nu a existat nici o schimbare. Așa cum am înțeles problema este că VCL reacționează la evenimentele din Windows, și cereți Wind nu pentru a trimite acest eveniment nu va funcționa. ) Acest lucru este doar interesant :)

> doar întrebam cum se poate schimba proprietatea text / caption pentru
> orice componentă, dar așa că # xA0; nu a existat nici o schimbare

Pentru cei care sunt "doar interesați", există o modalitate evidentă de a elimina dispozitivul de manipulare OnChange pe durata alocării.


var
# xA0; Temp: TNotifyEvent;
începe
# xA0; Temp: = Edit1.OnChange;
# xA0; încercați
# xA0; # xA0; Edit1.OnChange: = zero;
# xA0; # xA0; Edit1.Text: = "un text nou";
# xA0; în cele din urmă
# xA0; # xA0; Edit1.OnChange: = Temp;
# xA0; sfârșitul;

> sanx # xA0; (27.08.09 02:53) [6]

> Am inițializat valorile pentru Edit1 când deschid fereastra,
> și în acest moment (edit1.text = "start text") este declanșată
> edit1.onChange, cel care verifică
> dacă nu este edit2modified atunci.
> Și în acest moment nu am nevoie de asta.

Atribuiți manipulatorul evenimentului edit1.onNu schimbați în timp de proiectare, dar cu codul, după inițializarea edit1.text = "start text".

Memorie: 0,74 MB
Înclinare: 0.094 sec