Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Delphi - массивы


Автор: dForm 30.11.2009, 18:23
Доброе время суток! Просьба помочь с созданием функции смены языка в текстовом редакторе(Через меню). Я начал с того что создал два массива содержащие англ. и рус. буквы,а вот что и как дальше не понимаю. Помогите пожалуйста разобраться

Автор: morpheyushka 30.11.2009, 18:30
Проверяем какой язык установлен и меняем. Устанавливаем русский:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  ActivateKeyboardLayout(LoadKeyboardLayout('00000419', 0), 0);
end;


Устанавливаем английский:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  ActivateKeyboardLayout(LoadKeyboardLayout('00000409', 0), 0);
end;

Автор: dForm 30.11.2009, 18:37
Еслибы было все так простоsmile Нужно через массив(

Автор: morpheyushka 1.12.2009, 12:14
Цитата(dForm @  30.11.2009,  18:37 Найти цитируемый пост)
Еслибы было все так просто

А что тут сложного...считывай OnKeyPres код нажатой клавиши...и по алгоритму (там последовательность символов) выдавай нужную из своего массива...немного посидеть и все будет работать

Автор: Hexel 2.12.2009, 11:29
например

Код


type
  TCharMap = array[Char] of Char; // :) это будет таблица замены символов

var
  CharMap: TCharMap;

function GetCharMap(): TCharMap ;
var
  cs: TCharMap 
  i, delta: Integer;

begin
  // заполнить таблицу
  for i := 0 to 255 do
    cs[Chr(i)] := Chr(i);
  // теперь заменим например английскую раскладку на русскую
  // ее лучше загружать из файла, но думаю ты это и так сделаешь, пока что идея
  delta := Ord('А') - Ord('A'); // первое A - здесь обязательно русское, а второе англ!!
  for i := Ord('A') to Ord('Z') do // а здесь А - англ. заменяем заглавные англ буквы
    cs[Chr(i)] := Chr(i + delta);
  //  и так же само для прописных буков
  delta := Ord('а') - Ord('a'); // опять же первое а русское, второе англ
  for i := Ord('a') to Ord('z') do
    cs[Chr(i)] := Chr(i + delta);
  Reult := cs;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CharMap := GetCharMap;

end;

// обработка ввода символа некоего  TControl
//
// не знаю, чем ты это будешь реализовывать, да и нечего посоветовать, но схематично
//
// предполагаем, что вводимый символ попадает в процедуру обработки CharInput,
// где по нашему желанию может быть подменен другим
//
procedure TControlOnCharInput(var CurrChar: Char);
begin
  CurrChar := CharMap[CurrChar]; // здесь вся фича трансляции (замены) символов

end;

end.


насчет процедуры перехвата символов и самой таблицы это конечно же можно назвать бредом, но главное что я хочу сказать
Код

  CurrChar := CharMap[CurrChar]

Автор: amsoft 2.12.2009, 13:15
Hexel, зачем "велосипед"?
есть же таблица кодов, в которой 
A..Z = 65..90
a..z = 97..112
А..Я = 192..223
а..я = 224..255

Исходя из этого:

перевод Англ > Рус
Код

CurrChar := Chr(Ord(CurrChar) + 127);


перевод Рус > Англ
Код

CurrChar := Chr(Ord(CurrChar) - 127);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)