![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
приветствую всех
у меня два вопроса: 1. как запретить вводить в поле латинницу 2. как в этом же текстовом поле, первую букву "поднимать" в верхний регистр автоматически спасибо |
|
#2
|
|||
|
|||
|
нашел на цифири:
изменю на буквы, и, надеюсь, прокатит Код:
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char); begin if Key in ['0'..'9'] then key :=#0; end; остался только верхний регистр первого символа |
|
#3
|
||||
|
||||
|
Прокатит. В событие OnChange, используй AnsiUpperCase
|
|
#4
|
|||
|
|||
|
пробовал, спасибо
в общем варианте получилось так: Код:
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
|
|||
|
|||
|
работает безотказно
блин... сам спросил, сам ответил... ну может кто-то будет гуглить, найдет, понравится, останется |
|
#6
|
||||
|
||||
|
Так не про катило почему такой большой код если проблема решается так
Код:
if Key in ['A'..'z'] then key :=#0; |
|
#7
|
||||
|
||||
|
и на последок в верхний регистр первую букву можно поднимать так -
Код:
function strtotitle(text:string):string; begin Result:=AnsiLowerCase(text); Result[1]:=AnsiUpperCase(Result[1])[1]; end; ..... begin str:=strtotitle(str); end; самый простой способ по моему.... |
|
#8
|
|||
|
|||
|
я указал все буквы, согласен
тоже считаю, что такая подстраховка лишняя, спасибо |
|
#9
|
||||
|
||||
|
Цитата:
Код:
... Result:=AnsiUpperCase(text); ... |
|
#10
|
||||
|
||||
|
Неа таким образом ты увеличишь все буквы а нам нужен только первый
так что в моем случае - уменьшаем все буквы - потом увеличиваем первую... ![]() |
|
#11
|
||||
|
||||
|
Я предлагал увеличить только первую, так как подразумевалось из вопроса, что все остальные уже в нижнем регистре.
|
|
#12
|
||||
|
||||
|
пример в студию
- то что ты наверху написал - берет весь текст и увеличивает все буквы ...AnsiUpperCase же сама не догадывается какая буква первая надо указать первую букву... П.С. если хочешь открой и сам проверь в дельфи... |
|
#13
|
||||
|
||||
|
offtop:
Хватить флудить, я не глядя скопировал твою строку, а ты разошёлся. ТС доволен так что успокойся. |
|
#14
|
|||
|
|||
|
вы учитывайте, что нужно в реальном времени
тоесть во время ввода строки, нужно уловить первый символ и "Поднять" первую букву но я попробую все приведенные примеры |
|
#15
|
||||
|
||||
|
О чем вообще можно было тут так много говрить, алгоритм простой до безобразия.
Код:
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; |