Code: |
//Дополнительные Переменные и функции
Const KZ_KBRD = $043f043f;//Дескриптор Казахской раскладки //В системе
//Функция Определяющая какой регистр использовать //Данные обрабатываются в соответствии //С состояниями клавиш от клавиатуры Function IsLow:Boolean; var SHF,CPS_L : Boolean; begin REsult:=false; SHF:= HiWord(GetAsyncKeyState(VK_SHIFT))>0; //Зажат ли ШИФТ CPS_L:= 0 <> (GetKeyState(VK_CAPITAL) and $01); //Состояние CAPS_LOCK if (SHF and CPS_L) then Result:=true; //пропись если ЗАЖАТЫ ОБЕ КЛАВИШИ if (not SHF and not CPS_L) then Result :=true; //Или наоборт end;
//Функция конвертирующая КЛАВИШУ в СИМВОЛ Function KeyToKZChar(Key:Integer;lowKey:boolean):Char; Begin result:=#0; {Мальнькие } {Большие} case key of {Символы} {Символы} 50: if LowKey then result:=chr(184) else Result:= chr(176); 51: if lowkey then result:=chr(105) else Result:= chr(73); 52: if lowkey then result:=chr(187) else Result:= Chr(179); 53: if lowkey then Result:=chr(185) else Result:= Chr(177); 54: if lowkey then result:=chr(190) else Result:= Chr(182); 55: if lowkey then result:=chr(189) else Result:= Chr(181); 48: if lowkey then result:=chr(186) else Result:= Chr(178); 189:if lowkey then result:=chr(188) else Result:= Chr(180); 187:if lowkey then result:=chr(191) else Result:= Chr(183); end; end;
{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
var LastKey :integer; //Для хранения Последней клавиши LowKey :Boolean = true; //Верхний или нижний регистр.
//Проверяем как прога пишет на Казахском языке
//Вылавливаем клавишу для дальнейшей обработки procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin LastKey := Key; LowKey:=IsLow; //Сразу (на месте) определяем и сохраняем регистр. end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); Var tmpKey :char; begin if GetKeyboardLayout(0)=KZ_KBRD then //Если казахская раскладка то.. Begin tmpKey:=KeyToKZChar(LastKey,LowKey);// Получаем нужный символ if not(tmpKey = #0) then //Если не стандартный символ то... Begin Key:=tmpKey; // Указываем окну наш символ exit; end; end; end;
//Дальше тоже самое только для компонента TMEMO
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin LastKey:=key; LowKey:=IsLow; end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); var tmpKey : char; begin if GetKeyboardLayout(0)=KZ_KBRD then Begin tmpKey:=KeyToKZChar(LastKey,LowKey); if not(tmpKey = #0) then Begin Key:=tmpKey; exit; end; end; end;
//Можем сохранить наше творение в файл. procedure TForm1.Button4Click(Sender: TObject); begin Memo1.Lines.SaveToFile('A.txt'); end;
//Или же наоборот загрузить из файла. procedure TForm1.Button5Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('A.txt'); end;
//Проба вывода на канвас разными методами. procedure TForm1.Button3Click(Sender: TObject); begin pb.Canvas.Font.Name:='Times/Kazakh'; pb.Canvas.Font.Color:=clRed; pb.Canvas.Font.Size:=14; pb.Canvas.TextOut(10,10,Edit1.Text); TextOut(PB.Canvas.Handle,30,30,Pchar(Edit1.Text),10); end;
//Текст На компоненты Edit3.Text:=Memo1.Text; Button2.Caption:=Edit3.Text; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!