|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Написание с заглавной буквы в Edit
Как в Edit сделать так, чтобы при наборе - первый символ записался с заглавной буквы, а остальные символы были строчными?
|
#2
|
|||
|
|||
Вот чтото этого нужно юзать
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Length(Edit1.Text) < 1) and (Key in ['а'..'я']) then Key := AnsiUpperCase(Key)[1] else Key := AnsiLowerCase(Key)[1]; end; Не работает когда ты выделил весь текст и начинаешь заново его писать... Ошибка в этом условии Length(Edit1.Text) < 1 |
#3
|
|||
|
|||
С этой ошибкой есть смысл бороться? И еще, если есть такая фамилия Маадыр-Оол, как после тире тоже прописать заглавную букву?
Последний раз редактировалось Beast, 26.08.2008 в 00:14. |
#4
|
|||
|
|||
В событии OnChange этот код работает и когда выдлен весь текст.
Код:
procedure TForm1.Edit1Change(Sender: TObject); var S : TCaption; P : Integer; begin if Length(Edit1.Text) > 0 then begin P := Edit1.SelStart; S := AnsiUppercase(Edit1.Text[1]) + Copy(Edit1.Text, 2, 255); Edit1.Text := S; Edit1.SelStart := P; end; end; Не забывайте делать резервные копии |
#5
|
|||
|
|||
Спасибо, все заработало, если не затруднит, можно пояснить следующий код:
Код:
P := Edit1.SelStart; S := AnsiUppercase(Edit1.Text[1]) + Copy(Edit1.Text, 2, 255); |
#6
|
|||
|
|||
Вот еще два кода, которые пишут первую букву - заглавной, остальные строчными в независимости от выделения и Shift'а (оба кода рабочих):
Код:
procedure TForm1.Edit1Change(Sender: TObject); var s: string; begin s := Edit1.text; if length(s) > 0 then begin Edit1.SetFocus; Edit1.SelStart := length(s); Edit1.text := AnsiUpperCase(Copy(s, 1, 1)) + AnsiLowerCase(Copy(s, 2, length(s))); end; end; Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var s: String; begin s := Key; if Edit1.SelStart = 0 then s := AnsiUpperCase(s) else s := AnsiLowerCase(s); Key := s[1]; end; Последний раз редактировалось Beast, 27.08.2008 в 17:05. |
#7
|
|||
|
|||
А если задать в поле Edit написание тире (#45) - можно автоматически ставить заглавную букву после этого тире? Например такая фамилия: Маадыр-Аглы-Оол.
|
#8
|
|||
|
|||
Цитата:
Во второй строке преобразование первой буквы в заглавную и присоединение к этой букве остальных, начиная со второй. Такие манипуляции непосредственно с методом Text Delphi не допускает, поэтому приходится использовать локальную переменную (S). Код:
procedure TForm1.Edit1Change(Sender: TObject); var S : TCaption; P, K : Integer; begin if Length(Edit1.Text) > 0 then begin P := Edit1.SelStart; S := AnsiUppercase(Edit1.Text[1]) + Copy(Edit1.Text, 2, 255); K := PosEx('-', S); while K > 0 do begin if Length(S) > K then S[K+1] := AnsiUppercase(S[K+1])[1]; Inc(K); K := PosEx('-', S, K); end; Edit1.Text := S; Edit1.SelStart := P; end; end; Цикл здесь затем, чтобы найти все дефисы в тексте. Их может быть более одного. функция PosEx находится в модуле StrUtils. Не забывайте делать резервные копии |
#9
|
|||
|
|||
Спасибо за помощь
|