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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.08.2011, 23:30
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию Запрет на ввод латиницы

приветствую всех
у меня два вопроса:

1. как запретить вводить в поле латинницу
2. как в этом же текстовом поле, первую букву "поднимать" в верхний регистр автоматически

спасибо
Ответить с цитированием
  #2  
Старый 16.08.2011, 23:38
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

нашел на цифири:
изменю на буквы, и, надеюсь, прокатит

Код:
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key in ['0'..'9'] then key :=#0;
end;

остался только верхний регистр первого символа
Ответить с цитированием
  #3  
Старый 16.08.2011, 23:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Прокатит. В событие OnChange, используй AnsiUpperCase
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 17.08.2011, 00:41
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

пробовал, спасибо

в общем варианте получилось так:

Код:
function UpCaseRus(ch:Char):Char;
asm
  CMP   AL,'a'
  JB    @@exit
  CMP   AL,'z'
  JA    @@Rus
  SUB   AL,'a' - 'A'
  RET
@@Rus:
  CMP   AL,'я'
  JA    @@Exit
  CMP   AL,'а'
  JB    @@yo
  SUB   AL,'я' - 'Я'
  RET
@@yo:
  CMP   AL,'?'
  JNE   @@exit
  MOV   AL,'?'
@@exit:
end;

procedure TForm5.sEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key in ['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M','!','@','#','$','%','^','&','*','(',')','_','-','+','<','>','/','\','|','.',',',' ']) then
  begin
   Key:=#0;
   Application.MessageBox(PChar(' Поменяйте раскладку клавиатуры    '),':|',MB_OK);
  end;
 with Sender as TEdit do
  begin
   if (Text = '') or (Text[SelStart] = ' ') or (SelLength = Length(Text)) then
    begin
     if Key in ['й','ц','у','к','е','н','г','ш','щ','з','х','ъ','ф','ы','в','а','п','р','о','л','д','ж','э','я','ч','с','м','и','т','ь','б','ю'] then
      begin
       Key:=UpCaseRus(Key);
      end;
    end;
  end;
end;
Ответить с цитированием
  #5  
Старый 17.08.2011, 00:42
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

работает безотказно

блин... сам спросил, сам ответил...

ну может кто-то будет гуглить, найдет, понравится, останется
Ответить с цитированием
  #6  
Старый 17.08.2011, 00:44
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Так не про катило почему такой большой код если проблема решается так

Код:
if Key in ['A'..'z'] then key :=#0;
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #7  
Старый 17.08.2011, 00:48
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

и на последок в верхний регистр первую букву можно поднимать так -

Код:
function strtotitle(text:string):string;
begin
  Result:=AnsiLowerCase(text);
  Result[1]:=AnsiUpperCase(Result[1])[1];
end;

.....
begin
str:=strtotitle(str);
end;

самый простой способ по моему....
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #8  
Старый 17.08.2011, 00:51
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

я указал все буквы, согласен
тоже считаю, что такая подстраховка лишняя, спасибо
Ответить с цитированием
  #9  
Старый 17.08.2011, 01:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Electronic_Arts
и на последок в верхний регистр первую букву можно поднимать так -

Код:
function strtotitle(text:string):string;
begin
  Result:=AnsiLowerCase(text);
  Result[1]:=AnsiUpperCase(Result[1])[1];
end;
Лучше всё же так:
Код:
...
  Result:=AnsiUpperCase(text);
...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 17.08.2011, 01:15
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Неа таким образом ты увеличишь все буквы а нам нужен только первый

так что в моем случае - уменьшаем все буквы - потом увеличиваем первую...
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #11  
Старый 17.08.2011, 01:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я предлагал увеличить только первую, так как подразумевалось из вопроса, что все остальные уже в нижнем регистре.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 17.08.2011, 01:26
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

пример в студию - то что ты наверху написал - берет весь текст и увеличивает все буквы ...AnsiUpperCase же сама не догадывается какая буква первая надо указать первую букву...

П.С. если хочешь открой и сам проверь в дельфи...
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #13  
Старый 17.08.2011, 01:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

offtop:
Хватить флудить, я не глядя скопировал твою строку, а ты разошёлся. ТС доволен так что успокойся.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 17.08.2011, 14:02
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

вы учитывайте, что нужно в реальном времени
тоесть во время ввода строки, нужно уловить первый символ и "Поднять" первую букву
но я попробую все приведенные примеры
Ответить с цитированием
  #15  
Старый 17.08.2011, 14:31
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

О чем вообще можно было тут так много говрить, алгоритм простой до безобразия.
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key in ['A'..'Z', 'a'..'z'] then
    key := #0
  else if (Length((Sender as TEdit).Text) = 0) and (key in ['а'..'я']) then
    key := chr(ord(key) - 32);
end;
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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