On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 16.12.07
ссылка на сообщение  Отправлено: 16.12.07 15:46. Заголовок: Нужна помощь - вывести на консольиндикатор расскладки калавиатуры


Есть ли возможность (пример программы) вывести индикатор какая течущая расскладка клавиатуры.
Роботаю в Harbour

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 44 , стр: 1 2 3 All [только новые]


постоянный участник


Пост N: 326
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.07 17:58. Заголовок: Просто Вася пишет: ..


Просто Вася пишет:

 цитата:
Есть ли возможность (пример программы) вывести индикатор какая течущая расскладка клавиатуры.


Есть возможность используя Win API узнать какая раскладка клавиатуры активна, а как вывести индикатор - это дело техники и вкуса
Можно использовать, как образец, пример Григория Филатова LangIndicator из поставки MiniGUI Ex.

Фрагменты кода взяти именно оттуда:

Local nNewMode := GetKeyboardMode()

if nNewMode != nOldMode

nOldMode := nNewMode

DO CASE
CASE nNewMode == 1049 // Russian

CASE nNewMode == 1033 // English

CASE nNewMode == 1058 // Ukrainian

CASE nNewMode == 1031 // German

CASE nNewMode == 1034 // Spanish

CASE nNewMode == 1036 // French

CASE nNewMode == 1045 // Polish

OTHERWISE

ENDCASE


Т.е. с помощью GetKeyboardMode() получаем текущий режим клавиатуры для foreground окна ( окна с которым работает пользователь) и решаем что с этим делать.
А вот и реализация функции GetKeyboardMode()

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"


HB_FUNC( GETKEYBOARDMODE )
{
HKL kbl;
HWND CurApp;
DWORD idthd;
int newmode;

CurApp=GetForegroundWindow();
idthd=GetWindowThreadProcessId(CurApp,NULL);
kbl=GetKeyboardLayout(idthd);
newmode=(int)LOWORD(kbl);
hb_retnl(newmode);
}

#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 16.12.07
ссылка на сообщение  Отправлено: 17.12.07 21:29. Заголовок: Пётр, большое спасиб..


Пётр, большое спасибо за подсказку, но я только начал переход с Сlipper на Harbour
Все свои программы (наработки) котрые накопились с 1990 года ставлю на win платформу.
Большое спасибо (даже огромное) кто поддерживает этот проект. Я только разобрался как исходные тексты сlippera (Sum87) откампелировать под Harbour + Borland C.
Уже разобрался с печатью. Только у меня дальше досовское консольное окно. То что ты написал выше для меня сложно понять. Куда и как всё это лепить. Я не пользуюсь MiniGUI. У меня Harbour beta build 0.99-3 intl
версия. Прошу не смеятся, на clipper пишу довольно давно 17 лет, до этого времени написано много задач по управлению базами даных. Если тебя не затруднит мучится с таким нюбом по Harbour как я,(тяжёлое досовское наследие) расскажи поледовательно как и куда чё впихивать. Заранее благодарен. С наступающими тебя праздниками.
С уважение Игорь.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 378
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.12.07 22:02. Заголовок: Просто Вася пишет: ..


Просто Вася пишет:

 цитата:
Все свои программы (наработки) котрые накопились с 1990 года ставлю на win платформу.



Советую переходить на xHarbour, т.к. он более совместим с Clipper'om

Как перенести проект под xXarbour смотри
http://www.clipper.fastbb.ru/?1-4-165-00000089-000-0-0-1160258031

И вообще прочитай что тут написано и сразу легче станет

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 327
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 18.12.07 03:40. Заголовок: Просто Вася пишет: ..


Просто Вася пишет:

 цитата:
Куда и как всё это лепить.


Всё это надо просто запихнуть в один файл, например keyblayout.prg и откомпилировать

/* keyblayout.prg */
PROCEDURE main()
LOCAL nMode := GetKeyboardMode()
LOCAL cLang

SWITCH nMode
CASE 1049
cLang := "RU"
EXIT

CASE 1033
cLang := "EN"
EXIT

CASE 1058
cLang := "UA"
EXIT

OTHERWISE
cLang := "??"
END SWITCH

? "Текущая раскладка: ", cLang

RETURN

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( GETKEYBOARDMODE )
{
HKL kbl;
HWND CurApp;
DWORD idthd;
int newmode;

CurApp=GetForegroundWindow();
idthd=GetWindowThreadProcessId(CurApp,NULL);
kbl=GetKeyboardLayout(idthd);
newmode=(int)LOWORD(kbl);
hb_retnl(newmode);
}

#pragma ENDDUMP

/* end-of-file */

Чуть позже появится понимание, как это работает
Если коротко и без деталей - то Harbour транслирует свой код в соответствующий C код и записывает его в *.с файл (keyblayout.с), который потом обрабатывается (компилируется, линкуется) используемым С-компилятором ( в данном случае bcc32 ).
Код, который находится в prg файле между директивами
#pragma BEGINDUMP
..
#pragma ENDDUMP
функция написанная на языке С - не транслируется, а просто переносится без изменений в результирующий С файл.



 цитата:
Я не пользуюсь MiniGUI


В данном случае не имеет значения используется GUI или консоль.
Но я рекомендую скачать MiniGUI Ex. (ссылку для скачивания можно найти на этом форуме), во-первых в составе Minigui можно найти Harbour Devel build 1.1-1, во-вторых много интересных и полезных примеров, исходников с использованием Win API, которые можно использовать и для GUI или для консоли.

Что касается выбора Harbour или xHarbour, то лично я остановился на Harbour и ничуть не жалею.
Для меня совместимость с Clipper'om стоит не на первом месте, но единственное преимущество xHb в совместимости - это чуть лучшая реализация TBrowse, а если взять к примеру поддержку оконной системы из CT - xHarbour отдыхает.

Просто Вася пишет:

 цитата:
С наступающими тебя праздниками.


Спасибо ! Взаимно !



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 16.12.07
ссылка на сообщение  Отправлено: 19.12.07 20:57. Заголовок: Впихнул значит я энт..


Впихнул значит я энтот код, что ты написал, в свою програму. Вызов этого модуля прописал в модуль опроса клавиатуры. Показал где на экране высвечивать cLang. Откампилирова, пролинковал, загрузил свою прогу. Увидел на екране "EN" но никакой реакции на смену расскладок. В виндовзе расскладка меняется на консоле стоит "EN".
Не знаю что делать, а как мало для счастья человека, чтоб значок расскладки на экране менялся. Видать что-то не работает в функции GETKEYBOARDMODE.
Пётр - помоги если можешь, проверь правильность работы модуля.
Если верхняя часть мне понятна то то, что между
#pragma BEGINDUMP
..
#pragma ENDDUMP
тёмный лес.
ПАМАГИТЕ Л Ю Д И................

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 328
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 19.12.07 23:03. Заголовок: Не хочу повторяться,..


Не хочу повторяться, но я писал:
"Есть возможность используя Win API узнать какая раскладка клавиатуры активна, а как вывести индикатор - это дело техники и вкуса".

Как ты себе представляешь мою помощь?
GETKEYBOARDMODE работает правильно, но она всего лишь узнает какая раскладка клавиатуры активна в момент вызова функции.
Как отслеживать состояние клавиатуры с помощью этой функции - использовать цикл, таймер, background task или MT в xHarbour - это дело техники. Как и куда выводить - дело вкуса.
Мой совет - делай то, что умеешь и так, как умеешь.
И скачай таки MiniGUI. Там найдешь функции (клас) для работы с таймером.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 20.12.07
ссылка на сообщение  Отправлено: 20.12.07 09:43. Заголовок: Для проверки я сдела..


Для проверки я сделал маленький модуль по циклу. Может я чегото не понимаю, но индикатор расскладки не меняется.

PROCEDURE MAIN()
i=0
DO WHILE .T.
DO keyblayout
IF i=27 && Выход из цикла
EXIT
ENDIF
i=INKEY()
ENDDO
RETURN

PROCEDURE keyblayout()
LOCAL nMode := GETKEYBOARDMODE()
LOCAL cLang

SWITCH nMode
CASE 1049
cLang := "RU"
EXIT

CASE 1033
cLang := "EN"
EXIT

CASE 1058
cLang := "UA"
EXIT

OTHERWISE
cLang := "??"
END SWITCH

? "Текущая раскладка: ", cLang

RETURN
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( GETKEYBOARDMODE )
{
HKL kbl;
HWND CurApp;
DWORD idthd;
int newmode;

CurApp=GetForegroundWindow();
idthd=GetWindowThreadProcessId(CurApp,NULL);
kbl=GetKeyboardLayout(idthd);
newmode=(int)LOWORD(kbl);
hb_retnl(newmode);
}

#pragma ENDDUMP

*...............................

может я чего-то не дописал, функция работает постоянно в цикле, но реакции на смену расскладки нет. Ещё интересно что я заметил, иногда на старте высвечивается расскладка "EN" иногда "RU".

Пробовал функцию HB_FUNC( GETKEYBOARDLAYOUTNAME )
{
char sBuff[KL_NAMELENGTH];
GetKeyboardLayoutName( (LPTSTR)sBuff );
hb_retc(sBuff);
}


тоже не покатило..



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 331
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 20.12.07 23:18. Заголовок: Да все правильно - т..


Да все правильно - т.е. ничего не правильно

К сожалению с консолью этот код не работает, хотя в GUI все Ок.
Если для тебя так важно вывести этот индикатор в консоли то надо поступать по другому.

К примеру так


#define KL_PREV 0
#define KL_NEXT 1

PROCEDURE main()
LOCAL i := 0
LOCAL sVar := space(20)
CLEAR SCREEN

DO WHILE .T.
keyblayout( i := INKEY() )

IF i == 27 && Выход из цикла
EXIT
ENDIF

ENDDO

RETURN

PROCEDURE keyblayout( key )
STATIC nLayout := 0
LOCAL cLang

IF key == -1 //F2
nLayout := ActivateKeyboardLayout(KL_NEXT)
ELSEIF key == -2 //F3
nLayout := ActivateKeyboardLayout(KL_PREV)
ENDIF

nLayout := ActivateKeyboardLayout(KL_NEXT)
ActivateKeyboardLayout(KL_PREV)

SWITCH nLayout
CASE 1049
cLang := "RU"
EXIT

CASE 1033
cLang := "EN"
EXIT

CASE 1058
cLang := "UA"
EXIT

OTHERWISE
cLang := "??"
END SWITCH

? "Текущая раскладка: ", cLang

RETURN

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( ACTIVATEKEYBOARDLAYOUT )
{
HKL kbl;

kbl = ActivateKeyboardLayout( (HKL) hb_parni(1), 0 );

hb_retni(LOWORD(kbl));
}

#pragma ENDDUMP

Сразу предупреждаю, что код не совсем рабочий - просто для примера и ActivateKeyboardLayout() надо переписать по другому, это я так, на скорую руку набросал.
Сегодня уже думать не хочется




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 42
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 11.02.08 20:53. Заголовок: Да, в консоли GETKEY..


Да, в консоли GETKEYBOARDMODE выдает только 1033. Нет какого-нибудь способа в консоли посмотреть раскладку?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 47
Зарегистрирован: 27.04.06
ссылка на сообщение  Отправлено: 11.02.08 22:37. Заголовок: Proc Main() ? "..


Proc Main()
? "GetConsoleCP = ", GetConsoleCP()
? "GetConsoleOutputCP = ", GetConsoleOutputCP()
Return


#pragma BEGINDUMP

#include <windows.h>


HB_FUNC( GETCONSOLECP )
{
hb_retnl( GetConsoleCP() );
}


HB_FUNC( GETCONSOLEOUTPUTCP )
{
hb_retnl( GetConsoleOutputCP() );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 10.02.08
ссылка на сообщение  Отправлено: 11.02.08 23:07. Заголовок: Andrey пишет: Совет..


Andrey пишет:

 цитата:
Советую переходить на xHarbour, т.к. он более совместим с Clipper'om

Как перенести проект под xXarbour смотри
http://www.clipper.fastbb.ru/?1-4-165-00000089-000-0-0-1160258031

И вообще прочитай что тут написано и сразу легче станет



Andrey, ссылка нерабочая. А очень хочется почитать, что там было написано, чтобы сразу стало легче.
Я ведь тоже, как Игорь, только-только перехожу на xHarbour.
Можно ли восстановить эту ссылку?
Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 43
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.02.08 00:06. Заголовок: saulius пишет: ? &#..


saulius пишет:

 цитата:
? "GetConsoleCP = ", GetConsoleCP()
? "GetConsoleOutputCP = ", GetConsoleOutputCP()



Всегда выдается:
866
866

Могу предположить, что это кодовая страница.
Мне нужно знать какой язык у меня включен в настоящее время: русский или английский.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.02.08 00:53. Заголовок: Getlangstate(). Если..


Getlangstate(). Если возвращает 0 - русский

Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 478
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.08 04:27. Заголовок: TakOj пишет: Andrey..


TakOj пишет:

 цитата:
Andrey, ссылка нерабочая. А очень хочется почитать, что там было написано, чтобы сразу стало легче.
Я ведь тоже, как Игорь, только-только перехожу на xHarbour.
Можно ли восстановить эту ссылку?



Я в осадке ..... Это что форум урезали, и давно это происходит ?????
Я даже не знаю как восстановить ссылку, это к модераторам.
Но я тоже надеялся, что с форума ничего не пропадает, а зря....

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 44
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.02.08 05:54. Заголовок: fil пишет: Getlangs..


fil пишет:

 цитата:
Getlangstate(). Если возвращает 0 - русский



А где эту функцию взять? Не нашел такую.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 832
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.02.08 12:21. Заголовок: Andrey пишет: Я в о..


Andrey пишет:

 цитата:
Я в осадке ..... Это что форум урезали


я ни чего не трогал и не удалял , возможно перенес , но не тёр 100 пудово.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 10.02.08
ссылка на сообщение  Отправлено: 12.02.08 12:45. Заголовок: Dima Dima! А это в..


Dima

Dima! А это ваш сайт "http://spravki.net.ru/clipper/"? Если да, то вопрос по ссылке на
"Программа просмотра NG под Windows". Там что то совсем другое.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.02.08 14:43. Заголовок: rvu А где эту функц..


rvu

 цитата:
А где эту функцию взять? Не нашел такую.



давай адрес



Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 68
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 12.02.08 14:49. Заголовок: fil пишет: давай ад..


fil пишет:

 цитата:
давай адрес



Если не трудно: mail.trash(AT)mail.ru

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 45
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.02.08 14:55. Заголовок: rvu@ru.ru Только в ..


rvu@ru.ru

Только в теме письма что-нибудь напиши, а то на эту почту столько спама валится

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 44 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 77
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет