R@kot |
Отправлено: 04.03.2005, 01:35 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Потребовалось вот что:
Пользователь вводит строку в Edit. Нужно, чтобы первая буква всегда была заглавной. Для этого я в событии OnChange заменяю текщую надпись в Edit'е на ту же надпись, только с записанным в верхнем регистре первым символом. Однако при этом курсор переходит в начало строки.
Как его можно перевести обратно в конец? Кому не лень, напишите...
|
|
GIZMO |
Отправлено: 04.03.2005, 10:04 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (R@kot @ 04/03/2005, 01:35) | Однако при этом курсор переходит в начало строки.
Как его можно перевести обратно в конец? Кому не лень, напишите... |
Edit1->SelStart = Edit1->Text.Length();
|
|
klen |
Отправлено: 04.03.2005, 10:16 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Куча способов, один из них:
CODE | int Cursor = Edit1->SelStart;
Edit1->Text = Edit1->Text.SubString(1,1).UpperCase() + Edit1->Text.SubString(2,Edit1->Text.Length());
Edit1->SelStart = Cursor ;
|
|
|
R@kot |
Отправлено: 05.03.2005, 01:40 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Спасибо, ребят! Как всё оказалось просто, а я что-то сам не смог допереть
|
|
xim |
Отправлено: 05.03.2005, 11:51 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
А зачем так сложно то? Достаточно добавить в обработчик события OnKeyPress для Edit:
CODE |
if(!*dynamic_cast<TEdit *>(Sender)->Text.c_str())
{
AnsiString str=Key;
Key=*str.UpperCase().c_str();
}
| |
|
Guest |
Отправлено: 05.03.2005, 13:52 |
|
Не зарегистрирован
|
А я лично считаю надо использовать событие onExit
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
String Str = ((TEdit *)Sender)->Text.Trim();
if(!Str.IsEmpty())Str[1] = String(Str[1]).UpperCase()[1];
((TEdit *)Sender)->Text = Str;
}
|
|
Guest |
Отправлено: 05.03.2005, 13:55 |
|
Не зарегистрирован
|
А я лично считаю надо использовать событие onExit
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
String Str = ((TEdit *)Sender)->Text.Trim();
if(!Str.IsEmpty())Str[1] = String(Str[1]).UpperCase()[1];
((TEdit *)Sender)->Text = Str;
}
покидая edit первая буква станет заглавной |
|
R@kot |
Отправлено: 06.03.2005, 02:08 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Мне просто нужно было, чтобы пользователь видел изменение первого символа именно в момент, когда он вводит надпись.
|
|