Форум » [x]Harbour » кнопки Alt Ctrl Shift » Ответить

кнопки Alt Ctrl Shift

and3081: подскажите новичку. Пытаюсь перевести Clipper 5.01 на xHarbour. Нужно отслеживать при ожидании ввода, нажата ли Alt и т.п. Т.е. отдельно сами по себе, без других кнопок. В зависимости от этого на экране меняются подписи для кнопок ну и прочее. В clippere делал функцию на C, использовались bioskey() или вызовы INT16. В BCC5.5 ничего подходящего не нашел. Есть решение ?

Ответов - 11

Dima: как вариант посмотреть тему http://clipper.borda.ru/?1-4-0-00000339-000-0-0-1368860560 еще можно посмотреть в сторону HB_GTI_KBDSHIFTS HB_gtInfo()

Sergy: Работало В Clipper, продолжает работать в Harbour (про xHarbour не в курсе): [pre2]* --------------- * FUNC ShiftPressed() RETURN ISBIT(KBDSTAT(),1) .OR. ISBIT(KBDSTAT(),2) * -------------- * FUNC CtrlPressed() RETURN ISBIT(KBDSTAT(),3) * ------------- * FUNC AltPressed() RETURN ISBIT(KBDSTAT(),4) * ------------- * FUNC ScrollLock() RETURN ISBIT(KBDSTAT(),5) * ---------- * FUNC NumLock() RETURN ISBIT(KBDSTAT(),6) * ----------- * FUNC CapsLock() RETURN ISBIT(KBDSTAT(),7) * ------------ * [/pre2]

and3081: спасибо ! значит у меня guide кривой. Isbit в нем есть, а kbdstat нет.


and3081: странно, сделал тестовую prg в xHarbour 1.2.0 - в цикле индицирую состояние kbdstat(). Показывается только первоначальное значение, как было при запуске программы. А на нажатия не реагирует. Что не так ? proc qwe Do while .t. @ 1,20 say KBDSTAT() Enddo quit

Pasha: Этот тест в Harbour отрабатывает нормально. Если у вас еще нет багажа программ, написанных на xHarbour. то лучше сразу брать Harbour, а не xHarbour.

and3081: Ура ! На HB 3.0.0 заработало. Теперь бы разобраться, как установить 3.2.0

Sergy: Отсюда: https://github.com/harbour/core Harbour unstable binaries (updated once a day from live source repository) Windows (unified): можно взять скомпилированные бинарники и просто заменить полностью ими папку с Harbour 3.0.0

and3081: Все поставилось. Все-таки по первому впечатлению Harb дружественнее, чем xHarb. Сходу подсказал, какую lib прицепить, чтобы заработали Blinkerоские функции. Пару дней точно сэкономил, иначе по незнанке стал бы переписывать функцию вызова внешних приложений. Может на вскидку подскажет кто, фукнции в harbour (заменить старые С-шные): - ген.случ.чисел, и нужно ли его инициализировать (на С rand() и srand()) - установка и запрос текущего диска, желательно с числовым параметром (0- A: и т.д.) (на С getdisk и setdisk) - установка сист.даты (на С setdate) - установка формы курсора (на С INT 0x10) - чтение байта готовности старого LPT принтера

Sergy: Генератор случайных чисел - стандартный, "клипперовский" RAND(). Форма курсора - SETCURSOR() С системной датой лучше не баловаться - в случае наличия контроллера домена фокус не пройдет. Текущий диск/каталог DISKCHANGE() / DISKNAME() / SET DEFAULT TO ... По принтеру - в среде Windows уже много лет на разных машинах/принтерах, поддерживающих дос-печать, прекрасно работает простое копирование файла на LPT/PRN, страницы разделяются символом chr(12).

and3081: все оказалось проще, все эти функции и из bcc прицепились. Т.е.С-шные функции Clipper extend после небольшого шаманства прицепились. Прикол оказался в том, что имя функции в синтаксисе HB_FUNC( ИМЯ ) обязательно должно быть БОЛЬШИМИ буквами. Иначе линковщик ругается на ненайденую ссылку. Хотя вызов в клиппере идет маленькими. Полдня на этот косяк убил. А вот SETCURSOR- это не то. Он просто переключает тип курсора. А нужна настройка самого типа курсора. Иногда после вызова внешнего приложения портится вид курсора. Например, тонкое стандартное подчеркивание становится толще. И перебороть в клиппере это получалось только повторной настройкой курсора через bios-функцию, чтобы не перезапускать прогу. Вероятно, из-за смены режимов экрана. Может теперь это и не понадобится.

Sergy: Читайте доку по SETCURSOR: http://www.itlnet.net/programming/program/reference/c53g01c/ng9dd92.html и setcurs.ch: [pre2] Syntax SETCURSOR([<nCursorShape>]) --> nCurrentSetting Arguments <nCursorShape> is a number indicating the shape of the cursor. For simpler coding, the Setcurs.ch header file provides descriptive names for the various cursor shapes as shown in the table below: Cursor Shapes ------------------------------------------------------------------------ Shape Value Setcurs.ch ------------------------------------------------------------------------ None 0 SC_NONE Underline 1 SC_NORMAL Lower half block 2 SC_INSERT Full block 3 SC_SPECIAL1 Upper half block 4 SC_SPECIAL2 ------------------------------------------------------------------------ [/pre2] В clipper 5.2e + CT III эта функция действительно чудила. В некоторых местах я делал что-то типа SETCURSOR(1); INKEY(.1); SETCURSOR(1) В Clipper S'87 и Harbour работает норм - все навороты убрал.



полная версия страницы