Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.08.2008, 21:13
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию Написание с заглавной буквы в Edit

Как в Edit сделать так, чтобы при наборе - первый символ записался с заглавной буквы, а остальные символы были строчными?
  #2  
Старый 25.08.2008, 21:57
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Вот чтото этого нужно юзать
Код:
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  
Старый 25.08.2008, 23:56
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

С этой ошибкой есть смысл бороться? И еще, если есть такая фамилия Маадыр-Оол, как после тире тоже прописать заглавную букву?

Последний раз редактировалось Beast, 26.08.2008 в 00:14.
  #4  
Старый 26.08.2008, 08:05
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

В событии 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;
А в OnKeyPress когда нажимается символьная клавиша после того как отмечен весь текст, в Text еще сидит вся отмеченная строка, потому и не срабатывает условие Length(Edit1.Text) < 1.
__________________
Не забывайте делать резервные копии
  #5  
Старый 26.08.2008, 13:09
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо, все заработало, если не затруднит, можно пояснить следующий код:
Код:
 P := Edit1.SelStart;
 S := AnsiUppercase(Edit1.Text[1]) + Copy(Edit1.Text, 2, 255);
  #6  
Старый 26.08.2008, 13:14
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Вот еще два кода, которые пишут первую букву - заглавной, остальные строчными в независимости от выделения и 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  
Старый 26.08.2008, 15:35
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

А если задать в поле Edit написание тире (#45) - можно автоматически ставить заглавную букву после этого тире? Например такая фамилия: Маадыр-Аглы-Оол.
  #8  
Старый 27.08.2008, 15:03
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от Beast
Спасибо, все заработало, если не затруднит, можно пояснить следующий код:
Код:
 P := Edit1.SelStart;
 S := AnsiUppercase(Edit1.Text[1]) + Copy(Edit1.Text, 2, 255);
Присвоение Text значения переводит курсор (SelStart - положение курсора в строке) в начало строки, поэтому надо запомнить место, где был курсор и после присвоения установить его на прежнее место.
Во второй строке преобразование первой буквы в заглавную и присоединение к этой букве остальных, начиная со второй. Такие манипуляции непосредственно с методом 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  
Старый 27.08.2008, 17:31
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо за помощь
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter