Проблема с wxToupper и wxTolower Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
Margon
In need of some credit
In need of some credit
Posts: 3
Joined: Sat Jan 12, 2008 10:16 am
Location: Minsk, Belarus

Проблема с wxToupper и wxTolower

Post by Margon » Mon Nov 03, 2008 12:58 pm

Народ, подскажите, может кто сталкивался с проблемой когда в UNICODE-билде указанные в названии темы функции не отрабатывают и возвращают исходное значение. Заранее благодарен.

Nikolay
Experienced Solver
Experienced Solver
Posts: 72
Joined: Wed Oct 10, 2007 4:27 am

Post by Nikolay » Tue Nov 04, 2008 7:15 am

Таких функций ни я ни справка по вх 2.8.х незнаем:%)
Но если проблема с не латинскими символами, для которых не работают стандартные функции си++, то вот тут есть решение:

преобразование регистра для русских букв в wxWidgets
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets

Margon
In need of some credit
In need of some credit
Posts: 3
Joined: Sat Jan 12, 2008 10:16 am
Location: Minsk, Belarus

Post by Margon » Tue Nov 04, 2008 9:00 am

Nikolay wrote:Таких функций ни я ни справка по вх 2.8.х незнаем:%)
Имелись ввиду функции wxString::MakeUpper и wxString::MakeLower. Просто внутри они вызывают вышеуказанные.
Nikolay wrote:Но если проблема с не латинскими символами, для которых не работают стандартные функции си++, то вот тут есть решение:

преобразование регистра для русских букв в wxWidgets
Спасибо за совет, что-то подобное я в итоге и сделал. Но было интересно немножко другое:
http://trac.wxwidgets.org/ticket/8631
Если я не совсем олух в английском то это то, что и у меня, но по какой-то причине данный баг не был устранен.
Вот это и есть самое интересное. Ведь там, вроде, предлагалось нормальное решение.[/url]

Kolya
Experienced Solver
Experienced Solver
Posts: 85
Joined: Mon Dec 11, 2006 11:35 am
Location: /dev/null

Post by Kolya » Thu Nov 06, 2008 7:46 pm

Margon wrote: http://trac.wxwidgets.org/ticket/8631
Если я не совсем олух в английском то это то, что и у меня, но по какой-то причине данный баг не был устранен.
Вот это и есть самое интересное. Ведь там, вроде, предлагалось нормальное решение.
Да, но не совсем так. Было предложено всегда под виндой работать через системные функции, игнорируя сишную локаль. (Причем только для строк, с символами работали бы по-старому.) Вадим сказал, что если это надо и делать, то уже под все платформы. Что в будущем, возможно, и будет сделано.

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Mon Nov 24, 2008 10:05 am

Я тут чуть порылся и написал более менее стандартную функцию для С++ без winAPI, но проверить для Linux'а не могу возможно там вместо _wsetlocale нужно поставить wsetlocale.

Code: Select all

void ToLower(wxString & data)
{
      int len=data.length()+1;

      wxChar * buf = new wxChar[len];

      wxStrcpy(buf, data.c_str());
      _wsetlocale(LC_ALL, L"ru") ;
      for (int i=0; i<len; i++)
	   	buf[i] = std::towlower(buf[i]);

      data=buf;

      delete [] buf;
}

Post Reply