Плагин HintPlus.spf

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

Плагин HintPlus.spf

Postby dothen » Sat, 14 Apr 2018, 23:33

Плагин для Task Maker (tm.exe). К nnCron не подключать!
Умеет делать "активный" хинт, например таймер, часы, языковую панель ...
Работает без nnCron. Запускать можно из nnCron или из батника.

В папке "plugins" должны лежать плагины kbdlayout.spf и flashwindow.spf

Code: Select all
\ Файл:       hintplus.spf
\ Автор:      dothen
\ Дата:       15.12.2018
\ Версия:     1.01
\ Описание:
\ Плагин для Task Maker (tm.exe). К nnCron не подключать!
\ Умеет делать "активный" хинт, например таймер, часы, языковую панель ...
\ Работает без nnCron. Запускать можно из nnCron или из батника (примеры в конце).
\ http://www.nncron.ru/help/RU/add_info/command_line.htm#oneliner

\ Words:    Timer
\           Clock
\           Lang
\           LClock

\ Если подключать к tm.exe плагин сделанный для nncron.exe тогда надо
\ дабавить функции и слова используемые в плагине которых нет в словаре tm.exe.
WINAPI: GetDC USER32.DLL
WINAPI: GetClassNameA USER32.DLL
WINAPI: GetKeyboardLayout USER32.DLL
WINAPI: GetForegroundWindow USER32.DLL
WINAPI: GetWindowThreadProcessId USER32.DLL

REQUIRE CONSOLE-KBLT plugins\kbdlayout.spf
REQUIRE FLASHWINDOW-START plugins\flashwindow.spf

\ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
\ Доопределение класса SplashDialog.
\ Двойной левый клик закрывает хинт.
\ Взятие языка выполняем по таймеру.

0 VALUE HINT-HWND
0 VALUE HINT-DC
0 VALUE HXT

CREATE hintbuf 256 ALLOT

: >hintbuf> ( a1 u1 -- a2 u2 ) hintbuf ZPLACE hintbuf ASCIIZ> ;

SplashDialog REOPEN

0x00A3 CONSTANT WM_NCLBUTTONDBLCLK

 W: WM_NCLBUTTONDBLCLK BYE ;

: TextOutHint ( a u -- )
    SWAP 2 0 CommFontSize? 0= IF 8 ELSE 2/ THEN * +
    Center? IF vWidth @ 2/ ELSE 4 THEN
    SWAP ToPixels SWAP HINT-DC TextOutA DROP
;

 :NONAME { time event msg hwnd -- }
    HXT EXECUTE >hintbuf> TextOutHint
 ; WNDPROC: TimeOutProc2

 ' TimeOutProc2 ' TimeOutProc JMP

VM: CreatePopup
    POPUPMENU
      S" ID %GetCurrentThreadId%" EVAL-SUBST 0 MENUITEM
      S" Стартовал %FT-CUR FT>DD.MM.YYYY/hh:mm:ss%" EVAL-SUBST 0 MENUITEM
      S" Close" MI_CLOSE MENUITEM
    END-MENU
;

M: Text ( a u -- )
    hintbuf ZPLACE
    hintbuf vText !
;

;CLASS

: (TimeSplash2) ( a u -- )
    SplashDialog NEW TO msg
    1 msg vTimeOut !
    msg Text
    msg Create
    msg Show
    msg BringBack
    msg handle @ TO HINT-HWND
    msg handle @ GetDC TO HINT-DC
\    msg Flip
    msg MoveToHome
    msg Run
    msg Delete
;

: Hint2 ( a u xt -- ) TO HXT (TimeSplash2) BYE ;

\ http://downloads.sourceforge.net/spf/spf4-20.rar\devel\~nn\lib\win\winclass.f
\ "После создания окна со стилем CS_OWNDC, приложение может вызвать функцию
\ GetDC, GetDCEx, или  BeginPaint чтобы получить дескриптор, идентифицирующий
\ частный контекст устройства.
\ Частные контексты устройства - не часть системного КЭШа, и поэтому не должны
\ освобождаться после использования. Система автоматически удаляет частный
\ контекст устройства после того, как было разрушено последнее окно этого класса."
\ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

0 VALUE MINUTES
0 VALUE SEC

: (min>sec) ( min -- sec ) ABS 5999 MIN 60 * ; \ Максимум 99:59:00
: min>sec ( -- ) MINUTES (min>sec) TO SEC ;

: hh:mm:ss ( n n n -- a u )
    <#
        0 HOLD
        t:00 t:00 t00 0 0
    #>  1-
;

: sec>hh:mm:ss ( sec -- a u ) ABS 3600 /MOD SWAP 60 /MOD SWAP hh:mm:ss ;

CREATE HClockBuf 16 ALLOT

: HClock ( -- a u )
    GET-CUR-TIME Hour@ Min@ Sec@ hh:mm:ss HClockBuf ZPLACE HClockBuf ASCIIZ>
;

: msgtext ( -- az )
    S" Прошло " PAD ZPLACE
    MINUTES (min>sec) sec>hh:mm:ss PAD +ZPLACE
    CRLF PAD +ZPLACE
    S" Стоп в " PAD +ZPLACE
    HClock PAD +ZPLACE
    PAD
;

: msgtitle ( -- az ) S" Таймер (ID %GetCurrentThreadId%)" EVAL-SUBST DROP ;

GET-CUR-TIME Sec@ VALUE cursec

CREATE HTimerBuf 16 ALLOT

: HTimerText ( -- a u )
    SEC sec>hh:mm:ss HTimerBuf ZPLACE HTimerBuf ASCIIZ>
;

: HTimerSec ( -- )
    cursec GET-CUR-TIME Sec@ DUP TO cursec <> IF SEC 1- TO SEC THEN
;

WINAPI: GetWindowRect USER32.DLL
WINAPI: SetWindowPos  USER32.DLL
WINAPI: AnimateWindow USER32.DLL

0x00000001 CONSTANT SWP_NOSIZE
0x00000000 CONSTANT HWND_TOP
0x00000001 CONSTANT AW_HOR_POSITIVE
0x00000002 CONSTANT AW_HOR_NEGATIVE
0x00010000 CONSTANT AW_HIDE

: HTimer ( -- a u )
    HTimerSec HTimerText
    SEC 0=
    IF
      0x11105 msgtitle msgtext 0 MessageBoxA \ MB_RETRYCANCEL+MB_DEFBUTTON2+MB_SYSTEMMODAL+MB_SETFOREGROUND
      CASE
         4  OF min>sec 2DROP HTimerText ENDOF \ Повторить
         2  OF     BYE ENDOF \ Отмена
      ENDCASE
    THEN
    SEC -1 =
    IF
      msgtitle Z" #32770" FindWindowA >R
      0 0 0 0 SP@ R@ GetWindowRect DROP DROP ROT DROP SWAP 2>R
      AW_HIDE AW_HOR_NEGATIVE OR 300 HINT-HWND AnimateWindow DROP
      SWP_NOSIZE 0 0 2R> HWND_TOP HINT-HWND SetWindowPos DROP
      AW_HOR_POSITIVE 300 HINT-HWND AnimateWindow DROP
      50 R> FLASHWINDOW-ALL
    THEN
\ Даже когда висит MessageBoxA, из TimeOutProc каждую секунду вызывается HTimer.
;

: HLang ( -- a u ) CUR-KBLT GETKBLTNAME ;

CREATE HLClockBuf 16 ALLOT

\ Язык и время.
: HLClock ( -- a u )
    HLang HLClockBuf ZPLACE
    S"  " HLClockBuf +ZPLACE
    HClock HLClockBuf +ZPLACE
    HLClockBuf ASCIIZ>
;

\ : Timer  ( n -- ) TO MINUTES min>sec S" $$:$$:$$" ['] HTimer Hint2 ;
\ : Clock  ( -- )   S" $$:$$:$$"    ['] HClock Hint2 ;
\ : Lang   ( -- )   S" $$"          ['] HLang Hint2 ;
\ : LClock ( -- )   S" $$ $$:$$:$$" ['] HLClock Hint2 ;

: Timer  ( n -- ) TO MINUTES min>sec HTimer ['] HTimer Hint2 ;
: Clock  ( -- )   HClock  ['] HClock Hint2 ;
: Lang   ( -- )   HLang   ['] HLang Hint2 ;
: LClock ( -- )   HLClock ['] HLClock Hint2 ;


: RGB>BGR 256 /MOD 256 /MOD 0xFF AND SWAP 256 * + SWAP 65536 * + ;
: HINT-POS   ( x y -- ) CommPos 2! ;
: HINT-SIZE  ( w h -- ) CommSize 2! ;
: HINT-COLOR ( bg fg -- ) RGB>BGR CommColorFont ! RGB>BGR CommColorBg ! ;
: HINT-FONT  ( a u n -- ) CommFontSize ! CommFont ZPLACE ;

0x00FFFF CONSTANT Aqua    \ (морская волна) (cyan)
0x000000 CONSTANT Black   \ (черный)
0x0000FF CONSTANT Blue    \ (голубой)
0xFF00FF CONSTANT Fuchsia \ (фуксия) (magenta)
0x808080 CONSTANT Gray    \ (серый)
0x008000 CONSTANT Green   \ (зеленый)
0x00FF00 CONSTANT Lime    \ (ярко-зеленый)
0x800000 CONSTANT Maroon  \ (темно-бордовый)
0x000080 CONSTANT Navy    \ (темно-синий)
0x808000 CONSTANT Olive   \ (оливковый)
0x800080 CONSTANT Purple  \ (фиолетовый)
0xFF0000 CONSTANT Red     \ (красный)
0xC0C0C0 CONSTANT Silver  \ (серебряный)
0x008080 CONSTANT Teal    \ (серо-зеленый)
0xFFFFFF CONSTANT White   \ (белый)
0xFFFF00 CONSTANT Yellow  \ (желтый)

\ Можно сразу изменить дефолтные атрибуты хинта.
Maroon Yellow HINT-COLOR
S" Courier New" 26 HINT-FONT



\EOF

\ Пример
#( test_hint1
NoActive SingleInstance
: TMName2 ( -- a u ) S" %tm.exe% S%QUOTE% plugins\hintplus.spf%QUOTE% INCLUDED" EVAL-SUBST ;
0 VALUE tmr
: TIMER ( n -- )
    TO tmr
    START-APP: %TMName2% Silver Black HINT-COLOR 200 100 HINT-POS %tmr% Timer
;
: LANG ( -- )
    START-APP: %TMName2% 200 150 HINT-POS Lang
;
: CLOCK ( -- )
    START-APP: %TMName2% 200 200 HINT-POS Clock
;
: LCLOCK ( -- )
    START-APP: %TMName2% S" Courier New" 30 HINT-FONT Black Lime HINT-COLOR 200 250 HINT-POS LClock
;
Action:
    1 TIMER
    1000 PAUSE
    LCLOCK
    1000 PAUSE
    LANG
    1000 PAUSE
    CLOCK
    HINT: "Это штатный хинт."
)#


\ Пример для запуска из батника:
\ start /min D:\Program\nnCron\tm.exe S" plugins\hintplus.spf" INCLUDED Lang

\ Темы:
\ эксперимент по портированию HINT
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=10144
\ Обратный отсчёт через HINT
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=11645
\ Языковая панель средствами nncron
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=13002
\ Вопрос - Ответ
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=10306&start=180#p28551

dothen
 
Posts: 208
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин HintPlus.spf

Postby dothen » Sat, 15 Dec 2018, 15:18

Обновил плагин.
dothen
 
Posts: 208
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин HintPlus.spf

Postby ascerdfg1 » Fri, 15 Mar 2019, 09:02

Как подключать к tm.exe?
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: 565
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Плагин HintPlus.spf

Postby dothen » Fri, 15 Mar 2019, 21:47

ascerdfg1 wrote:Как подключать к tm.exe?

Плагин подключается к tm.exe при запуске (в командной строке словом INCLUDED) см. пример в конце плагина.
dothen
 
Posts: 208
Joined: Mon, 16 Mar 2015, 04:58


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron