C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Перевод курсора в конец записи..., ..., находящейся в Edit'е
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



Спасибо, ребят! biggrin.gif Как всё оказалось просто, а я что-то сам не смог допереть sad.gif
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



Мне просто нужно было, чтобы пользователь видел изменение первого символа именно в момент, когда он вводит надпись. wink.gif

Вернуться в Вопросы программирования в C++Builder