Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь: Смена раскладки клавиатуры 
:(
    Опции темы
0x00
Дата 15.10.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Нужно сделать, чтобы раскладка клавиатуры менялась не только левым SHIFT+CTRL, но и правым.
Тому кто поможет большое человеческое спасибо, вознаграждение на пиво.
В аську 5000870.

Код
uses crt;

var rusChars:array[1..102] of char;
    engChars:array[1..102] of char;
    rusLang:boolean;

function int2str(int:integer):string;
var sint:string;
begin
    str(int, sint);
    int2str:=sint;
end;

procedure initRusChars;
begin
    rusChars[16]:='©';
    rusChars[17]:='ж';
    rusChars[18]:='г';
    rusChars[19]:='Є';
    rusChars[20]:='Ґ';
    rusChars[21]:='­';
    rusChars[22]:='Ј';
    rusChars[23]:='и';
    rusChars[24]:='й';
    rusChars[25]:='§';
    rusChars[26]:='е';
    rusChars[27]:='к';

    rusChars[30]:='д';
    rusChars[31]:='л';
    rusChars[32]:='ў';
    rusChars[33]:=' ';
    rusChars[34]:='Ї';
    rusChars[35]:='а';
    rusChars[36]:='®';
    rusChars[37]:='«';
    rusChars[38]:='¤';
    rusChars[39]:='¦';
    rusChars[40]:='н';
    rusChars[41]:='с';

    rusChars[44]:='п';
    rusChars[45]:='з';
    rusChars[46]:='б';
    rusChars[47]:='¬';
    rusChars[48]:='Ё';
    rusChars[49]:='в';
    rusChars[50]:='м';
    rusChars[51]:='Ў';
    rusChars[52]:='о';
end;

procedure initEngChars;
begin
    engChars[16]:='q';
    engChars[17]:='w';
    engChars[18]:='e';
    engChars[19]:='r';
    engChars[20]:='t';
    engChars[21]:='y';
    engChars[22]:='u';
    engChars[23]:='i';
    engChars[24]:='o';
    engChars[25]:='p';

    engChars[30]:='a';
    engChars[31]:='s';
    engChars[32]:='d';
    engChars[33]:='f';
    engChars[34]:='g';
    engChars[35]:='h';
    engChars[36]:='j';
    engChars[37]:='k';
    engChars[38]:='l';

    engChars[44]:='z';
    engChars[45]:='x';
    engChars[46]:='c';
    engChars[47]:='v';
    engChars[48]:='b';
    engChars[49]:='n';
    engChars[50]:='m';
end;

procedure asmReadChar(var posChar,codeChar);assembler;
asm
    mov AH,00H
    int 16H
    push AX
    xor AH,AH
    les    DI,codeChar
    stosw

    pop AX
    mov AL,AH
    xor AH,AH
    les    DI,posChar
    stosw
end;

function _asmIsCharEnabled:integer;assembler;
asm
    mov AH,01H
    int 16H
    jz  @@1
    xor AH,AH
    mov AL,01H
    ret
@@1:xor AH,AH
    mov AL,00H
    ret

end;

function isCharEnabled:boolean;
var charEnabled:integer;
begin
    charEnabled:=_asmIsCharEnabled;
    {writeln('charEnabled = '+int2str(charEnabled));}
    isCharEnabled:=charEnabled<>0;
end;

function _asmIsCtrlShift:integer;assembler;
asm
    mov AH,02H
    int 16H
    and AL,6H
    cmp AL,6H
    jz  @@1
    mov AL,00H
    ret
@@1:mov AL,01H
    ret

end;

function isCtrlShift:boolean;
begin
    isCtrlShift:=_asmIsCtrlShift<>0;
end;

procedure _drawWindow(x1,y1,x2,y2,bgcolor,txtcolor:integer);
begin
    window(x1,y1,x2,y2);
    textBackGround(bgcolor);
    textColor(txtcolor);
    clrscr;
end;

procedure _drawLangWindow(rusLang:boolean);
begin
    _drawWindow(75,1,80,1,red,black);
    if rusLang then
     write('rus')
    else
     write('eng');
end;

procedure _drawMainWindow;
begin
    _drawWindow(1,1,59,25,black,lightgray);
end;

procedure _drawAllWindows(rusLang:boolean);
begin
    textBackGround(black);
    clrscr;
    _drawLangWindow(rusLang);
    _drawMainWindow;
end;


procedure writeChar(codeChar, posChar:integer);
var currentChar:char;
begin
    if rusLang then
     currentChar:=rusChars[posChar]
    else
     currentChar:=engChars[posChar];
    if currentChar<>#0 then
    begin
        write(int2str(codeChar)+' - '+int2str(posChar)+' = ');
        write('"');
        write(currentChar);
        writeln('"');
    end;
end;


const Esc=27;
var codeChar, posChar:integer;

begin
    initRusChars;
    initEngChars;
    rusLang:=false;
    _drawAllWindows(rusLang);
    repeat
        repeat
         if isCtrlShift then
                begin
                 rusLang:= not rusLang;
                    _drawAllWindows(rusLang);
                    repeat
                    until not isCtrlShift;
                end;
        until isCharEnabled;

        asmReadChar(posChar, codeChar);

        writeChar(codeChar, posChar);
    until codeChar=Esc;
end.

PM MAIL   Вверх
Goodwin98
Дата 15.10.2009, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 1.7.2009
Где: Deeptown

Репутация: 1
Всего: 5



Код

    mov ah,02
    int 16h
    mov ah,al
    and al,6
    cmp AL,6H
    jz  @@1
    and ah,5
    cmp ah,5
    jz @@1
    xor AX,AX
    ret
@@1:mov AX,01H
    ret


Это сообщение отредактировал(а) Goodwin98 - 15.10.2009, 01:15
PM MAIL ICQ   Вверх
0x00
Дата 15.10.2009, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Спасибо, тему можно считать закрытой.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.