GUI формы: таймер обратного отчета

Обсуждение программ nnCron и nnCron LITE

GUI формы: таймер обратного отчета

Postby AlikasS » Fri, 10 Jul 2009, 17:25

собран на ннкрон
Timer.exe
исходники такие
Code: Select all
\ Качаем, подключаем
\ http://nncron-plugins.narod.ru/plugins/for-gui/forguiplugins.zip

MODULE: gui_timer
\ gui timer

\   FILEVERSION    1.001.0.RC2
: daterelize+ S"  v1.001.0.2 (2009.07.21 14:34 UTC+10)" S+ ;

0 VALUE разрешениеX
0 VALUE разрешениеY

: re2
WIN-EXIST: "Program Manager"
IF
WIN-HWND WIN-RECT DROP DROP TO разрешениеX TO разрешениеY
THEN
;

re2

CLASS: myWindow <SUPER FrameWindow

: save2num->adr ( Adr sound  -- adr ) HERE ROT , SWAP , DUP DP ! ;
: adr->2num ( adr -- Adr sound ) DUP @ SWAP CELL+ @ ;


\   DateTimePicker OBJ dtp1    :init a v 10 5 pos 40 10 size ;
   DatePicker OBJ dtp1    :init a v 10 5 pos 40 10 size ;

   var idtimer

TimePicker OBJ dtp2 :init a v 10 25 pos 40 10 size ;


\ CheckBox OBJ rest2    :init a v 60 5 pos 30 10 size S" --" text tabstop ;

CheckBox OBJ rest    :init a v 60 15 pos 30 10 size S" start" text tabstop ;

\ Button OBJ bt12    :init a v 95 0 pos 10 10 size S" m" text ;

CheckBox OBJ rest3    :init a v 10 65 pos 50 10 size S" оповещение" text tabstop ;

Edit OBJ edii :init a v 10 75 pos 90 10 size S" Время истекло" text ;

CheckBox OBJ rest4    :init a v 65 65 pos 40 10 size S" звук" text tabstop ;

Static OBJ st01             :init a v 10 45 pos 90 10 size ;

Static OBJ st02             :init a v 10 55 pos 80 10 size ;

ToolTip OBJ подсказка

:NONAME { \ a u -- }
adr->2num TO u TO a
30 0 DO
OSD-FONT: "Arial" 60 0x00FF0000
разрешениеX 2 / 150 -  разрешениеY 2 / 100 - OSD-POS
a ASCIIZ> OSD 3000 PAUSE OSD-CLEAR
u IF
 10 1 DO 100 12000 RANDOM BEEP LOOP
THEN
LOOP
a FREE DROP
; TASK: beee

\ M: clikbt12 WIN-TO-TRAY: "nnTimer" ;

M: restClick rest GetCheck IF rest Checked ELSE rest Unchecked THEN ;

\ M: rest2Click rest2 GetCheck IF rest2 Checked dtp1 Enable ELSE rest2 Unchecked dtp1 Disable THEN ;

M: rest3Click rest3 GetCheck IF rest3 Checked edii Show rest4 Show ELSE rest3 Unchecked edii  Hide rest4  Hide THEN ;

M: rest4Click rest4 GetCheck IF rest4 Checked ELSE rest4 Unchecked THEN ;

\ Обработчик таймерных событий
W: WM_TIMER
HERE
GetTickCount DUP 2DUP START-SEQUENCE
rest GetCheck IF
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 0 <
 IF
S" дата прошла" st01 SetText
 ELSE
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 24 * 60 * 60 *
   \ TIME&DATE 2DROP DROP SWAP ROT dtp2 Set \ установка времени в dtp2
    dtp2 Get SWAP 60 * + SWAP 60 * 60 * + +

   GET-CUR-TIME
   Sec@ Min@ 60 * + Hour@ 60 * 60 * +
   -
   DUP
   0 < IF
   DROP
   S" время прошло" st01 SetText
   ELSE
   DUP 0 = IF rest3 GetCheck IF edii GetText S>ZALLOC rest4 GetCheck save2num->adr beee START DROP  THEN THEN
   60 /MOD 60 /MOD \ s m h
   S" осталось %0 esPICK% час. %1 esPICK% мин. %2 esPICK% сек." EVAL-SUBST ( 1 PICK >R ) st01 SetText ( R> FREE DROP )
   THEN
 THEN
ELSE
S" отчет остановлен" st01 SetText
THEN
 GET-CUR-TIME S" текущее время %hh%:%mm%:%ss%" EVAL-SUBST ( 1 PICK >R ) st02 SetText ( R> FREE DROP )
DP !
;

VM: OnExit 0 ModalResult! ;

M: textF1
S" GUI timer " daterelize+
;

: processKeyDown
    wparam @
    CASE
    VK_F1 OF  textF1  MsgBox TRUE ENDOF
\    VK_F5 OF AddnnnFiles TRUE ENDOF
\    VK_ESCAPE OF btCLSClick TRUE ENDOF
FALSE SWAP
    ENDCASE
;

M: Create
Create
AutoCreate
edii Hide
rest4  Hide
[']  restClick rest OnClick !
\ [']  rest2Click rest2 OnClick !
[']  rest3Click rest3 OnClick !
[']  rest4Click rest4 OnClick !
\ [']  clikbt12 bt12 OnClick !
 ['] processKeyDown onKeyDown !
\ dtp1 Disable
0 1000 1 handle @ SetTimer idtimer ! \ Создаём таймер 1000=1 сек

 S" запустить отчет времени" SELF rest    SELF подсказка Create
 S" установить дату" SELF dtp1    SELF подсказка Create
 S" установить время" SELF dtp2    SELF подсказка Create
 S" включить текстовое оповещение" SELF rest3 SELF подсказка Create
 S" текст для оповещения" SELF edii SELF подсказка Create
 S" включить звуковое оповещение" SELF rest4    SELF подсказка Create
;

DESTR: free
idtimer @ handle @ KillTimer DROP   \ Убиваем таймер
free
;

;CLASS

EXPORT

: main12345 { \ w -- }
myWindow NEW TO w
WITH myWindow
\  w => vStyle @ WS_MAXIMIZEBOX OR w => vStyle ! \ активна клавиша развернуть на все окно

 w => vExStyle  @ 
\ WS_EX_TOOLWINDOW  XOR \ скрыть кл. свернуть и развернуть
 WS_EX_TOPMOST  XOR \ поверх всех
 WS_EX_CLIENTEDGE  XOR \ граница по краям формы
\ WS_EX_WINDOWEDGE XOR \ х.з.
\ WS_EX_ACCEPTFILES XOR
 w => vExStyle  !

0 w => Create
\ S" DateTimePicker 1" w => SetText
S" nnTimer" w => SetText
110 105 w => Center
w => Show
w => Run
w DELETE
ENDWITH
;
;MODULE
слово для запуска main12345
Last edited by AlikasS on Sun, 02 Aug 2009, 05:43, edited 1 time in total.
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby VoidVolker » Fri, 10 Jul 2009, 17:34

Ну в общем ничего так, вот только надпись лучше все таки отдельным окном делать. Да и зачем? Ннкрон то-же самое может. Причем в два клика и практически в любых количествах.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Fri, 10 Jul 2009, 17:36

смысл показать что на кроне мона все :-D
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Fri, 10 Jul 2009, 17:40

VoidVolker wrote:вот только надпись лучше ....
чёзанадпись?
P.S. заметил что значки и св-ва файла не кроновские? ;-)
кстати для сборки пользуюсь твоим Reg.FEX
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Fri, 10 Jul 2009, 18:17

VoidVolker wrote:.. Да и зачем? Ннкрон то-же самое может. Причем в два клика и практически в любых количествах.
эту (или другую GUI) форму в два клика? пример в студию....
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby VoidVolker » Fri, 10 Jul 2009, 18:33

AlikasS wrote:чёзанадпись?

Сообщение об окончании таймера - а то её "переклинивает" и она "застревает" в других окнах и не исчезает.
AlikasS wrote:эту (или другую GUI) форму в два клика? пример в студию....

Не форму, а функциональность: правый клик на иконке крона > добавить напоминание. А для GUI-форм для программ на спф использовал библиотеку WinLib - мне понравилась, очень удобная, особенно удобная фишка, это сетки - как таблица, указываешь ширину/высоту столбцов/строк и прямо в них создаешь разные формы. В общем здорово :)
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: GUI формы: таймер обратного отчета

Postby VoidVolker » Fri, 10 Jul 2009, 18:52

AlikasS wrote:P.S. заметил что значки и св-ва файла не кроновские? ;-)

Достаточно легко меняется внешними редакторами ресурсов.
AlikasS wrote:кстати для сборки пользуюсь твоим Reg.FEX

И как оно? Юзабельно?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: GUI формы: таймер обратного отчета

Postby Ilya » Fri, 10 Jul 2009, 20:29

VoidVolker wrote:
AlikasS wrote:чёзанадпись?

Сообщение об окончании таймера - а то её "переклинивает" и она "застревает" в других окнах и не исчезает.
AlikasS wrote:эту (или другую GUI) форму в два клика? пример в студию....

Не форму, а функциональность: правый клик на иконке крона > добавить напоминание. А для GUI-форм для программ на спф использовал библиотеку WinLib - мне понравилась, очень удобная, особенно удобная фишка, это сетки - как таблица, указываешь ширину/высоту столбцов/строк и прямо в них создаешь разные формы. В общем здорово :)

AlikasS - молодца !!! :)

WinLib - хорошая дока, простой - но (IMHO) сложнее код в плане модификации + сложнее создать "копию" интерфейса (прецедент: воял замену старой "сервисной" проги: http://www.forth.org.ru/~ilya/Progs/Otladchik_v3.exe).

+ за GUI от Николая - легко модифицируются
+ ООП - хоть и не люблю, но в данном случае весьма в тему!
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Thu, 06 Aug 2009, 15:53

немного обновил,
добавил возможность по окончанию таймера
усыплять комп, с возможностью задания времени пробуждения
Timer.exe
исходники такие:
Code: Select all
<%
\ Качаем, подключаем
\ http://nncron-plugins.narod.ru/plugins/for-gui/forguiplugins.zip

MODULE: gui_timer
\ gui timer

\   FILEVERSION    1.002.0.0
: daterelize+ S"  v1.002.0.0 (2009.08.06 16:15 UTC+10)" S+ ;

:NONAME WakeAfter ; TASK: wwakeafter

0 VALUE разрешениеX
0 VALUE разрешениеY

: re2
WIN-EXIST: "Program Manager"
IF
WIN-HWND WIN-RECT DROP DROP TO разрешениеX TO разрешениеY
THEN
;

re2

CLASS: myWindow <SUPER FrameWindow

   DatePicker OBJ dtp1    :init a v 10 5 pos 40 10 size ;

   var idtimer

TimePicker OBJ dtp2 :init a v 55 5 pos 40 10 size tabstop ;

CheckBox OBJ rest    :init a v 10 20 pos 45 10 size S" старт отчета" text tabstop ;

CheckBox OBJ rest3    :init a v 10 65 pos 50 10 size S" текст" text tabstop ;

Edit OBJ edii :init a v 10 75 pos 90 10 size S" время истекло" text tabstop ;

CheckBox OBJ rest4    :init a v 55 65 pos 40 10 size S" звук" text tabstop ;

Static OBJ st01             :init a v 10 35 pos 90 10 size ;

Static OBJ st02             :init a v 10 45 pos 80 10 size ;

ToolTip OBJ подсказка

CheckBox OBJ sleepchek    :init a v 10 90 pos 90 10 size S" выключение в спящий режим" text tabstop ;

DatePicker OBJ dtp3    :init a v 10 110 pos 40 10 size tabstop ;

TimePicker OBJ dtp4 :init a v 55 110 pos 40 10 size tabstop ;

Static OBJ sleepinit    :init a v 10 122 pos 90 15 size S" " text ;

GroupBox OBJ gb01      :init a v 3 0 pos 100 56 size S" " text ;

GroupBox OBJ gb1      :init a v 3 56 pos 100 86 size S" действия по таймеру" text ;

GroupBox OBJ sleeptitl    :init a v 5 100 pos 96 40 size S" дата и время пробуждения" text ;

:NONAME { \ a -- }
TO a
30 0 DO
OSD-FONT: "Arial" 60 0x00FF0000
разрешениеX 2 / 150 -  разрешениеY 2 / 100 - OSD-POS
a ASCIIZ> OSD 3000 PAUSE OSD-CLEAR
LOOP
a FREE DROP
; TASK: beee

:NONAME { \ u -- }
TO u
30 0 DO
u IF
 10 1 DO 100 12000 RANDOM BEEP LOOP
3000 PAUSE
THEN
LOOP
; TASK: beee2

M: restClick rest GetCheck IF rest Checked ELSE rest Unchecked THEN ;

M: rest3Click rest3 GetCheck IF rest3 Checked edii Show (  rest4 Show sleepchek Show ) ELSE rest3 Unchecked edii  Hide ( rest4  Hide  sleepchek Hide ) THEN ;

M: rest4Click rest4 GetCheck IF rest4 Checked ELSE rest4 Unchecked THEN ;

M: sleepchekClick sleepchek GetCheck
IF
sleepchek Checked sleeptitl Show dtp3 Show dtp4 Show
ELSE
sleepchek Unchecked sleeptitl Hide dtp3 Hide dtp4 Hide
THEN
;

M: settimersleep { \ ms ht -- }
GET-CUR-TIME
dtp3 Get ( год месяц число день-недели )
DROP
dtp4  Get  ( часы минуты секунды )
YMDHMS>FT FT-CUR FT- FT>SEC D>S 1000 *
DUP 0<
IF
DROP
ELSE
wwakeafter START DROP
THEN
1000 PAUSE
POWER-FORCE POWER-HIBERNATE
1 ModalResult!
;

\ Обработчик таймерных событий
W: WM_TIMER
HERE
GetTickCount DUP 2DUP START-SEQUENCE
rest GetCheck IF
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 0 <
 IF
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
S" дата таймера прошла" st01 SetText
S" " sleepinit SetText
 ELSE
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 24 * 60 * 60 *
   \ TIME&DATE 2DROP DROP SWAP ROT dtp2 Set \ установка времени в dtp2
    dtp2 Get SWAP 60 * + SWAP 60 * 60 * + +

   GET-CUR-TIME
   Sec@ Min@ 60 * + Hour@ 60 * 60 * +
   -
   DUP
   0 < IF
   DROP
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
   S" время таймера прошло" st01 SetText
   S" " sleepinit SetText
   ELSE
st01 ColorOFF
   DUP 0 =
   IF
      rest3 GetCheck IF edii GetText S>ZALLOC ( rest4 GetCheck save2num->adr ) beee START DROP  THEN    
       rest4 GetCheck IF TRUE  beee2 START DROP    THEN
      sleepchek GetCheck IF settimersleep THEN
   ELSE
   THEN
0xC9E0D COLOR_BTNFACE GetSysColor st01 Set-color
   60 /MOD 60 /MOD \ s m h
   S" осталось %0 esPICK% час. %1 esPICK% мин. %2 esPICK% сек." EVAL-SUBST ( 1 PICK >R ) st01 SetText ( R> FREE DROP )

      sleepchek GetCheck
      IF
      dtp3 Get DROP dtp4  Get YMDHMS>FT dtp1 Get DROP dtp2  Get YMDHMS>FT FT- FT>SEC D>S 0>
      IF
0xC9E0D COLOR_BTNFACE GetSysColor sleepinit Set-color
      \ время правильное
      S" включено пробуждение на,%crlf%" EVAL-SUBST
      dtp3 Get DROP dtp4  Get YMDHMS>FT FT>DD.MM.YYYY/hh:mm:ss S+ sleepinit SetText
      ELSE
0x0000FF COLOR_BTNFACE GetSysColor sleepinit Set-color
      S" не верные параметры,%crlf%комп уснет и не проснется" EVAL-SUBST sleepinit SetText
      THEN
      ELSE
      S" " sleepinit SetText
      THEN

   THEN
 THEN
ELSE
S" " sleepinit SetText
0xFF0000 COLOR_BTNFACE GetSysColor st01 Set-color
S" отчет остановлен" st01 SetText
THEN
 GET-CUR-TIME S" текущее время %hh%:%mm%:%ss%" EVAL-SUBST ( 1 PICK >R ) st02 SetText ( R> FREE DROP )
DP !
;

VM: OnExit 0 ModalResult! ;

M: textF1
S" GUI timer " daterelize+
;

: processKeyDown
    wparam @
    CASE
    VK_F1 OF  textF1  MsgBox TRUE ENDOF
FALSE SWAP
    ENDCASE
;

M: Create
Create
AutoCreate
edii Hide
 sleeptitl  Hide 
dtp3 Hide
dtp4 Hide
[']  restClick rest OnClick !
[']  rest3Click rest3 OnClick !
[']  rest4Click rest4 OnClick !
['] sleepchekClick  sleepchek OnClick !
['] processKeyDown onKeyDown !

0 1000 1 handle @ SetTimer idtimer ! \ Создаём таймер 1000=1 сек

 S" запустить отчет времени" SELF rest    SELF подсказка Create
 S" установить дату оповещения" SELF dtp1    SELF подсказка Create
 S" установить время оповещения" SELF dtp2    SELF подсказка Create
 S" включить текстовое оповещение" SELF rest3 SELF подсказка Create
 S" текст для оповещения" SELF edii SELF подсказка Create
 S" включить звуковое оповещение" SELF rest4    SELF подсказка Create
 S" выключение компьютера в спящий режим" SELF sleepchek    SELF подсказка Create
 S" установить дату пробуждения из спящего режима" SELF dtp3    SELF подсказка Create
 S" установить время пробуждения из спящего режима" SELF dtp4    SELF подсказка Create
;

DESTR: free
idtimer @ handle @ KillTimer DROP   \ Убиваем таймер
free
;

;CLASS

EXPORT

: main12345 { \ w -- }
myWindow NEW TO w
WITH myWindow
\  w => vStyle @ WS_MAXIMIZEBOX OR w => vStyle ! \ активна клавиша развернуть на все окно

 w => vExStyle  @ 
\ WS_EX_TOOLWINDOW  XOR \ скрыть кл. свернуть и развернуть
 WS_EX_TOPMOST  XOR \ поверх всех
 WS_EX_CLIENTEDGE  XOR \ граница по краям формы
\ WS_EX_WINDOWEDGE XOR \ х.з.
\ WS_EX_ACCEPTFILES XOR
 w => vExStyle  !

0 w => Create
\ S" DateTimePicker 1" w => SetText
S" nnTimer" w => SetText
110 160 w => Center
w => Show
w => Run
w DELETE
ENDWITH
;
;MODULE
%>

#( test-timer
NoLog
NoActive
Action:
main12345
)#

вид такой
Image
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby SaMM » Fri, 21 Aug 2009, 21:37

AlikasS а как, все это дело компилировал?
SaMM
 
Posts: 236
Joined: Fri, 25 Aug 2006, 12:33

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Fri, 11 Dec 2009, 17:38

Timer.exe
дальнейшее развитие что ли...
исходники
Code: Select all
\ Качаем, подключаем
\ http://nncron-plugins.narod.ru/plugins/for-gui/forguiplugins.zip

MODULE: gui_timer
\ gui timer

\   FILEVERSION    1.002.10.0
: daterelize+ S"  v1.002.10.0 (2009.12.11 15:45 UTC+10)" S+ ;

:NONAME WakeAfter ; TASK: wwakeafter

0 VALUE разрешениеX
0 VALUE разрешениеY

: re2
WIN-EXIST: "Program Manager"
IF
WIN-HWND WIN-RECT DROP DROP TO разрешениеX TO разрешениеY
THEN
;

re2

CLASS: myWindow <SUPER FrameWindow

   DatePicker OBJ dtp1    :init a v 10 5 pos 40 10 size tabstop ;

   var idtimer

   var rest   

TimePicker OBJ dtp2 :init a v 55 5 pos 40 10 size tabstop ;

\ CheckBox OBJ rest    :init a v 10 20 pos 45 10 size S" старт отсчета" text tabstop ;

Button OBJ st1 :init a v 10 20 pos 40 10 size S" старт" text tabstop ;

Button OBJ st2 :init a v 55 20 pos 40 10 size S" стоп" text tabstop ;

CheckBox OBJ rest3    :init a v 10 65 pos 24 10 size S" текст" text tabstop ;

Edit OBJ edii :init a v 10 75 pos 85 10 size S" " text tabstop ;

Button OBJ ediitest  :init a v 95 75 pos 5 10 size S" >" text tabstop ;

CheckBox OBJ rest4    :init a v 35 65 pos 22 10 size S" звук" text tabstop ;

CheckBox OBJ rest5    :init a v 58 65 pos 20 10 size S" OFF" text tabstop ;

CheckBox OBJ rest6    :init a v 79 65 pos 20 10 size S" cmd" text tabstop ;

Static OBJ st01             :init a v 10 35 pos 90 10 size ;

Static OBJ st02             :init a v 10 45 pos 80 10 size ;

ToolTip OBJ подсказка

CheckBox OBJ sleepchek    :init a v 10 90 pos 90 10 size S" выключение в спящий режим" text tabstop ;

DatePicker OBJ dtp3    :init a v 10 110 pos 40 10 size tabstop ;

TimePicker OBJ dtp4 :init a v 55 110 pos 40 10 size tabstop ;

Static OBJ sleepinit    :init a v 10 122 pos 90 15 size S" " text ;

GroupBox OBJ gb01      :init a v 3 0 pos 100 56 size S" " text ;

GroupBox OBJ gb1      :init a v 3 56 pos 100 86 size S" действия по таймеру" text ;

GroupBox OBJ sleeptitl    :init a v 5 100 pos 96 40 size S" дата и время пробуждения" text ;

:NONAME { \ a -- }
TO a
30 0 DO
OSD-FONT: "Arial" 60 0x00FF0000
разрешениеX 2 / 150 -  разрешениеY 2 / 100 - OSD-POS
a ASCIIZ> OSD 3000 PAUSE OSD-CLEAR
LOOP
a FREE DROP
; TASK: beee

:NONAME { \ u -- }
TO u
30 0 DO
u IF
 10 1 DO 100 12000 RANDOM BEEP LOOP
3000 PAUSE
THEN
LOOP
; TASK: beee2

\ M: restClick rest GetCheck IF rest Checked ELSE rest Unchecked THEN ;

M: btcl st1 Disable -1 rest ! st2 Enable ;
M: btc2 st2 Disable 0 rest ! st1 Enable ;

M: rest3Click rest3 GetCheck
IF rest3 Checked edii Show S" время истекло" edii SetText (  rest4 Show sleepchek Show ) rest6 Unchecked ediitest Hide
ELSE rest3 Unchecked edii  Hide ( rest4  Hide  sleepchek Hide ) THEN
;

M: rest4Click rest4 GetCheck IF rest4 Checked ELSE rest4 Unchecked THEN ;

M: rest5Click rest5 GetCheck
IF
rest5 Checked sleepchek Unchecked sleeptitl Hide dtp3 Hide dtp4 Hide
ELSE
rest5 Unchecked
THEN
;

M: sleepchekClick sleepchek GetCheck
IF
sleepchek Checked sleeptitl Show dtp3 Show dtp4 Show rest5 Unchecked
ELSE
sleepchek Unchecked sleeptitl Hide dtp3 Hide dtp4 Hide
THEN
;

M: cmdchekClick rest6    GetCheck
IF
rest6 Checked edii Show S" S%QUOTE% время истекло%QUOTE% MsgBox" EVAL-SUBST edii SetText rest3 Unchecked ediitest Show \ rest3 Disable
ELSE
rest6 Unchecked S" " edii SetText  edii Hide ediitest Hide  \ rest3 Enable
THEN
;

M: ediitestClick
edii GetText ['] EVALUATE CATCH ?DUP
IF  DROP 2DROP
0x0000FF COLOR_BTNFACE GetSysColor st01 Set-color
S" ошибка в выражении" st01 SetText
0x000000 0x0090FF  edii Set-color
ELSE
0x000000 0xAFFF00 edii Set-color
THEN
;

M: testmetod
rest6 Show
;

M: settimersleep { \ ms ht -- }
GET-CUR-TIME
dtp3 Get ( год месяц число день-недели )
DROP
dtp4  Get  ( часы минуты секунды )
YMDHMS>FT FT-CUR FT- FT>SEC D>S 1000 *
DUP 0<
IF
DROP
ELSE
wwakeafter START DROP
THEN
1000 PAUSE
POWER-FORCE POWER-HIBERNATE
1 ModalResult!
;

M: offcomputer
1000 PAUSE
FORCE-POWEROFF POWEROFF
1 ModalResult!
;

\ Обработчик таймерных событий
W: WM_TIMER
HERE
GetTickCount DUP 2DUP START-SEQUENCE
rest @ ( GetCheck ) IF
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 0 <
 IF
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
S" дата таймера прошла" st01 SetText
btc2
S" " sleepinit SetText
 ELSE
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 24 * 60 * 60 *
   \ TIME&DATE 2DROP DROP SWAP ROT dtp2 Set \ установка времени в dtp2
    dtp2 Get SWAP 60 * + SWAP 60 * 60 * + +

   GET-CUR-TIME
   Sec@ Min@ 60 * + Hour@ 60 * 60 * +
   -
   DUP
   0 < IF
   DROP
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
   S" время таймера прошло" st01 SetText
   btc2
   S" " sleepinit SetText
   ELSE
st01 ColorOFF
   DUP 0 =
   IF
      rest6 GetCheck IF edii GetText EVALUATE THEN
      rest3 GetCheck IF edii GetText S>ZALLOC ( rest4 GetCheck save2num->adr ) beee START DROP  THEN    
       rest4 GetCheck IF TRUE  beee2 START DROP    THEN
      sleepchek GetCheck IF settimersleep THEN
      rest5 GetCheck IF offcomputer THEN
   ELSE
   THEN
0xC9E0D COLOR_BTNFACE GetSysColor st01 Set-color
   60 /MOD 60 /MOD \ s m h
   S" осталось %0 esPICK% час. %1 esPICK% мин. %2 esPICK% сек." EVAL-SUBST ( 1 PICK >R ) st01 SetText ( R> FREE DROP )

      sleepchek GetCheck
      IF
      dtp3 Get DROP dtp4  Get YMDHMS>FT dtp1 Get DROP dtp2  Get YMDHMS>FT FT- FT>SEC D>S 0>
      IF
0xC9E0D COLOR_BTNFACE GetSysColor sleepinit Set-color
      \ время правильное
      S" включено пробуждение на,%crlf%" EVAL-SUBST
      dtp3 Get DROP dtp4  Get YMDHMS>FT FT>DD.MM.YYYY/hh:mm:ss S+ sleepinit SetText
      ELSE
0x0000FF COLOR_BTNFACE GetSysColor sleepinit Set-color
      S" не верные параметры,%crlf%комп уснет и не проснется" EVAL-SUBST sleepinit SetText
      THEN
      ELSE
      S" " sleepinit SetText
      THEN

   THEN
 THEN
ELSE
S" " sleepinit SetText
0xFF0000 COLOR_BTNFACE GetSysColor st01 Set-color
S" отсчет остановлен" st01 SetText
THEN
 GET-CUR-TIME S" текущее время %hh%:%mm%:%ss%" EVAL-SUBST ( 1 PICK >R ) st02 SetText ( R> FREE DROP )

\ секция открывающая скрытую функцию
dtp1 Get DROP  YMD>DATE 2010 01 01 YMD>DATE DATE- 0 =
dtp2 Get SWAP 60 * + SWAP 60 * 60 * + 0 = AND
IF testmetod THEN


DP !
;

VM: OnExit 0 ModalResult! ;

M: textF1
S" GUI timer " daterelize+
;

: processKeyDown
    wparam @
    CASE
    VK_F1 OF  textF1  MsgBox TRUE ENDOF
FALSE SWAP
    ENDCASE
;

M: Create
Create
AutoCreate
rest6 Hide
st2 Disable
edii Hide
ediitest Hide
0x000000 0xAFFF00 edii Set-color
 sleeptitl  Hide 
dtp3 Hide
dtp4 Hide
\ [']  restClick rest OnClick !
['] btcl st1 OnClick !
['] btc2 st2 OnClick !
[']  rest3Click rest3 OnClick !
[']  rest4Click rest4 OnClick !
[']  rest5Click rest5 OnClick !
['] sleepchekClick  sleepchek OnClick !
['] cmdchekClick rest6 OnClick !
['] ediitestClick ediitest OnClick !
['] processKeyDown onKeyDown !

0 1000 1 handle @ SetTimer idtimer ! \ Создаём таймер 1000=1 сек

\ S" запустить отсчет времени" SELF rest    SELF подсказка Create
 S" запустить отсчет времени" SELF st1    SELF подсказка Create
 S" остановить отсчет времени" SELF st2    SELF подсказка Create
 S" установить дату оповещения" SELF dtp1    SELF подсказка Create
 S" установить время оповещения" SELF dtp2    SELF подсказка Create
 S" включить текстовое оповещение" SELF rest3 SELF подсказка Create
 S" текст" SELF edii SELF подсказка Create
 S" включить звуковое оповещение" SELF rest4    SELF подсказка Create
 S" выключение питания компьютера" SELF rest5    SELF подсказка Create
 S" выключение компьютера в спящий режим" SELF sleepchek    SELF подсказка Create
 S" установить дату пробуждения из спящего режима" SELF dtp3    SELF подсказка Create
 S" установить время пробуждения из спящего режима" SELF dtp4    SELF подсказка Create
 S" выполнить forth и nncron команды" SELF rest6     SELF подсказка Create
 S" тест выполнения" SELF ediitest      SELF подсказка Create
;

DESTR: free
idtimer @ handle @ KillTimer DROP   \ Убиваем таймер
free
;

;CLASS

EXPORT

: main12345 { \ w -- }
myWindow NEW TO w
WITH myWindow
\  w => vStyle @ WS_MAXIMIZEBOX OR w => vStyle ! \ активна клавиша развернуть на все окно

 w => vExStyle  @ 
\ WS_EX_TOOLWINDOW  XOR \ скрыть кл. свернуть и развернуть
 WS_EX_TOPMOST  XOR \ поверх всех
 WS_EX_CLIENTEDGE  XOR \ граница по краям формы
\ WS_EX_WINDOWEDGE XOR \ х.з.
\ WS_EX_ACCEPTFILES XOR
 w => vExStyle  !
0 w => Create
\ S" DateTimePicker 1" w => SetText
S" nnTimer" w => SetText
110 160 w => Center
\ test IF w => testmetod THEN
w => Show
w => Run
w DELETE
ENDWITH
;
;MODULE


\EOF
#( test-timer
NoLog
NoActive
Action:
main12345
)#


P.S. при выставлении таймера на 2010 01 01 00 00 00
добавляется доп.функция запуска кроновских и фортовских команд
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby SaMM » Wed, 13 Jan 2010, 20:10

Привет AlikasS
Вроде рабочие EXE-шники начали получаться, но вопросы еще остались ...
Например, такой:
EXE-шники имеющие GUI, работают только если рядом в папке лежит wincon.dll
Посмотрел твои исходники - так и не понял почему твой таймер работает в любой
папке и на любом компьютере?
SaMM
 
Posts: 236
Joined: Fri, 25 Aug 2006, 12:33

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Thu, 14 Jan 2010, 02:59

SaMM wrote:Привет AlikasS
Вроде рабочие EXE-шники начали получаться, но вопросы еще остались ...
Например, такой:
EXE-шники имеющие GUI, работают только если рядом в папке лежит wincon.dll
Посмотрел твои исходники - так и не понял почему твой таймер работает в любой
папке и на любом компьютере?

вообще неплохо бы на код взглянуть,
но попробуй добавить в свой код
Code: Select all
: RES2 ( # -- a u )
DUP 200 = IF DROP S" ОК" EXIT THEN
DUP 201 = IF DROP S" Отмена" EXIT THEN
    res filename @ 0= IF DefRES res Load THEN
    res Get
;

 ' RES2 ' RES JMP   
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: GUI формы: таймер обратного отчета

Postby ascerdfg1 » Wed, 12 Sep 2012, 12:28

Timer.exe Файл номер 13045638 удален. File is removed.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: GUI формы: таймер обратного отчета

Postby AlikasS » Wed, 12 Sep 2012, 16:12

ascerdfg1 wrote:Timer.exe Файл номер 13045638 удален. File is removed.

собери сам, исходники такие :-D
не получится, пиши
Code: Select all
\ Качаем, подключаем
\ http://nncron-plugins.narod.ru/plugins/for-gui/forguiplugins.zip

\ расширение с форума
S" WakeAtDate" S" plugins\other\wakeup2.spf" REQUIRED
\ стандартный плагин
REQUIRE OSD-FONT: plugins\osd.spf

MODULE: gui_timer
\ gui timer

\   FILEVERSION    1.002.10.1
: daterelize+ S"  v1.002.10.1 (2010.12.08 10:00 UTC+10)" S+ ;

:NONAME WakeAfter ; TASK: wwakeafter

0 VALUE разрешениеX
0 VALUE разрешениеY

: re2
WIN-EXIST: "Program Manager"
IF
WIN-HWND WIN-RECT DROP DROP TO разрешениеX TO разрешениеY
THEN
;

re2

CLASS: myWindow <SUPER FrameWindow

   DatePicker OBJ dtp1    :init a v 10 5 pos 40 10 size tabstop ;

   var idtimer

   var rest   

TimePicker OBJ dtp2 :init a v 55 5 pos 40 10 size tabstop ;

\ CheckBox OBJ rest    :init a v 10 20 pos 45 10 size S" старт отсчета" text tabstop ;

Button OBJ st1 :init a v 10 20 pos 40 10 size S" старт" text tabstop ;

Button OBJ st2 :init a v 55 20 pos 40 10 size S" стоп" text tabstop ;

CheckBox OBJ rest3    :init a v 10 65 pos 24 10 size S" текст" text tabstop ;

Edit OBJ edii :init a v 10 75 pos 85 10 size S" " text tabstop ;

Button OBJ ediitest  :init a v 95 75 pos 5 10 size S" >" text tabstop ;

CheckBox OBJ rest4    :init a v 35 65 pos 22 10 size S" звук" text tabstop ;

CheckBox OBJ rest5    :init a v 58 65 pos 20 10 size S" OFF" text tabstop ;

CheckBox OBJ rest6    :init a v 79 65 pos 20 10 size S" cmd" text tabstop ;

Static OBJ st01             :init a v 10 35 pos 90 10 size ;

Static OBJ st02             :init a v 10 45 pos 80 10 size ;

ToolTip OBJ подсказка

CheckBox OBJ sleepchek    :init a v 10 90 pos 90 10 size S" выключение в спящий режим" text tabstop ;

DatePicker OBJ dtp3    :init a v 10 110 pos 40 10 size tabstop ;

TimePicker OBJ dtp4 :init a v 55 110 pos 40 10 size tabstop ;

Static OBJ sleepinit    :init a v 10 122 pos 90 15 size S" " text ;

GroupBox OBJ gb01      :init a v 3 0 pos 100 56 size S" " text ;

GroupBox OBJ gb1      :init a v 3 56 pos 100 86 size S" действия по достижению таймера" text ;

GroupBox OBJ sleeptitl    :init a v 5 100 pos 96 40 size S" дата и время пробуждения" text ;

:NONAME { \ a -- }
TO a
30 0 DO
OSD-FONT: "Arial" 60 0x00FF0000
разрешениеX 2 / 150 -  разрешениеY 2 / 100 - OSD-POS
a ASCIIZ> OSD 3000 PAUSE OSD-CLEAR
LOOP
a FREE DROP
; TASK: beee

:NONAME { \ u -- }
TO u
30 0 DO
u IF
 10 1 DO 100 12000 RANDOM BEEP LOOP
3000 PAUSE
THEN
LOOP
; TASK: beee2

\ M: restClick rest GetCheck IF rest Checked ELSE rest Unchecked THEN ;

M: btcl st1 Disable -1 rest ! st2 Enable ;
M: btc2 st2 Disable 0 rest ! st1 Enable ;

M: rest3Click rest3 GetCheck
IF rest3 Checked edii Show S" время истекло" edii SetText (  rest4 Show sleepchek Show ) rest6 Unchecked ediitest Hide
ELSE rest3 Unchecked edii  Hide ( rest4  Hide  sleepchek Hide ) THEN
;

M: rest4Click rest4 GetCheck IF rest4 Checked ELSE rest4 Unchecked THEN ;

M: rest5Click rest5 GetCheck
IF
rest5 Checked sleepchek Unchecked sleeptitl Hide dtp3 Hide dtp4 Hide
ELSE
rest5 Unchecked
THEN
;

M: sleepchekClick sleepchek GetCheck
IF
sleepchek Checked sleeptitl Show dtp3 Show dtp4 Show rest5 Unchecked
ELSE
sleepchek Unchecked sleeptitl Hide dtp3 Hide dtp4 Hide
THEN
;

M: cmdchekClick rest6    GetCheck
IF
rest6 Checked edii Show S" S%QUOTE% время истекло%QUOTE% MsgBox" EVAL-SUBST edii SetText rest3 Unchecked ediitest Show \ rest3 Disable
ELSE
rest6 Unchecked S" " edii SetText  edii Hide ediitest Hide  \ rest3 Enable
THEN
;

M: ediitestClick
edii GetText ['] EVALUATE CATCH ?DUP
IF  DROP 2DROP
0x0000FF COLOR_BTNFACE GetSysColor st01 Set-color
S" ошибка в выражении" st01 SetText
0x000000 0x0090FF  edii Set-color
ELSE
0x000000 0xAFFF00 edii Set-color
THEN
;

\ M: testmetod
\ rest6 Show
\ ;

M: settimersleep { \ ms ht -- }
GET-CUR-TIME
dtp3 Get ( год месяц число день-недели )
DROP
dtp4  Get  ( часы минуты секунды )
YMDHMS>FT FT-CUR FT- FT>SEC D>S 1000 *
DUP 0<
IF
DROP
ELSE
wwakeafter START DROP
THEN
1000 PAUSE
POWER-FORCE POWER-HIBERNATE
1 ModalResult!
;

M: offcomputer
1000 PAUSE
FORCE-POWEROFF POWEROFF
1 ModalResult!
;

\ Обработчик таймерных событий
W: WM_TIMER
HERE
GetTickCount DUP 2DUP START-SEQUENCE
rest @ ( GetCheck ) IF
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 0 <
 IF
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
S" дата таймера прошла" st01 SetText
btc2
S" " sleepinit SetText
 ELSE
 dtp1 Get DROP  YMD>DATE FT-CUR FT>DATE DATE- 24 * 60 * 60 *
   \ TIME&DATE 2DROP DROP SWAP ROT dtp2 Set \ установка времени в dtp2
    dtp2 Get SWAP 60 * + SWAP 60 * 60 * + +

   GET-CUR-TIME
   Sec@ Min@ 60 * + Hour@ 60 * 60 * +
   -
   DUP
   0 < IF
   DROP
0x6256FF COLOR_BTNFACE GetSysColor st01 Set-color
   S" время таймера прошло" st01 SetText
   btc2
   S" " sleepinit SetText
   ELSE
st01 ColorOFF
   DUP 0 =
   IF
      rest6 GetCheck IF edii GetText EVALUATE THEN
      rest3 GetCheck IF edii GetText S>ZALLOC ( rest4 GetCheck save2num->adr ) beee START DROP  THEN    
       rest4 GetCheck IF TRUE  beee2 START DROP    THEN
      sleepchek GetCheck IF settimersleep THEN
      rest5 GetCheck IF offcomputer THEN
   ELSE
   THEN
0xC9E0D COLOR_BTNFACE GetSysColor st01 Set-color
   60 /MOD 60 /MOD \ s m h
   S" осталось %0 esPICK% час. %1 esPICK% мин. %2 esPICK% сек." EVAL-SUBST ( 1 PICK >R ) st01 SetText ( R> FREE DROP )

      sleepchek GetCheck
      IF
      dtp3 Get DROP dtp4  Get YMDHMS>FT dtp1 Get DROP dtp2  Get YMDHMS>FT FT- FT>SEC D>S 0>
      IF
0xC9E0D COLOR_BTNFACE GetSysColor sleepinit Set-color
      \ время правильное
      S" включено пробуждение на,%crlf%" EVAL-SUBST
      dtp3 Get DROP dtp4  Get YMDHMS>FT FT>DD.MM.YYYY/hh:mm:ss S+ sleepinit SetText
      ELSE
0x0000FF COLOR_BTNFACE GetSysColor sleepinit Set-color
      S" не верные параметры,%crlf%комп уснет и не проснется" EVAL-SUBST sleepinit SetText
      THEN
      ELSE
      S" " sleepinit SetText
      THEN

   THEN
 THEN
ELSE
S" " sleepinit SetText
0xFF0000 COLOR_BTNFACE GetSysColor st01 Set-color
S" отсчет остановлен" st01 SetText
THEN
 GET-CUR-TIME S" текущее время %hh%:%mm%:%ss%" EVAL-SUBST ( 1 PICK >R ) st02 SetText ( R> FREE DROP )

\ секция открывающая скрытую функцию
\ dtp1 Get DROP  YMD>DATE 2010 01 01 YMD>DATE DATE- 0 =
\ dtp2 Get SWAP 60 * + SWAP 60 * 60 * + 0 = AND
\ IF testmetod THEN


DP !
;

VM: OnExit 0 ModalResult! ;

M: textF1
S" GUI timer " daterelize+
;

: processKeyDown
    wparam @
    CASE
    VK_F1 OF  textF1  MsgBox TRUE ENDOF
FALSE SWAP
    ENDCASE
;

M: Create
Create
AutoCreate
\ rest6 Hide
st2 Disable
edii Hide
ediitest Hide
0x000000 0xAFFF00 edii Set-color
 sleeptitl  Hide 
dtp3 Hide
dtp4 Hide
\ [']  restClick rest OnClick !
['] btcl st1 OnClick !
['] btc2 st2 OnClick !
[']  rest3Click rest3 OnClick !
[']  rest4Click rest4 OnClick !
[']  rest5Click rest5 OnClick !
['] sleepchekClick  sleepchek OnClick !
['] cmdchekClick rest6 OnClick !
['] ediitestClick ediitest OnClick !
['] processKeyDown onKeyDown !

0 1000 1 handle @ SetTimer idtimer ! \ Создаём таймер 1000=1 сек

 S" запустить отсчет времени таймером" SELF st1    SELF подсказка Create
 S" остановить отсчет времени таймером" SELF st2    SELF подсказка Create
 S" установить дату срабатывания таймера" SELF dtp1    SELF подсказка Create
 S" установить время срабатывания таймера" SELF dtp2    SELF подсказка Create
 S" включить текстовое оповещение" SELF rest3 SELF подсказка Create
 S" текст" SELF edii SELF подсказка Create
 S" включить звуковое оповещение" SELF rest4    SELF подсказка Create
 S" выключение питания компьютера" SELF rest5    SELF подсказка Create
 S" выключение компьютера в спящий режим" SELF sleepchek    SELF подсказка Create
 S" установить дату пробуждения из спящего режима" SELF dtp3    SELF подсказка Create
 S" установить время пробуждения из спящего режима" SELF dtp4    SELF подсказка Create
 S" выполнить forth и nncron команды" SELF rest6     SELF подсказка Create
 S" тест выполнения" SELF ediitest      SELF подсказка Create
;

DESTR: free
idtimer @ handle @ KillTimer DROP   \ Убиваем таймер
free
;

;CLASS

EXPORT

: main12345 { \ w -- }
myWindow NEW TO w
WITH myWindow
\  w => vStyle @ WS_MAXIMIZEBOX OR w => vStyle ! \ активна клавиша развернуть на все окно

 w => vExStyle  @ 
\ WS_EX_TOOLWINDOW  XOR \ скрыть кл. свернуть и развернуть
 WS_EX_TOPMOST  XOR \ поверх всех
 WS_EX_CLIENTEDGE  XOR \ граница по краям формы
\ WS_EX_WINDOWEDGE XOR \ х.з.
\ WS_EX_ACCEPTFILES XOR
 w => vExStyle  !
0 w => Create
\ S" DateTimePicker 1" w => SetText
S" Timer" w => SetText
110 160 w => Center
\ test IF w => testmetod THEN
w => Show
w => Run
w DELETE
ENDWITH
;
;MODULE


\EOF
#( test-timer
NoLog
NoActive
Action:
main12345
)#
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests