lucru cu wxTextCtrl

3 posts / 0 new
Last post
ono
lucru cu wxTextCtrl

Când lucram cu MFC, exista o posibilitate ca o căsuţă de editare text să poată fi setată astfel încât să transforme intrările de la tastatură din litere mici în majuscule. Pentru asta era suficient să bifăm cu click opţiunea respectivă. Aş avea nevoie şi la wxGTK să pot transforma automat, o intrare de la tastatură în majusculă (să zicem, trebuie să trecem la o adresă scara D, dar, pentru a simplifica treaba operatorului, acesta să poată tasta d şi să se transforme automat în D). C oferă şansa cu getchar, toupper şi putchar (şi mai sunt cîteva opţiuni, cu afişare sau fără, pe desktop). Am încercat şi cu wxGTK, dar nu există o posibilitate similară cu cea din MFC. Am derivat o clasă din wxTextCtrl, la care am creat o funcţie de mesaje, care să trateze wxEVT_CHAR (ba chiar şi celelalte două mesaje, pentru key-up, respectiv, key-down). Programul ar fi în Unicode, ceea ce aduce o mică complicare (trebuie folosită wxKeyEvent::GetUnicodeKey), dar am luat în considerare şi acest lucru. Mi-am prins urechile, pentru că pot transforma caracterul în majusculă, dar nu merge deloc bine, apare dublu, literă mică şi majusculă. Am încercat şi să tratez mesajul EVT_TEXT, în clasa părinte (derivată dintr-un wxDialog), dar tot nu mă descurc, nu e defel bine. Rog frumos, dacă ştie cineva cum s-ar putea rezolva, să mă ajute.

cosmin
cosmin's picture
Re: lucru cu wxTextCtrl

Nu mă prea pricep eu la wxWidgets, dar aș încerca o combinație de wxTextCtrl::Replace și wxString::MakeUpper. Adică în evenimentul de schimbare a textului din casetă, să iei tot textul, să-l faci uppercase, și să-l înlocuiești.

[url=http://counter.li.org/]Linux registered user #368449[/url]

ono
Re: lucru cu wxTextCtrl

Mulţumesc şi acuma, Cosmine. Merge, într-adevăr! Însă ceva mă rodea rău la suflet, pentru că totuşi, TREBUIE să fie o cale de a rezolva această problemă, cu OnChar şi wxKeyCode. Aşa că am nu am renunţat la idee şi am dat cu târnăcopul până am găsit o rezolvare, folosind OnChar. O scriu mai jos, ca, dacă mai este cineva în situaţia aceasta, să nu se mai chinuiască, ci s-o ia de-a gata. Codul e mai jos. TxtEdit este clasa derivată din wxTextCtrl:

void TxtEdit::OnChar(wxKeyEvent& e)
{
    if(isalpha(e.KeyCode()))  (*this)     else    e.Skip(); // e necesar, pentru a nu bloca alte intrari de la tastatura in acest control
}

Într-adevăr, sentimentul că nu eşti singur la nevoie, este foarte tonic. Şi dă roade. De aceea, dacă ştiu şi pot, am să caut şi eu să ajut pe ceilalţi.

ono