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




Пост N: 4326
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.12.14 16:59. Заголовок: Пара простых вопросов ;)


1. Как узнать что путь к папке из которой запускается программа имеет символы кирилицы ?
На ум приходит такой способ
 
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

Есть еще метода ?

2. Как узнать что путь к папке из которой запускается программа имеет длинные имена ?
На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины
всех токенов.
Есть еще метода ?


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


администратор




Пост N: 4356
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.14 19:05. Заголовок: Haz Спасибо мастеру..


Haz
Спасибо мастеру по регулярным выражениям ! ;)
Да так подойдет.

Описания что то не нашел я на hb_RegExSplit , интересная функция.

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




Пост N: 4357
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.14 19:18. Заголовок: Haz пишет: |&#..


Haz пишет:

 цитата:
|\


Игорь извини что дергаю в выходной.
Что означает эта пара символов ?

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




Пост N: 401
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.12.14 19:35. Заголовок: Dima пишет: Что озн..


Dima пишет:

 цитата:
Что означает эта пара символов



| - это знак или
\ - это модификатор который говорит что . ( точка ) не любой один символ а именно точка

на счет мастера ты погорячился я сам их редко применяю и все время со шпаргалками


hb_RegExSplit у Александра на сайте есть http://www.kresin.ru/hrbfaq_3.html#Doc9



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




Пост N: 4358
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.14 19:52. Заголовок: OK. Спасибо..


OK. Спасибо

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




Пост N: 4704
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.15 21:44. Заголовок: В функции работающей..


В функции работающей(добавленной) через HB_IDLEADD() можно завершить работу основной
программы через QUIT он же __Quit() .
Попробовал тоже самое сделать в функции запущенной в отдельном потоке.
Не получилось и QUIT просто заканчивает работу данного потока. Что логично.
Вопрос: возможно ли из отдельного потока завершить работу основной программы ?


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


Пост N: 907
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 09:30. Заголовок: Dima пишет: Вопрос:..


Dima пишет:

 цитата:
Вопрос: возможно ли из отдельного потока завершить работу основной программы ?


По-видимому, нельзя.
Надо при необходимости отправить сообщение основному потоку ( через общую переменную, например ), ну а он и завершит.

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




Пост N: 4706
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 10:39. Заголовок: alkresin пишет: ( ч..


alkresin пишет:

 цитата:
( через общую переменную, например ), ну а он и завершит


Как тогда отслеживать эту переменную в основном потоке ?
Повесить функцию через Hb_idleadd() или как то иначе ...


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





Пост N: 444
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 10.04.15 10:47. Заголовок: Как вариант - отслеж..


Как вариант - отслеживать наличие "нужного" потока (который посылает команду на завершение приложения).
Как только он "кончился" - завершать основную программу.

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


Пост N: 909
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 11:54. Заголовок: Dima пишет: Повесит..


Dima пишет:

 цитата:
Повесить функцию через Hb_idleadd()


В консоли - наверное, так. В GUI - таймеры есть.


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




Пост N: 4709
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 13:25. Заголовок: alkresin пишет: В G..


alkresin пишет:

 цитата:
В GUI - таймеры есть.


Как в Минигуи например C:\MiniGUI\SOURCE\c_timer.c ?
А его можно использовать в консоли ?

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


Пост N: 912
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 13:37. Заголовок: А его можно использо..



 цитата:
А его можно использовать в консоли ?


Вопрос интересный. Не знаю, как именно это сделано в Minigui и можно ли использовать тот код напрямую, но что-то свое на его основе написать можно.

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


Пост N: 913
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 14:17. Заголовок: Попробовал сейчас, п..


Попробовал сейчас, получилось:

Скрытый текст



Но это не работает с gtwin, т.к. там нет окна. Нужен gtwvt или что-то вроде этого.


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




Пост N: 4710
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 14:22. Заголовок: Сейчас попробую. GTW..


Сейчас попробую. Да работает примерчик. Спасибо. GTWIN не использую.
А я пробовал так.
Срабатывает , но почему то однократно.
Почему ?

 
REQUEST HB_GT_WVT
REQUEST HB_GT_WVG

Proc main
local hwnd
cls

hwnd:=GetForegroundWindow()
INITTIMER(hwnd,"TEST",100,My_test())

wait

KILLTIMER(hwnd,"TEST")
return
******************
Func My_test()
@ 3,2 say seconds()
return nil


******************
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
HB_FUNC (GETFOREGROUNDWINDOW)
{
HWND hWnd = GetForegroundWindow();
hb_retnl ((LONG) hWnd);
}

HB_FUNC( INITTIMER )
{
hb_retl( SetTimer( ( HWND ) hb_parnl( 1 ), ( UINT ) hb_parni( 2 ), ( UINT ) hb_parni( 3 ), ( TIMERPROC ) NULL ) );
}

HB_FUNC( KILLTIMER )
{
KillTimer( ( HWND ) hb_parnl( 1 ), // handle of main window
( UINT ) hb_parni( 2 ) ); // timer identifier
}
#pragma ENDDUMP




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


Пост N: 914
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 15:19. Заголовок: Таймер в в вашем при..


Таймер в в вашем примере не срабатывает ни разу, т.к. в inittimer() не определена callback процедура, NULL стоит.
А один раз срабатывает my_test() при вызове initimer() - ему передается значение, возвращаемое my_test()

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




Пост N: 4711
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 15:30. Заголовок: Вот так правильно бу..


Вот так правильно будет ?
HB_FUNC( INITTIMER )
{
hb_retl( SetTimer( ( HWND ) hb_parnl( 1 ), ( UINT ) hb_parni( 2 ), ( UINT ) hb_parni( 3 ), ( TIMERPROC ) hb_parni( 4 ) ) );
}

В Си я конечно валенок ;)

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


Пост N: 915
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 15:46. Заголовок: Dima пишет: Вот так..


Dima пишет:

 цитата:
Вот так правильно будет ?


Нет, конечно. Inittimer должен быть такой, как в моем примере. А если вы хотите передать процедуру обработки прерывания от таймера, то надо это делать на Harbour уровне - как в Hwgui, да и в Minigui, наверное, так же. Вам надо привязать эту процедуру, например, к id ( 2-й параметр в вызове settimer() ) - поместить в массив, например, соответсвующие id и кодоблок процедуры - а затем из callback-функции найти этот кодоблок по id и выполнить.

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




Пост N: 4712
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 15:48. Заголовок: Has подсказал. Свая..


Has подсказал.

Сваял примерчик , работает.

 
Proc main
REQUEST HB_GT_WVT
cls
Wvt_SetTimer( 2, 200)

wait
Wvt_KillTimer(2)
return
*************
Func WVT_TIMER()

@ 10,0 say time()

return .t.



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




Пост N: 4713
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 17:09. Заголовок: alkresin Александр ..


alkresin
Александр у меня вопрос.
Функции xxx_settimer() , xxx_killtimer() , xxx_timerproc() или Wvt_SetTimer() , Wvt_KillTimer() , WVT_TIMER()
это из той же оперы что и HB_IDLEADD() или это "родственники" потоков или что то еще ?
Почему спрашиваю.
Допустим есть функция которая была добавлена в HB_IDLEADD() и срабатывает каждые 200 мск да
еще что то выводит на экран ("для крутости") , так вот в основной программе я получу тормоза.
Если тоже самое сделать через поток , тормозов нет.



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


Пост N: 916
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.04.15 19:17. Заголовок: Dima пишет: это из ..


Dima пишет:

 цитата:
это из той же оперы что и HB_IDLEADD() или это "родственники" потоков или что то еще ?


Что-то еще. Насколько я понимаю, считает время и организует прерывание отдельный системный процесс, а обрабатывается это прерывание во время idle state.


 цитата:
Допустим есть функция которая была добавлена в HB_IDLEADD() и срабатывает каждые 200 мск да
еще что то выводит на экран ("для крутости") , так вот в основной программе я получу тормоза.


Возможно, проблема в реализации этой функции, может, ее надо реже вызывать.

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




Пост N: 4714
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.04.15 21:27. Заголовок: alkresin пишет: Воз..


alkresin пишет:

 цитата:
Возможно, проблема в реализации этой функции


Так и есть , мой косяк.
Спасибо за подсказку

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

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