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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.08.2014, 20:41   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию На Английский клавиатуре что писал на Русском

Здравствуйте ребята . Хочу реализовать в программу такой принцип работы.
Если клавиатура переключен на "Английский язык" то в Edit1 или Memo1 все равно писал на "Русском языке"
Начинаю это задачу решать так

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   case key of
    'a': Key:= 'Ф';
    'A': Key:= 'ф';
    'b': Key:= 'и';
    'B': Key:= 'И';
    'c': Key:= 'с';
    'C': Key:= 'С';
    'd': Key:= 'в';
    'D': Key:= 'В';
    ..................
    ..................
    ..................
   end;
end;

end.
Это метод работает да ... Но, Я не хочу это код копировать на все форме и на все Edit из события OnKeyPress !
Хочу объявит процедур разделе public { Public declarations } и потом где это будет нужно что я мог вызвать . Но не получается ! Почему то это код работает только из OnKeyPress...

Начинаю объявит
Код:
  public
     procedure KeyRuss;  // Наживаю Ctrl+Shift+C
В шаблоне вставляю это код !
Код:
procedure TForm1.KeyRuss;
begin
   case key of
    'a': Key:= 'Ф';
    'A': Key:= 'ф';
    'b': Key:= 'и';
    'B': Key:= 'И';
    'c': Key:= 'с';
    'C': Key:= 'С';
    'd': Key:= 'в';
    'D': Key:= 'В';
   end;
end;
Но проект не компилируется ...
Вопрос: Как это задача решать нормально что не было продублированы код на все Edit
xxbesoxx вне форума
Старый 24.08.2014, 21:02   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

И что за key у вас внутри процедуры? Надо же его передать туда:
Код:
procedure TForm1.KeyRuss(var Key: Char);
Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Как это задача решать нормально что не было продублированы код на все Edit
Прописать для всех Edit'ов обработчик события Edit1KeyPress.
Arigato вне форума
Старый 24.08.2014, 21:17   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Если прописать то да РАБОТАЕТ . Но, Я не хочу это код продублировать на все форму и на все Edit .... Хочу создать ПОДПРОГРАММА и где его нужно, потом вызвать ! ВОПРОС В ТОМ ЧТО ! КАК ЭТО РЕАЛИЗОВАТЬ

Delphi это не HTML что дублировать одно и тот же теги .... Это же ООП " Объектно-ориентированное программирование"

Последний раз редактировалось Stilet; 24.08.2014 в 21:42.
xxbesoxx вне форума
Старый 24.08.2014, 21:23   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Delphi это не HTML что дублировать одно и тот же теги .... Это же ООП " Объектно-ориентированное программирование"
вам и говорят назначить один и тот же обработчик везде.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 24.08.2014, 21:28   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Пепел Феникса Я прошу прошения . МОЖНО МАЛЕНЬКИЙ ПРИМЕР НАБРОСАТЬ ДЛЯ ИЛЛЮСТРАЦИЮ ?
xxbesoxx вне форума
Старый 24.08.2014, 21:28   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ТС - все проще. Когда MEMO получает фокус, ставите русский. Когда фокус теряется, ставите предыдущий язык.

На OnMouseEnter запоминаете предыдущий язык с пом. GetKeyboardLayout,
Устанавливаете свой с пом. ниже написанной функции(код с инетов, не проверял)
Цитата:
procedure SetKeyboardLayout(const primary LangID, subLangID: Word);
var
layout: array[0.. KL_NAMELENGTH] of char;
d: word;
s: string;
begin
d:= (subLangID shl 10) or primaryLangID or (Longint(0) shl 16);
s:= IntToHex(d,8);
//Вызов функции Windows API для смены языка
LoadKeyboardLayout(StrCopy(Layout,P Char (s)),KLF_ACTIVATE);
end;
К Примеру:
Код:
SetKeyboardLayout(LANG_RUSSIAN,SUBLANG_DEFAULT)
В OnMouseLeave ставите ранее упомянутую кодировку. Все.
Человек_Борща вне форума
Старый 24.08.2014, 23:40   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Человек_Борща Это стадия написано да .... мне его не нравится ... Мне не надо переключить языка Мне надо тот метод который
Код:
#1
или вот это
Код:
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
Const
   Lat = '~@#$^&QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?`qwertyuiop[]asdfghjkl;''\zxcvbnm,./';
   Cyr = 'Ё"№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,ёйцукенгшщзхъфывапролджэ\ячсмитьбю.';
var
  i: Integer;
begin
   for i := 1 to Length(Lat)
   do if Key=Lat[i] then Key := Cyr[i];
end;


end.
МНЕ НАДО ЭТО КОД РЕАЛИЗОВАТЬ В ПОДПРОГРАММУ И ВЫЗВАТЬ ЕГО ГДЕ МНЕ НУЖНО ... А так спасибо за ваши предложение ! Но мне не надо не какой переключить языка
xxbesoxx вне форума
Старый 24.08.2014, 23:42   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Да он у вас и так в подпрограмме уже, вызывайте, где хотите.
Arigato вне форума
Старый 24.08.2014, 23:43   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Мой Вопрос и Просьба Если можно как описать это код процедуру ? Что потом я вызвал его ГДЕ МНЕ НУЖНО

Цитата:
Сообщение от Arigato Посмотреть сообщение
Да он у вас и так в подпрограмме уже, вызывайте, где хотите.
Arigato Повторяю........ мне надо это код объявить разделе
Код:
  public
    { Public declarations }
Понимайте ? И потом вызвать из любой форму ГДЕ МНЕ ЕГО НУЖНО ...

Последний раз редактировалось Stilet; 25.08.2014 в 18:48.
xxbesoxx вне форума
Старый 25.08.2014, 00:00   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Так это все и сейчас будет работать.
Arigato вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как я писал игру на android 4everAlone Фриланс 19 20.05.2013 11:24
Писал программу на паскале не могу сделать в дельфи. XYLIGANXYL Помощь студентам 0 25.01.2011 22:38
Народ зацените задачу!!! неделю писал. Mclaren Паскаль, Turbo Pascal, PascalABC.NET 9 08.06.2009 23:12