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



Пост N: 1
Зарегистрирован: 11.12.11
ссылка на сообщение  Отправлено: 11.12.11 11:09. Заголовок: Программная смена языка ввода (раскладки)


Надо сделать чтобы на момент активации окошка для программы была активна украинская раскладка
искал по форуму - нашол несколько тем по переключеню раскладки, но всё под консоль
единственная в тему - http://clipper.borda.ru/?1-20-0-00000503-000-0-0-1137493600
но там готового решения нет
смотрел
HKL hRus = LoadKeyboardLayout('00000419', 0);
SetActiveKeyboardLayout(hRus);
но MiniGUI что такое SetActiveKeyboardLayout понятия не имеет :(


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]





Пост N: 109
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 11.12.11 11:48. Заголовок: http://clipper.borda..

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



Пост N: 59
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 12.12.11 04:27. Заголовок: На русскую я переклю..


На русскую я переключаюсь вот таким образом, думаю переделать на украинскую не составит труда

...
IF !(smenkl()=='00000419')
smenkl("RUS")
ENDIF
...



HB_FUNC(SMENKL)
{
TCHAR m_PreviousLayout[KL_NAMELENGTH] ;
LPSTR szMsg = "";

GetKeyboardLayoutName(m_PreviousLayout);

if( hb_pcount() )
{
szMsg = hb_parc( 1 );
if ((*(szMsg) == 'R') && (*(m_PreviousLayout+7)!='1' ))
{
LoadKeyboardLayout("00000419", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'E') && (*(m_PreviousLayout+7)!='0'))
{
LoadKeyboardLayout("00000409", KLF_ACTIVATE) ;
}
}
hb_retc(m_PreviousLayout);
}
#pragma ENDDUMP


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



Пост N: 2
Зарегистрирован: 11.12.11
ссылка на сообщение  Отправлено: 12.12.11 22:45. Заголовок: вот такой блок кода ..


вот такой блок кода язык переключает, но не нахожу такой файлик ClipApi.h
#PRAGMA BEGINDUMP
#include "Windows.h"
HB_FUNC(SMENKL)
{
TCHAR m_PreviousLayout[KL_NAMELENGTH] ;
LPSTR szMsg = "";

GetKeyboardLayoutName(m_PreviousLayout);

if( hb_pcount() )
{
szMsg = hb_parc( 1 );
if ((*(szMsg) == 'R') && (*(m_PreviousLayout+7)!='1' ))
{
LoadKeyboardLayout("00000419", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'E') && (*(m_PreviousLayout+7)!='0'))
{
LoadKeyboardLayout("00000409", KLF_ACTIVATE) ;
}
}
hb_retc(m_PreviousLayout);
}
#pragma ENDDUMP

и при линковке валятся предупреждения

Warning W8065 main.prg 10: Call to function 'hb_pcount' with no prototype in function HB_FUN_SMENKL
Warning W8065 main.prg 12: Call to function 'hb_parc' with no prototype in function HB_FUN_SMENKL
Warning W8069 main.prg 12: Nonportable pointer conversion in function HB_FUN_SMENKL
Warning W8065 main.prg 22: Call to function 'hb_retc' with no prototype in function HB_FUN_SMENKL
Warning W8004 main.prg 6: 'szMsg' is assigned a value that is never used in function HB_FUN_SMENKL

работаю с MiniGUI + ликновка BCC55

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




Пост N: 2203
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.12.11 22:52. Заголовок: rolt пишет: но не н..


rolt пишет:

 цитата:
но не нахожу такой файлик ClipApi.h



Вместо

#include "clipapi.h"

надо использовать

#include "hbapi.h"


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



Пост N: 3
Зарегистрирован: 11.12.11
ссылка на сообщение  Отправлено: 12.12.11 23:11. Заголовок: модифицировал под се..


модифицировал под себя:

#PRAGMA BEGINDUMP
#include "Windows.h"
HB_FUNC(UKR) { LoadKeyboardLayout("00020422", KLF_ACTIVATE) ; }
HB_FUNC(RUS) { LoadKeyboardLayout("00000419", KLF_ACTIVATE) ; }
HB_FUNC(ENG) { LoadKeyboardLayout("00000409", KLF_ACTIVATE) ; }
HB_FUNC(RASKLADKA) {
TCHAR m_PreviousLayout[KL_NAMELENGTH] ;
GetKeyboardLayoutName(m_PreviousLayout);
hb_retc(m_PreviousLayout);
}
#pragma ENDDUMP

Переключаю теперь функциями rus() ukr() eng()
В принципе можно было обойтись одной и ей в качестве аргумента передавать код раскладки, но так визуально понятнее.
Для случая когда непонятно как звучит код нужной мне раскладки - замечательно идёт RASKLADKA()
и без проблем при линковке :)

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



Пост N: 4
Зарегистрирован: 11.12.11
ссылка на сообщение  Отправлено: 12.12.11 23:18. Заголовок: с hbapi.h количество..


с hbapi.h количество предупреждений сократилось до двух, но вариант HB_FUNC(UKR) { LoadKeyboardLayout("00020422", KLF_ACTIVATE) ; } мне представляется лучше, хоть и переключает без проверки что сейчас включено

Warning W8075 main.prg 13: Suspicious pointer conversion in function HB_FUN_SMENKL
Warning W8004 main.prg 7: 'szMsg' is assigned a value that is never used in function HB_FUN_SMENKL

#PRAGMA BEGINDUMP
#include "Windows.h"
#include "hbapi.h"
HB_FUNC(SMENKL)
{
TCHAR m_PreviousLayout[KL_NAMELENGTH] ;
LPSTR szMsg = "";

GetKeyboardLayoutName(m_PreviousLayout);

if( hb_pcount() )
{
szMsg = hb_parc( 1 );
if ((*(szMsg) == 'R') && (*(m_PreviousLayout+7)!='1' ))
{
LoadKeyboardLayout("00000419", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'E') && (*(m_PreviousLayout+7)!='0'))
{
LoadKeyboardLayout("00000409", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'U') && (*(m_PreviousLayout+7)!='2'))
{
LoadKeyboardLayout("00020422", KLF_ACTIVATE) ;
}
}
hb_retc(m_PreviousLayout);
}
#pragma ENDDUMP

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


Пост N: 395
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.12.11 13:46. Заголовок: rolt пишет: Warning..


rolt пишет:

 цитата:
Warning W8075 main.prg 13: Suspicious pointer conversion in function HB_FUN_SMENKL
Warning W8004 main.prg 7: 'szMsg' is assigned a value that is never used in function HB_FUN_SMENKL

#PRAGMA BEGINDUMP
#include "Windows.h"
#include "hbapi.h"
HB_FUNC(SMENKL)
{
TCHAR m_PreviousLayout[KL_NAMELENGTH] ;
LPSTR szMsg = "";

GetKeyboardLayoutName(m_PreviousLayout);

if( hb_pcount() )
{
szMsg = hb_parc( 1 );
if ((*(szMsg) == 'R') && (*(m_PreviousLayout+7)!='1' ))
{
LoadKeyboardLayout("00000419", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'E') && (*(m_PreviousLayout+7)!='0'))
{
LoadKeyboardLayout("00000409", KLF_ACTIVATE) ;
}
else if ((*(szMsg) == 'U') && (*(m_PreviousLayout+7)!='2'))
{
LoadKeyboardLayout("00020422", KLF_ACTIVATE) ;
}
}
hb_retc(m_PreviousLayout);
}
#pragma ENDDUMP



Смысл предупреждения "Warning W8004 main.prg 7: 'szMsg' is assigned a value that is never used in function HB_FUN_SMENKL " довольно прозрачен. Вы объявляете указатель в строке

LPSTR szMsg = "";

и присваиваете ему адрес строкового литерала. А далее значение этого указателя сразу же изменяете

szMsg = hb_parc( 1 );

То есть инициализирующее значение указателя у вас нигде не используется, так что никакого смысла в его задании нет. Поэтому проще написать объявление этого указателя без инициализации его адресом строкового литерала.

LPSTR szMsg;

Что касается первого предупреждения компилятора, то, я думаю, оно относится к предложению szMsg = hb_parc( 1 );. Здесь надо смотреть объявление функции hb_parc, какой тип возвращаемого значения. Возможно, он отличен от LPSTR.


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


Пост N: 396
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.12.11 14:05. Заголовок: Также я хотел бы отм..


Также я хотел бы отметить: раз вы объявляете символьные массивы с помощью типа TCHAR, как, например,

TCHAR m_PreviousLayout[KL_NAMELENGTH] ;

то скорей всего в выражениях подобных следующему

if ((*(szMsg) == 'R') && (*(m_PreviousLayout+7)!='1' ))

следует писать

if ((*(szMsg) == TEXT( 'R' ) ) && (*(m_PreviousLayout+7)!=TEXT( '1' ) ) )

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

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