Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2007, 10:40   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Перевод в верхний индекс первого символа

.Я использую следующий код для перехода в верхний индекс
Код:
  with Sender as TEdit do  
  if (Text = '') or (Text[SelStart] = ' ')    
  or (SelLength = Length(Text)) then        
if Key in ['а'..'я'] then         
 Key := UpCase(Key);
но для русского языка не работает хотя для английского все работает. Что я делаю не так?
.
Aleksandr вне форума Ответить с цитированием
Старый 23.07.2007, 10:43   #2
Romanus
Кодер
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 271
По умолчанию

Просто функции UpCase и UpperCase не работают с русскими буквами. Если хочешь чтобы они работали с русскими прийдется писать свою собственную функцию.
Romanus вне форума Ответить с цитированием
Старый 23.07.2007, 10:44   #3
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

UpCase по моему только под Инглиш заточен : (
Alex21 вне форума Ответить с цитированием
Старый 23.07.2007, 10:51   #4
2face
Пользователь
 
Регистрация: 23.05.2007
Сообщений: 24
По умолчанию

Для руского языка подходит ANSIUpperCase
2face вне форума Ответить с цитированием
Старый 23.07.2007, 13:13   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
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 TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   with Sender as TEdit do
      if (Text = '') or (Text[SelStart] = ' ')
         or (SelLength = Length(Text)) then
         if Key in ['а'..'я'] then
            Key := UpCaseRus(Key);
   if Key in ['a'..'z'] then
      Key := UpCase(Key);

end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 23.07.2007, 13:26   #6
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Спасибо я уже нашел эту функцию в DelphiWorld.
C уважением Aleksandr!
Aleksandr вне форума Ответить с цитированием
Старый 09.08.2007, 18:44   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Лампочка

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Код:
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 TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   with Sender as TEdit do
      if (Text = '') or (Text[SelStart] = ' ')
         or (SelLength = Length(Text)) then
         if Key in ['а'..'я'] then
            Key := UpCaseRus(Key);
   if Key in ['a'..'z'] then
      Key := UpCase(Key);
 
end;
А непроще ли будет такой код, замена UpCase.
И ОЧЕНЬ коротко:
Function UpAll(Keys :Char):Char;
begin
CASE Key Of
'a'..'z','а'..'я': Result:=Chr(Ord(Keys)-32);
END;
end;

Для UpperCase:
Загнать строку в цикл и заменит при помощи функции UpAll все буквы.

Последний раз редактировалось Alter; 09.08.2007 в 18:47.
Alter вне форума Ответить с цитированием
Старый 10.08.2007, 08:14   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Можно попроще:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var S:string;
begin
S:=Key;
Key:=AnsiUpperCase(S)[1];
end;
SERG1980 вне форума Ответить с цитированием
Старый 10.08.2007, 08:18   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

SERG1980 нет не то у тебя пишет все заглавные, а нужно было чтобы первая заглавная остальные прописные.
Aleksandr вне форума Ответить с цитированием
Старый 10.08.2007, 09:25   #10
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Здесь велосипед не нужен:
Код:
Key := AnsiUpperCase(Key)[1];
Это перевод символа из нижнего регистра в верхний (и для русских, и для английских), а условие, где тебе это надо, поставь сам.
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как мне в tListView выелить item зная индекс Altera Общие вопросы Delphi 2 15.05.2008 06:23
Даны числа от 100 до 999. Вводится индекс... Ci_novice Помощь студентам 4 19.04.2008 12:59
Перевод кода символа в символ таблицы ASCII nerh Общие вопросы C/C++ 3 01.02.2008 20:34
50 лет назад в СССР произведён запуск первого искусственного спутника Земли. Alex21 Свободное общение 2 07.10.2007 05:57