Форум » [x]Harbour » Пара простых вопросов ;) » Ответить

Пара простых вопросов ;)

Dima: 1. Как узнать что путь к папке из которой запускается программа имеет символы кирилицы ? На ум приходит такой способ [pre2] proc main() local a REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) a:=curdir() ? a if hb_oemtoansi(a)#a ? "Есть кирилица" endif wait RETURN NIL [/pre2] Есть еще метода ? 2. Как узнать что путь к папке из которой запускается программа имеет длинные имена ? На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины всех токенов. Есть еще метода ?

Ответов - 85, стр: 1 2 3 4 5 All

Dima: В программе стоит такой вызов FT_OnTick({|| TEST()},500) // срабатывание TEST каждые 30 секунд Функция TEST опрашивает некую базу и в случае обнаружения в одном из полей значения .T. вываливает на экран какое то сообщение. Пока сообщение висит прога кушает примерно 25 % ресурсов проца. Можно эту проблему победить что бы не "жрало" столько ресурсов ? Пробовал перед выводом сообщения вешать FT_OnTick() а после закрытия сообщения FT_OnTick({|| TEST()},500) , не помогло. PS FT_OnTick это из HBNF и реализован c помощью Hb_idleadd , Hb_idleDel PS1 В Clipper такой же аналог не приводил к загрузке проца.

SergKis: Dima если использовать не idle, а on timer и сообщение вешать в потоке ?

Dima: SergKis С потоком нельзя. Работаю с ADS. Лет 5 назад проводил тесты , падает прога в разных потоках при работе с ADS , при чем непредсказуемо. В принципе есть исходник OnTick.c из Nanfor for Clipper https://searchcode.com/codesearch/view/4467408/ Может его можно как то под Harbour переписать ?


SergKis: Dima пишет:С потоком нельзя тогда используй отдельный запуск - монитор опроса (можно использовать приоритет задания) и сообщением в tray

Dima: SergKis Кажется понял почему такая загрузка. Дело в INKEY. Попробовал твою функцию INKEYGUI и кажется загрузки нет. Счас потестю.

SergKis: Dima пишет: Дело в INKEY ну да, inkey "морозит" обработку сообщений, InkeyGui - обрабатывае очередь и выделяет нажатия клавишь, но в wvt использовать, даже не подумал

Dima: SergKis В общем да нормально , не тормозит ни чего но вылезла новая проблема. В функции TEST что выше писал которая сидит в IDLE вызывается MEMOEDIT на просмотр (без редактирования) [pre2] memoedit(prime,11,21,18,59,.f.,"k2mmem_ff_prm",38) ......... ......... Функция обработки педалей Если в ней юзать INKEY , текст сообщения я вижу сразу , но грузит проц. Если вместо нее юзать INKEYGUI(100) , проц не грузит но не вижу сообщения , пока какую то кнопку не нажму. func k2mmem_ff_prm() local nxkey:=0 local local_time:=seconds() do while (nxkey:=INKEY(0.01))==0 if seconds()-local_time>10 TestKillUser() local_time:=seconds() endif enddo if nxkey==27 ft_putkey(nxkey) endif return 0 [/pre2] До кучи. Вставил в свой бровс вместо nkey:=inkey(0.01) -> nkey:=inkeygui(100) и функция пользователя больше не реагирует на функциональные клавиши. Enter обрабатывается.

SergKis: Dima сравни коды nkey после инкеев в gui VK_..., если правильно помню ...

SergKis: PS ? 'test' inkeygui(3000) видно или как ?

Dima: Да ESC , ENTER , Пробел совпадают , функциональные нет , насчет буквенно цифровых не проверял.

Dima: SergKis пишет: ? 'test' inkeygui(3000) видно или как ? Видно

Dima: Кажется понял чего надо. Нужен переходник из кодов INKEYGUI в обычные не расширенные коды INKEY. При чем с учетом раскладки клавы. Вопрос как это без напряга сделать !

SergKis: Dima пишетНужен переходник из кодов INKEYGUI где то видел, но непомню и заменяя inkey, inkeygui - аналог inkey clipper 5.2e и еще мышь не отрабатывает

Dima: Странно что в самом Harbour нет аналога типа INKEYIDLE , потому как если опрашивать клаву в IDLE фоновой задачи ( НЕ в потоке ), c помощью INKEY то грузит проц. Если в основном потоке идет опрос с помощью INKEY , проц не грузит.

PSP: Использовать в цикле hb_ReleaseCPU() не подойдет?

Dima: PSP пишет: Использовать в цикле hb_ReleaseCPU() не подойдет? Нет , уже тестил. Похоже для конвертации нужно что то типа https://msdn.microsoft.com/en-us/library/system.windows.input.keyinterop.keyfromvirtualkey%28v=vs.110%29.aspx Но в сях я валенок

SergKis: Dima мой товарищь посоветовал делать так: nKey := InkeyGui( ... ) nKey подать в hb_gt_wvt_Info(...) gtwwt.c добавить свою константу в case static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) например case HB_GTI_VK_TO_INKEY используя hb_gt_wvt_KeyEvent(...) в которой hb_gt_wvt_TranslateKey(...) произвести перекодировку но надо пересобрать gtwwt.obj

Dima: SergKis Спасибо ! Думал есть способ проще , без переделки сырцов. Попробую.

SergKis: Dima пишет:Думал есть способ проще , без переделки сырцов вытащить из gtwvt.c эти функции (они static), сделать не static, переименовать ... повторить все - вряд ли это проще

Dima: В сишный код я точно не полезу , так как должен понимать что делаю.



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