Автор | Сообщение |
|
| постоянный участник
|
Пост N: 2432
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.12 16:20. Заголовок: PROGRESSBAR и INKEY ....
Подскажите как задержка в INKEY() может влиять на показ PROGRESSBAR ? Просто непонятно как в МиниГуи делать бегунки.... Сделал отдельную програмку для просмотра бегунка и опытным методом вычислил, что если INKEY(0.5) - бегунок добегает до конца, а если меньше, то не добегает..... Мистика какая-то ! Или нельзя в МиниГуи пользоваться INKEY() ??? Пример здесь. Задержку в INKEY() - править в copy_file.ini -> параметр Delay_test = 0.? http://files.mail.ru/V0NJCQ
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|
|
| постоянный участник
|
Пост N: 41
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.11.12 20:04. Заголовок: Andrey пишет:Или нел..
Andrey пишет: цитата: | Или нельзя в МиниГуи пользоваться INKEY() ??? |
| Мы используем такую: HB_FUNC( INKEYHMG ) { LONG TimeOut=0; if( ISNUM(1) ){ TimeOut = hb_parni(1); TimeOut = WaitForInputIdle( GetCurrentProcess(), (DWORD) TimeOut ); } hb_retni( TimeOut ); }
|
|
|
|
| постоянный участник
|
Пост N: 2436
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.12 20:17. Заголовок: SergKis пишет: Мы и..
SergKis пишет: Вставил к себе в программу: Скрытый текст #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include <shlobj.h> HB_FUNC( INKEYHMG ) { LONG TimeOut=0; if( ISNUM(1) ){ TimeOut = hb_parni(1); TimeOut = WaitForInputIdle( GetCurrentProcess(), (DWORD) TimeOut ); } hb_retni( TimeOut ); } #pragma ENDDUMP
| Только теперь проект не собирается. Ошибка, нет функции: Error: Unresolved external '_ISNUM' referenced from W:\COPY_FILE_RUN1\COPY_FILE.OBJ Где взять ? А почему нет ТАКОЙ - INKEYHMG() функции в самом МиниГуи ?
|
|
|
|
| постоянный участник
|
Пост N: 42
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.11.12 21:06. Заголовок: Andrey пишетОшибка, ..
Andrey пишет Нашел такие define, возможно ISNUM тоже Скрытый текст #ifdef __XHARBOUR__ #define HB_ISNIL( n ) ISNIL( n ) #define HB_ISCHAR( n ) ISCHAR( n ) #define HB_ISNUM( n ) ISNUM( n ) #define HB_ISLOG( n ) ISLOG( n ) #define HB_ISDATE( n ) ISDATE( n ) #define HB_ISBYREF( n ) ISBYREF( n ) #define HB_ISARRAY( n ) ISARRAY( n ) #endif
| Попробуй без ISNUM: Скрытый текст HB_FUNC( INKEYHMG ) { LONG TimeOut=0; /* if( ISNUM(1) ){ */ TimeOut = hb_parni(1); TimeOut = WaitForInputIdle( GetCurrentProcess(), (DWORD) TimeOut ); /* } */ hb_retni( TimeOut ); }
|
|
|
|
|
| постоянный участник
|
Пост N: 2437
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.11.12 22:57. Заголовок: Ерунда получается. Ф..
Ерунда получается. Форма на экране запускается и тут же уходит. Промелькнула и все. Увеличил задержку Delay_test = 80 - тоже ерунда. А вообще программа раз на третий запускается ! Вообще стабильности нет.
|
|
|
|
| постоянный участник
|
Пост N: 43
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.12 11:16. Заголовок: Andrey пишет:Ерунда ..
Andrey пишет: Попробуй из hbwin.lib wapi_sleep(<dwMilliseconds>)
|
|
|
|
| постоянный участник
|
Пост N: 44
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.12 12:15. Заголовок: Andrey пишет:Увеличи..
Andrey пишет: цитата: | Увеличил задержку Delay_test = 80 - тоже ерунда. А вообще программа раз на третий запускается ! Вообще стабильности нет. |
| Это я был неправ, не дал пояснений и бегло глянул на пример (в нем нет реального копирования). InkeyHmg(<dwMilliseconds>) делает приостановку кода программы для обработки очереди сообщений, на время <dwMilliseconds>. Если очередь пуста, то приостановки нет, если очередь не успела обработаться, за указанное время, выполнение InkeyHmg прерывается и выполняется код программы дальше. Применение данной функции позволяет, например, снять программу по крестику. wapi_sleep(<dwMilliseconds>) делает приостановку кода программы, но очередь сообщений не обрабатывается (фактически окно не доступно - не управляется) и нельзя , например, снять программу по крестику !!! Пример: Test InkeyHmg
|
|
|
|
| |
Пост N: 2555
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.11.12 12:26. Заголовок: millisec() можно заю..
millisec() или hb_idleSleep() можно заюзать
|
|
|
|
| постоянный участник
|
Пост N: 45
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.12 14:21. Заголовок: Dima пишет:hb_idleSl..
Dima пишет: цитата: | hb_idleSleep() можно заюзать |
| Можно (в параметре секунды), но очередь сообщений она не обрабатывает, т.е. длиная оперция COPY TO AAAA FOR {|| hb_IdleSleep(0.5), .T.} бесмыслена, а COPY TO AAAA FOR {|| InkeyHmg(100), .T.} не заморозит окно
|
|
|
|
| |
Пост N: 149
Зарегистрирован: 17.06.10
|
|
Отправлено: 29.11.12 14:50. Заголовок: А это так надо в Min..
А это так надо в MiniGui чтоб End был до ACTIVATE ? ......................... END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1
|
|
|
|
| постоянный участник
|
Пост N: 46
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.12 16:06. Заголовок: fil пишет: А это так..
fil пишет: цитата: | А это так надо в MiniGui чтоб End был до ACTIVATE ? |
| см. i_window.ch там описания для препроцессора, ну и другие ch тоже, потом по функциям см. source miniGui. между DEFINE WINDOW ... END WINDOW находятся контролы
|
|
|
|
| постоянный участник
|
Пост N: 47
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.12 16:37. Заголовок: Andrey если еще акту..
Andrey если еще актуален аналог INKEY (как в 5.2) в MiniGui, то мои товарищ сделел Текст в примере http://zalil.ru/34015042
|
|
|
|
|
| постоянный участник
|
Пост N: 2440
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.11.12 16:49. Заголовок: SergKis пишет: Andr..
SergKis пишет: цитата: | Andrey если еще актуален аналог INKEY |
| Конечно актуален. Спасибо БОЛЬШОЕ ! Буду пробовать.
|
|
|
|
| постоянный участник
|
Пост N: 2454
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.12 21:52. Заголовок: SergKis пишет: Andr..
SergKis пишет: цитата: | Andrey если еще актуален аналог INKEY (как в 5.2) в MiniGui, то мои товарищ сделел |
| Функция СУПЕР ! Просто необходима. И в код добавляется очень просто. Буду пользоваться. Код программы здесь http://files.mail.ru/U8S0ZG Товарищу БОЛЬШОЕ СПАСИБО ! А Григорию предложение, может все таки добавить в МиниГуи эту функцию: INKEY_HMG() !
|
|
|
|
| постоянный участник
|
Пост N: 49
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.12 15:54. Заголовок: Вот модифицированный..
Вот модифицированный код INKEY_HMG() ( с учетом клавиши Alt ), у себя мы переименовали в InkeyGui(...): 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 } } }
|
|
|
|
| постоянный участник
|
Пост N: 2461
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.12.12 20:54. Заголовок: SergKis Спасибо БОЛ..
SergKis Спасибо БОЛЬШОЕ ! А сделайте лучше счет как в настоящем INKEY() ? А то путаница происходит INKEY() а счет на сотни идет, непорядок.... Только ограничение 0.01 убрать, чтобы можно было ставить типа 0.001 ?
|
|
|
|
| постоянный участник
|
Пост N: 50
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.12.12 14:00. Заголовок: Andrey пишет: Только..
Andrey пишет: цитата: | Только ограничение 0.01 убрать, чтобы можно было ставить типа 0.001 ? |
| Реализация INKEY() сделана на функции создания виртуального таймера SetTimer( NULL, 0, uTimeout, NULL), которая через указанное время, посылает сообщение WM_TIMER в очередь сообщений: 1. сообщение WM_TIMER является низкоприоритетным 2. несмотря на указания интервалов времени в миллисекундах, реальная дискретность таймера определяется периодом прерываний, посылаемых таймером. Исходя из этого задержки с меньшим временем надо производить иначе, например используя функцию wapi_sleep(...), т.е. написать свою типа: FUNC ImkeyA(n) LOCAL i,k := 0 n := iif(n==NIL,0.001,n*1000) if n >= 100 k := InkeyGui(n) else wapi_sleep(n) endif Return k
|
|
|
|
| постоянный участник
|
Пост N: 2465
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.12.12 15:25. Заголовок: Спасибо БОЛЬШОЕ ! :..
Спасибо БОЛЬШОЕ ! Ан нет, ошибочку выдает... Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_WAPI_SLEEP' referenced from W:\HB_PROJECT\UTIL_MINIGUI.OBJ Где взять эту функции в МиниГуи ?
|
|
|
|
| постоянный участник
|
Пост N: 2471
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.12.12 17:19. Заголовок: Объясните непонятном..
Объясните непонятному, может я что-то не так делаю... С главной формы тыкаю кнопочку: идет вызов моей функции StartFormCopy() Скрытый текст FUNCTION StartFormCopy() Load Window StatusCopy StatusCopy.Center StatusCopy.Activate StartConvert() // сама обработка UpdateList2() // обновление списка файлов на форме RETURN Nil
| Сама форма построена IDE-дизайнером в отдельном файле StatusCopy.fmg Вот примерно его содержание: Скрытый текст DEFINE WINDOW TEMPLATE AT 245 , 273 WIDTH 524 HEIGHT 233 TITLE "Пожалуйста подождите..." ICON "iProgramm" MODAL NOSYSMENU BACKCOLOR {255,255,255} DEFINE PROGRESSBAR Bar_1 ROW 40 COL 70 WIDTH 425 HEIGHT 44 RANGEMIN 1 RANGEMAX 10 END PROGRESSBAR .................. DEFINE PROGRESSBAR Bar_2 ROW 130 COL 70 WIDTH 425 HEIGHT 44 RANGEMIN 1 RANGEMAX 10 END PROGRESSBAR DEFINE IMAGE Image_2 ROW 125 COL 10 WIDTH 48 HEIGHT 48 PICTURE "iDBF" END IMAGE END WINDOW
|
В функции StartConvert() // сама обработка происходит сама обработка, чтение директории, подсчет кол-ва файлов и показ бегунка Скрытый текст ............... StatusCopy.Center StatusCopy.Image_1.Picture := "iCopyFile" StatusCopy.Bar_1.RangeMax := Len( ADir ) StatusCopy.Status1.Value := "Конвертируется файл 0 из " + AllTrim( Str( Len( ADir ) ) ) + " ..." FOR nI := 1 TO Len( ADir ) cFile := ADir[ nI, 1 ] StatusCopy.Bar_1.Value := nI StatusCopy.Status1.Value := "файл " + AllTrim( Str( nI ) ) + " из " + AllTrim( Str( Len( ADir ) ) ) + " ..." .............. // обработка NEXT StatusCopy.Bar_1.Value := StatusCopy.Bar_1.RangeMax StatusCopy.Bar_2.Value := StatusCopy.Bar_2.RangeMax StatusCopy.Status1.Value := "Конвертирование успешно завершено !" StatusCopy.Status2.Value := "Завершено " DO EVENTS InkeyGUI( 100 ) cText2 := "Проведено - файлов " + AllTrim( Str( nJ ) ) + " из " + AllTrim( Str( Len( ADir ) ) ) + " !" + Space( 20 ) + CLRW MsgInfo( cText2 + CLRW + cText + CLRW + CLRW, "Информация" ) cLogText += CLRW + cText2 + CLRW + cText + CLRW + CLRW IF nErr > 0 cText2 := "Не проведено - следующих файлов:" + Space( 20 ) + CLRW MsgStop( cText2 + CLRW + cTextErr + CLRW, "Информация" ) cLogText += cText2 + CLRW + cTextErr + CLRW ENDIF StatusCopy.Release() ENDIF .....
| Так вот при нажатии на кнопку, форма с бегунком появляется и ВИСИТ !!! Где и в чем я не прав ?
|
|
|
|
| |
Пост N: 2566
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.12.12 17:50. Заголовок: Andrey пишет: Error..
Andrey пишет: цитата: | Error: Unresolved external '_HB_FUN_WAPI_SLEEP |
| Hbwin.lib прилинкуй
|
|
|
|
| постоянный участник
|
Пост N: 2474
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.12.12 17:53. Заголовок: Dima пишет: Hbwin.l..
Dima пишет: Не хотелось бы.. И так у меня не работает прога, еще и эту либу тащить нужно...
|
|
|
|
| постоянный участник
|
Пост N: 2479
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.12 20:19. Заголовок: Сама форма построена..
цитата: | Сама форма построена IDE-дизайнером в отдельном файле StatusCopy.fmg |
| Уф... Наконец то разобрался... В форме ВСЕГДА нужно ставить вызов нужной функции, а я ставил как всегда по клиперному.. в строчку... .....идет вызов моей функции StartFormCopy() FUNCTION StartFormCopy() Load Window StatusCopy StatusCopy.Center StatusCopy.Activate StartConvert() // сама обработка - НЕЛЬЗЯ так делать, убрать строку ВООБЩЕ нужно ! RETURN Nil Нужно в самой форме делать вызов StartConvert() ! в отдельном файле StatusCopy.fmg: DEFINE WINDOW TEMPLATE AT 245 , 273 WIDTH 524 HEIGHT 233 TITLE "Пожалуйста подождите..." ICON "iProgramm" MODAL NOSYSMENU BACKCOLOR {255,255,255} ON INIT StartConvert() Вот такие мои грабли... Только сейчас понял как делать нужно на Минигуи...
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|