А. Полищук - Программирование в X Window средствами Free Pascal

Тут можно читать онлайн А. Полищук - Программирование в X Window средствами Free Pascal - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование в X Window средствами Free Pascal
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.7/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

А. Полищук - Программирование в X Window средствами Free Pascal краткое содержание

Программирование в X Window средствами Free Pascal - описание и краткое содержание, автор А. Полищук, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Программирование в X Window средствами Free Pascal - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование в X Window средствами Free Pascal - читать книгу онлайн бесплатно, автор А. Полищук
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Поясним, что такое фокус ввода. Дело в том, что клавиатура у машины одна, и она разделяется всеми выполняющимися одновременно программами. Но в каждый момент времени поступающий от устройства сигнал доступен лишь одной из них, как правило, той, которой принадлежит активное окно. В этом случае говорят, что программа и ее окно имеют фокус ввода. Последний может переходить от окна к окну и от программы к программе.

Когда окно получает фокус, соответствующей программе посылается событие FocusIn, при потере - приходит событие FocusOut.

Когда пользователь нажимает клавишу клавиатуры, программа получает событие KeyPress. Сервер также может послать событие KeyRelease, когда клавиша отпускается, но это справедливо не для всех типов компьютеров.

Оба этих события сопровождаются структурой типа TXKeyEvent. Ее поле keycode содержит код нажатой клавиши, а поле state - состояние клавиш-модификаторов и кнопок мыши. Модификаторами называются такие клавиши, как Shift, Ctrl, Caps Lock. Кроме этого, X предусматривает наличие дополнительных модификаторов, которые обозначаются Mod1,…, Mod5. Каждой нажатой клавише-модификатору и кнопке мыши соответствует флаг в поле state.

Коды, передаваемые через поле keycode структуры TXKeyEvent, однозначно идентифицируют клавиши. Их конкретные значения зависят от типа машины и клавиатуры. Эти коды мы будем называть физическими. Чтобы обеспечить переносимость программ, сервер устанавливает соответствие между физическими кодами клавиш, которые могут меняться от компьютера к компьютеру, и целочисленными константами - логическими кодами (символами). Они имеют предопределенные значения, которые приведены в файле /usr/include/X11/keysymdef.h и начинаются с префикса "XK_". Так, букве "a" соответствует символ XK_a, клавише ‹Return› (‹Enter›) - символ XK_Return и т.д.

Для разных алфавитов X поддерживает разные множества логических кодов. Возможные типы алфавитов перечисляются в файле /usr/include/X11/keysym.h.

Одному коду клавиши может соответствовать несколько символов в зависимости от состояния клавиш-модификаторов. Функция

function XKeycodeToKeysym(prDisplay: PDisplay; nKeycode: TKeyCode; nIndex: longint): TKeySym; cdecl; external;

позволяет по коду nKeyCode получить соответствующий ему символ с номером nIndex. Если nIndex равен 0, то полученный символ соответствует просто нажатой клавише. Если nIndex равен 1, то возвращается символ, соответствующий ситуации, когда клавиша нажата одновременно с Shift.

Функция XKeysymToKeycode() осуществляет обратное преобразование.

Программа может получить карту соответствия кодов и символов, обратившись к процедуре XGetKeyboardMapping().

Изменяется соответствие физических и логических кодов процедурой XChangeKeyboardMapping(). Следующая последовательность операторов ставит клавише ‹F2› в соответствие символ XK_F3.

var

nF2Sym, nF3Sym: TKeysym;

nF2Keycode: TKeyCode;

prDisplay: PDisplay;

nF2Sym:= XStringToKeysym ('F2');

nF3Sym:= XStringToKeysym ('F3');

nF2Keycode:= XKeysymToKeycode (prDisplay, nF2Sym);

XChangeKeyboardMapping (prDisplay, nF2Keycode, 1, @nF3Sym, 1);

Здесь использована процедура XStringToKeysym(), которая по строке "str" возвращает соответствующий символ XK_str.

Когда соответствие кодов меняется, всем работающим в настоящее время клиентам посылается событие MappingNotify.

Клавиши-модификаторы также имеют логические коды. Клавишам Shift сопоставлены символы XK_Shift_L и XK_Shift_R; Caps Lock соответствует XK_CapsLock; Control - XK_Control_L; Mod1 - XK_Meta_L и XK_Meta_R. Символы остальных модификаторов (Mod2 - Mod5) не определены. X содержит набор специальных процедур, которые позволяют получить и установить соответствие код-символ для модификаторов. Эти функции следующие: XGetModifierMapping(), XInsertModifiermapEntry(), XDeleteModifiermapEntry(), XSetModifierMapping().

X не останавливается на задании соответствия код клавиши - символы, а идет дальше. Система позволяет программе сопоставить любой комбинации модификаторов и клавиш (например, ‹Shift+Ctrl+A›) ASCII строку (например, "EXIT"). Для некоторых клавиш соответствующие строки задаются сервером по умолчанию. Так, символу XK_A соответствует строка "A".

Макрос XRebindKeysym() берет символ, список модификаторов и сопоставляет им строку.

Процедура XLookupString(), наоборот, берет событие о нажатии (отпускании) клавиши и возвращает соответствующие ему символ и строку. Последний ее параметр - указатель на структуру типа XComposeStatus. Дело в том, что некоторые клавиатуры имеют специальную клавишу Compose, которая позволяет печатать символы, которым нет соответствия среди клавиш. Специальная таблица указывает, какой символ должен быть создан, если обычная клавиша нажимается одновременно с Compose. Ссылка на эту информацию и возвращается в структуре XComposeStatus.

Ниже приводится фрагмент программы, которая распознает функциональные клавиши ‹F1›-‹F5›, и при их нажатии печатает соответствующую строку. Программа также сопоставляет комбинации ‹Shift+Control+A› строку "EXIT". Эта комбинация используется для завершения программы.

var

prDisplay: PDisplay;

nScreenNum: integer;

prGC: TGC;

rEvent: TXEvent;

nWnd: TWindow;

sKeyStr: array [0…19] ofchar;

nKeySym: TKeySym;

naModList: array [0…1] ofTKeySym;

n: integer;

r: char;

const

XK_Control_L=$FFE3; (* Left control *)

XK_Shift_L=$FFE1; (* Left shift *)

XK_F1=$FFBE;

XK_F2=$FFBF;

XK_F3=$FFC0;

XK_F4=$FFC1;

XK_F5=$FFC2;

XK_F6=$FFC3;

(* Устанавливаем связь с сервером, получаем номер экрана… *)

(* Задаем соответствие символ-строка *)

naModList[0]:= XK_Control_L;

naModList[1]:= XK_Shift_L;

XRebindKeysym (prDisplay, XK_F6, naModList, 2, 'EXIT', strlen('EXIT'));

(* Цикл получения и обработки событий *)

while true do begin

XNextEvent (prDisplay, @rEvent);

case (rEvent.eventtype) of

KeyPress:

begin

(* Очищаем строку *)

for n:=0 to 19 do sKeyStr[n]:=#0;

(* Получаем строку, соответствующую событию *)

XLookupString (@rEvent.xkey, sKeyStr, 20, @nKeySym, NIL);

if (strcomp (sKeyStr, 'EXIT')=0) then

begin

XFreeGC (prDisplay, prGC);

XCloseDisplay (prDisplay);

halt (0);

end;

case nKeySym of

XK_F1: r:='1';

XK_F2: r:='2';

XK_F3: r:='3';

XK_F4: r:='4';

XK_F5: r:='5';

else r:='0';

end;

if (n<>0) then begin

sKeyStr[0]:='F';

sKeyStr[1]:=r;

sKeyStr[2]:=#0;

strcat(sKeyStr, ' pressed.');

XClearWindow (prDisplay, nWnd);

XDrawString (prDisplay, nWnd, prGC, 10, 50, sKeyStr, strlen (sKeyStr));

end;

end;

end;

end;

Сервер имеет ряд атрибутов, воздействующих на обработку сигналов клавиатуры. Получить их можно с помощью функции XGetKeyboardControl(). Она возвращает указанные параметры в переменной, имеющей тип TXKeyboardState, определенный следующим образом:

TXKeyboardControl = record

key_click_percent: longint;

bell_percent: longint;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


А. Полищук читать все книги автора по порядку

А. Полищук - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование в X Window средствами Free Pascal отзывы


Отзывы читателей о книге Программирование в X Window средствами Free Pascal, автор: А. Полищук. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x