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




Пост 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: 4331
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.12.14 22:46. Заголовок: up..


up

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




Пост N: 391
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.12.14 23:34. Заголовок: Dima пишет: up 1 ..


Dima пишет:

 цитата:
up



1 проверить на ASC коды весь путь , если есть ASC кроме латинских то...
2 не помню на вскидку фенкцию ((( но есть точно - та что получает короткое имя и если есть в пути длинные - тто длинна будет разной и в короткой версии будет знак тильда

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




Пост N: 4332
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 00:03. Заголовок: понял , затестю завт..


понял , затестю завтра.
спасибо !

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




Пост N: 393
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 10:49. Заголовок: Dima пишет: не пом..


Dima пишет:

 цитата:
не помню на вскидку фенкцию



cShot := GETSHORTFILENAME( cLongName )

=============================================
#pragma BEGINDUMP

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

HB_FUNC( GETSHORTFILENAME )
{
char pszReturn[ MAX_PATH ] ;
pszReturn[0]= '\0' ;

GetShortPathName( hb_parcx( 1 ), pszReturn, MAX_PATH - 1 ) ;
hb_retc( pszReturn ) ;


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




Пост N: 394
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:03. Заголовок: Dima пишет: провери..



 цитата:
проверить на ASC коды весь пут




Примерно так

#require "hbxpp"

#include "hbxpp.ch"



FUNC Main( ... )
local n := 0
local cParh := ""
local lFound := .F.


REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )

? cPath := hb_argV(1)
?

FOR n := 1 TO LEN(cPath)
IF ASC(cPath[n]) > 127
lFound := .T.
? cPath[n]
EXIT
END
END


RETURN NIL


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




Пост N: 4333
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:11. Заголовок: Игорь спасибо ! А та..


Игорь спасибо !
А такая проверка думаешь будет не правильной ?
 
a:=curdir()

? a
if hb_oemtoansi(a)#a
? "Есть кирилица"
endif


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




Пост N: 4334
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:35. Заголовок: Haz пишет: cShot :=..


Haz пишет:

 цитата:
cShot := GETSHORTFILENAME( cLongName )



что то она пустую строку выдает

 
proc main()
? GETSHORTFILENAME(curdir()) // пусто
? GETSHORTFILENAME() // пусто
? GETSHORTFILENAME("bla bla bla bla bla bla bla bla bla bla ") // пусто
wait
RETURN NIL

*cShot := GETSHORTFILENAME( cLongName )

*=============================================
#pragma BEGINDUMP

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

HB_FUNC( GETSHORTFILENAME )
{
char pszReturn[ MAX_PATH ] ;
pszReturn[0]= '\0' ;

GetShortPathName( hb_parcx( 1 ), pszReturn, MAX_PATH - 1 ) ;
hb_retc( pszReturn ) ;
}
#pragma ENDDUMP



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




Пост N: 395
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:36. Заголовок: Dima пишет: А такая..


Dima пишет:

 цитата:
А такая проверка думаешь будет не правильной ?



не проверял , но должна работать , возможно дольше на пару микросекунд из-за преобразования

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




Пост N: 396
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:42. Заголовок: Dima пишет: что то ..


Dima пишет:

 цитата:
что то она пустую строку выдает



у меня работает
проверял так
? GetShotFilename( Exename() )

CurDir() - возвращаяет не имя файла
попробуй Directory()[1][1]



вот это точно ничего не покажет т.к. файла нет
GETSHORTFILENAME("bla bla bla bla bla bla bla bla bla bla ")





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




Пост N: 4335
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:45. Заголовок: Haz пишет: ? GetSho..


Haz пишет:

 цитата:
? GetShotFilename( Exename() )


OK. Понял.
Если запустить из папки в имени которой есть кирилица то вернет пустую строку

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




Пост N: 397
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 12:20. Заголовок: Dima пишет: Если за..


Dima пишет:

 цитата:
Если запустить из папки в имени которой есть кирилица то вернет пустую строку



GetShotFilename( Exename() )
проверил - с кирилицей тож работает нормально

отсюда запустил
C:\Командировки\Документация>Ais_Zpto.exe

во что выдало
C:\C7BA~1\F63B~1\Ais_Zpto.exe

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




Пост N: 4336
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 14:18. Заголовок: Ага. Это я кодовую с..


Ага. Это я кодовую страницу не указал.
Если указать RU1251 - то все нормально
Если указать RU866 - то тоже пусто

Получается что обе проверки можно свести к одному условию.
Если GetShortFilename( Exename() ) не равно Exename() то с путем что то не то.


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




Пост N: 4337
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:08. Заголовок: Остановился на такой..


Остановился на такой проверке
 
Func TestPath(cpath)
local ret:=.t.
local n
FOR n=1 TO LEN(cPath)
IF ASC(substr(cPath,n,1)) > 127 .or. ASC(substr(cPath,n,1))==32
ret:= .f.
EXIT
END
next

return ret



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




Пост N: 398
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 16:33. Заголовок: Dima пишет: Останов..


Dima пишет:

 цитата:
Остановился на такой проверке



Этот вариант проверяет наличие расширенных ASC кодов ( русские буквы ) , а зачем там == 32 ?
Если для проверки длинного имени, то оно мжет быть и без пробелов

Dima пишет:

 цитата:
ASC(substr(cPath,n,1)



можно заменить на ASCPOS( cPath. n), хотя мне больше нравится вариант работы со строкой как с массивом cPath[n]

а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ?



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




Пост N: 4338
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:37. Заголовок: Haz пишет: а в чем ..


Haz пишет:

 цитата:
а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ?


а косяки возникают при приеме / передаче файлов на фтп из проги.

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




Пост N: 4339
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:38. Заголовок: Haz пишет: со строк..


Haz пишет:

 цитата:
со строкой как с массивом cPath[n]


этот вариант у меня ошибку бьет.

local a:="12345"
? a[3] //Error BASE/1068 Argument error: array access
wait


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




Пост N: 399
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 16:44. Заголовок: Dima пишет: тот вар..


Dima пишет:

 цитата:
тот вариант у меня ошибку бьет.



нужно это
#require "hbxpp"
#include "hbxpp.ch"

и это hbxpp.lib

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




Пост N: 4340
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:53. Заголовок: Haz пишет: нужно эт..


Haz пишет:

 цитата:
нужно это
#require "hbxpp"
#include "hbxpp.ch"


Упс. Заработало.

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




Пост N: 4355
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.14 16:20. Заголовок: еще простой вопрос ;..


еще простой вопрос ;)

Есть ли такая функция , что бы вернула
подстроку из строки , находящуюся между
2 - мя подстроками ?
Например есть строка MN_20.3456.ZIP
Нужно что типа вот такой фунции
xxx("MN_20.3456.ZIP","MN_",".ZIP") // должна вернуть 20.3456
Понятно что можно сделать с помощью Substr,At,Rat.


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




Пост N: 400
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.12.14 18:55. Заголовок: Dima пишет: Понятно..


Dima пишет:

 цитата:
Понятно что можно сделать с помощью Substr,At,Rat.



может так ?
cString := MN_20.3456.ZIP
cRegExp := "MN_|\.ZIP"
? hb_RegExSplit( cRegExp , cString)[2]



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




Пост 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 
ПрофильЦитата Ответить
администратор




Пост N: 4733
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.04.15 22:34. Заголовок: В программе стоит та..


В программе стоит такой вызов 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 такой же аналог не приводил к загрузке проца.

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




Пост N: 578
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 07:42. Заголовок: Dima если использов..


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

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




Пост N: 4734
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 08:27. Заголовок: SergKis С потоком н..


SergKis
С потоком нельзя. Работаю с ADS. Лет 5 назад проводил тесты , падает прога
в разных потоках при работе с ADS , при чем непредсказуемо.

В принципе есть исходник OnTick.c из Nanfor for Clipper
https://searchcode.com/codesearch/view/4467408/
Может его можно как то под Harbour переписать ?

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




Пост N: 580
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 08:31. Заголовок: Dima пишет:С потоком..


Dima пишет:
 цитата:
С потоком нельзя


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

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




Пост N: 4735
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 09:00. Заголовок: SergKis Кажется пон..


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

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




Пост N: 581
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 09:35. Заголовок: Dima пишет: Дело в I..


Dima пишет:
 цитата:
Дело в INKEY


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

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




Пост N: 4736
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 10:05. Заголовок: SergKis В общем да ..


SergKis
В общем да нормально , не тормозит ни чего но вылезла новая проблема.
В функции TEST что выше писал которая сидит в IDLE вызывается MEMOEDIT
на просмотр (без редактирования)
 
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



До кучи.
Вставил в свой бровс вместо nkey:=inkey(0.01) -> nkey:=inkeygui(100)
и функция пользователя больше не реагирует на функциональные клавиши.
Enter обрабатывается.

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




Пост N: 582
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 10:32. Заголовок: Dima сравни коды nk..


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


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




Пост N: 583
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 10:35. Заголовок: PS ? 'test'..


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


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




Пост N: 4737
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 10:47. Заголовок: Да ESC , ENTER , Про..


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


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




Пост N: 4738
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 10:51. Заголовок: SergKis пишет: ? &#..


SergKis пишет:

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


Видно

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




Пост N: 4739
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 10:59. Заголовок: Кажется понял чего н..


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

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




Пост N: 585
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 11:06. Заголовок: Dima пишетНужен пере..


Dima пишет
 цитата:
Нужен переходник из кодов INKEYGUI


где то видел, но непомню и заменяя inkey, inkeygui - аналог inkey clipper 5.2e и еще мышь не отрабатывает

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




Пост N: 4740
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 11:11. Заголовок: Странно что в самом ..


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

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


Пост N: 1056
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.04.15 11:26. Заголовок: Использовать в цикле..


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

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




Пост N: 4741
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 11:33. Заголовок: PSP пишет: Использо..


PSP пишет:

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


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

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




Пост N: 587
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 12:51. Заголовок: Dima мой товарищь п..


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


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




Пост N: 4742
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.15 13:10. Заголовок: SergKis Спасибо ! Д..


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

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




Пост N: 589
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.15 14:48. Заголовок: Dima пишет:Думал ест..


Dima пишет:
 цитата:
Думал есть способ проще , без переделки сырцов


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

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




Пост N: 4744
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 13:22. Заголовок: В сишный код я точно..


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


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




Пост N: 4745
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 14:57. Заголовок: SergKis А можете не..


SergKis
А можете немного допилить INKEYGUI что бы она вернула ASCII код с учетом раскладки ?
Вероятно нужна эта функция https://msdn.microsoft.com/en-us/library/windows/desktop/ms646318%28v=vs.85%29.aspx


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




Пост N: 4746
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 16:50. Заголовок: Почти победил преобр..


Почти победил преобразование VK кодов , но с кирилицей фигня полная.
Что не так сделал ?
Собирал так c:\hb32\bin\hbmk2 t -gtwvt -gui

 
#include "hbgtinfo.ch"

proc main
local a

REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_LANG_RU866
HB_LANGSELECT("RU866")
REQUEST HB_CODEPAGE_RU866
hb_cdpSelect( "RU866" )

hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console')


? "TEST"
do while (a:=inkeygui(0))#27
? a
? chr(toasciiex(a))
enddo

return
*************************


#pragma BEGINDUMP

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

HB_FUNC( TOASCIIEX )
{
HKL hkl = GetKeyboardLayout( 0 );
BYTE KeyState[256];
WORD lpChar;

GetKeyboardState( KeyState );

ToAsciiEx( hb_parnl(1), 0, KeyState, &lpChar, 0, hkl );
hb_retnl( LOBYTE( lpChar ));
}


#pragma ENDDUMP


#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>

HB_FUNC( INKEYGUI )
{
MSG Msg;
BOOL lNoLoop=FALSE;

UINT dwTimer, nRet=0, uTimeout=10;

if( HB_ISNUM(1) ) uTimeout = hb_parni(1);

if( uTimeout==0 ) uTimeout = 0x0FFFFFFF;


dwTimer = SetTimer( NULL, 0, uTimeout, NULL);


while( GetMessage(&Msg, NULL, 0, 0) )
{

switch( Msg.message )
{
case WM_KEYDOWN :
case WM_SYSKEYDOWN : { nRet = Msg.wParam; lNoLoop = TRUE; break; }
case WM_TIMER : { lNoLoop = Msg.wParam == dwTimer; break; }
}

if( lNoLoop )
{
KillTimer( NULL, dwTimer );
hb_retni( nRet );
return ;
}

else
{
TranslateMessage( &Msg ); // Translates virtual key codes
DispatchMessage( &Msg ); // Dispatches message to window

}

}

}


#pragma ENDDUMP



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




Пост N: 4747
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 16:53. Заголовок: Упс , понял , надо т..


Упс , понял , надо так ? hb_ansitooem(chr(toasciiex(a)))

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




Пост N: 598
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.04.15 20:04. Заголовок: Dima пишет:Упс , пон..


Dima пишет:
 цитата:
Упс , понял , надо так ?


и что ? получилось ?

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




Пост N: 4748
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 20:16. Заголовок: SergKis пишет: и чт..


SergKis пишет:

 цитата:
и что ? получилось ?


Практически да , допиливаю пока.

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




Пост N: 4749
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.15 09:18. Заголовок: SergKis А вот такой..


SergKis
А вот такой фокус похоже не работает.
Keyboard chr(112)
? inkeygui() // ни какой реакции на посыл кода через Keyboard

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




Пост N: 600
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.15 10:13. Заголовок: Dima в wvt соорудил..


Dima
в wvt соорудили перекодировку (см.функции выше ..event..1) VK клавиш

 цитата:
ни какой реакции на посыл кода через Keyboard


возможно надо использовать сообщение WM_COPYDATA, типа Keyboard посылает а в inkeygui вставить обработку

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




Пост N: 4754
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.04.15 21:23. Заголовок: PSP пишет: Использ..


PSP пишет:

 цитата:

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


Таки да
Если в основном потоке клаву опрашивать так , nkey:=Inkey(0.01) , проц не грузит.
Если так же ее опрашивать в IDLE функции живущей в HB_IdleAdd() , то да грузит проц.
Долго игрался и доигрался
В IDLE опрашивать надо так
 
nKey:=Inkey()
hb_releasecpu()

* ни чего грузит и все пучком.



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


Пост N: 1059
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.04.15 21:29. Заголовок: Ну да, именно так ))..


Ну да, именно так )))

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




Пост N: 4755
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.04.15 21:33. Заголовок: PSP пишет: Ну да, и..


PSP пишет:

 цитата:
Ну да, именно так )))


Нет что б сразу сказать подробнее )))
2 дня убил да еще мучал InkeyGui (с ним тоже вариант , но функция специфическая)

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


Пост N: 1060
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.04.15 22:07. Заголовок: Я ж не знал... ))..


Я ж не знал ) А ты написал, что уже пробовал... ))

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




Пост N: 5468
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.01.16 16:42. Заголовок: Можно ли в вызываемо..


Можно ли в вызываемой функции узнать , она была вызвана из основного потока или дочернего ?

ЗЫ
MT приложение.

Проехали , нашел.
hb_threadSelf()

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


Пост N: 963
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 25.01.16 13:21. Заголовок: pThID := hb_threadSe..


pThID := hb_threadSelf()
Возвращает указатель потока, из которого вызывается эта функция.

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




Пост N: 5607
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.16 17:04. Заголовок: Почему есть функции ..


Почему есть функции HB_LEFTEQ() и HB_LEFTEQI() (удобнее чем LEFT()) а подобных аналогов c RIGHT нет ?

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


Пост N: 1188
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.16 18:21. Заголовок: В ChangeLog логика..


В ChangeLog логика HB_LEFT* ясно описана

+ added new function to replace "=" operator without the SET EXACT ambiguity
in its most common pattern of usage:
hb_LeftEq( <cString1>, <cString2> ) -> <lResult>
it's equivalent to this expression, but faster and shorter:
( Left( <cString1>, Len( <cString2> ) ) == <cString2> )
2014-01-22 03:09 UTC+0100 Viktor Szakáts
+ added hb_LeftEqI(). Same as hb_LeftEq() but case-insensitive.
hb_LeftEqI( <cString1>, <cString2> ) -> <lResult>
2014-02-04 13:38 UTC+0100 Viktor Szakáts

Ну а RIGHT, наверное, так часто не пользуются

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




Пост N: 5608
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.16 21:16. Заголовок: Петр пишет: Ну а RI..


Петр пишет:

 цитата:
Ну а RIGHT, наверное, так часто не пользуются


Да наверное так и есть.
PRG аналоги могли бы быть примерно такими
 
Func Hb_rightEQI(Cstr1 , Cstr2)
return Iif (Hb_isstring(Cstr1) .and. Hb_isstring(Cstr1) ;
.and. Right(upper(Cstr1),len(Cstr2))==Upper(Cstr2),.T.,.F.)


Примерно так же Hb_rightEQ , но без Upper или можно было сделать единую
функцию Hb_right() с 3-м параметром.



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




Пост N: 5671
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.05.16 21:33. Заголовок: Посетила меня идея ,..


Посетила меня идея , организовать в своей сетевой задаче просмотр
экрана другого юзера , для начала только скрин , в перспективе "видео" (показ тех же скринов с задержкой).
Реализация думаю не очень сложная и решу.
Есть пара вопросов ( Терминал GTWVT (WVG) )
1. Как средствами Harbour снять скрин окна с нужным заголовком и сохранить в файл формата JPG скажем.
2. -\\-\\-\\\-\\- cнять скрин всего рабочего стола со всеми окнами и -\\-\\-\\\-\\-



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




Пост N: 4953
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.16 01:11. Заголовок: Dima пишет: экрана ..


Dima пишет:

 цитата:
экрана другого юзера , для начала только скрин


Давай уж сразу на МиниГуи !
Тем более там уже реализовано снятие всего экрана ! Не помню какой пример, но точно сам видел !

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



Пост N: 187
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 25.05.16 07:21. Заголовок: ScreenshotMaker


есть такой пример..\MiniGUI\SAMPLES\Applications\ScreenshotMaker
портируется и в harbour, из примера нужно взять JPG.DLL
= = =
DYNAMIC SaveToJpgEx
...
Function SnapJpg(cSaveFile,cfile_dll)
Local nW := HB_GTINFO( HB_GTI_DESKTOPWIDTH )
Local nH := HB_GTINFO( HB_GTI_DESKTOPHEIGHT )
Local nHandle := GETDESKTOPWINDOW()
Local ret := .f.
cfile_dll := IIF(cfile_dll=NIL,"jpg.dll",cfile_dll)
if file(cfile_dll)
cSaveFile := IIF( cSaveFile=NIL, "test.jpg" ,cSaveFile)
Calldll32( "SaveToJpgEx",cfile_dll, nHandle, cSaveFile, nW, nH )
ret:=file(cSaveFile)
else
tolog("SnapJpG: Нет файла DLL {"+cfile_dll+"} ")
ret:=.f.
endif
Return ret


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




Пост N: 5673
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.05.16 13:33. Заголовок: petr707 Спасибо за ..


petr707
Спасибо за идею , работает.

 
#include "hbgtinfo.ch"
#include "hbdyn.ch"

Proc main
REQUEST HB_GT_WVT
REQUEST HB_GT_WVG_DEFAULT
? " "

? snapJpg(CurDrive()+":\"+CurDir()+"\test.jpg",0)
wait
return
*********************
Func SnapJpg(cfile,nmode)
Local nW
Local nH
Local nHandle
hb_default(@nmode,0)
hb_default(@cfile,"test.jpg")

if nmode==0
nHandle := wapi_GETDESKTOPWINDOW()
nW := HB_GTINFO( HB_GTI_DESKTOPWIDTH )
nH := HB_GTINFO( HB_GTI_DESKTOPHEIGHT )
else
nHandle := GETFOREGROUNDWINDOW()
nw := HB_GTINFO( HB_GTI_SCREENWIDTH )
nh := HB_GTINFO( HB_GTI_SCREENHEIGHT )
endif

hb_DynCall( { "SaveToJpgEx", "jpg.dll",HB_DYN_CALLCONV_STDCALL },nHandle,cfile,nw,nh )

return HB_fileexists(cfile)
*****************
#pragma BEGINDUMP

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


#pragma ENDDUMP



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




Пост N: 5674
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.05.16 21:32. Заголовок: Dima пишет: petr707..


Dima пишет:

 цитата:
petr707
Спасибо за идею , работает.


Я так понял что снять скриншот окна по хендлу не получится если окно свернуто , или можно ?

PS
Можно конечно проверить если свернуто то развернуть , снять скрин и снова свернуть...

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



Пост N: 188
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 25.05.16 22:21. Заголовок: Не, не надо проверять и свертывать..


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

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




Пост N: 5675
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.05.16 23:00. Заголовок: petr707 Вариант , с..


petr707
Вариант , спасибо !

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





Пост N: 319
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 27.04.21 16:51. Заголовок: А есть функция переи..


А есть функция переименовать папку (с файлами внутри)?

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




Пост N: 7330
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.04.21 18:48. Заголовок: rvu Самопал придетс..


rvu
Самопал придется писать...

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

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