![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как в 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
|
|||
|
|||
|
Спасибо за помощь
|