プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

[HSP]キッチンタイマー - hspKitchenTimer.exe

2019年07月12日 23時12分00秒 | HSP講座

スクリプト言語の HSP については、公式ホームページの「HSPTV!」をどうぞ。(戻る)


100円ショップで売ってそうなミニ・タイマー&ストップウォッチを真似てみました。
表示が「00:00」のときに[START]ボタンを押すとストップウォッチ機能になり、
テンキーで入力してから[START]ボタンを押すとキッチンタイマー機能になります。
このフリーソフトは、2019年07月13日に株式会社 Vector に登録、その後の2019年07月24日に公開されました。
詳しい事は「[HSP]キッチンタイマー」を読んで下さい。

スクリーン・ショット

基本情報

  • 【名前】キッチンタイマー Version 1.0.0
  • 【環境】Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10
  • 【機種】DOS/V互換機
  • 【種別】フリーソフト
  • 【言語】HSP(Ver.3.51)
  • 【作者】科学太郎

※ダウンロードは、上記の【キッチンタイマー】をクリックして下さい。

開発中のソースコード(Ver.0.50)

下記のソースコードは、開発中の基本サンプル・ソースです。
そのため株式会社 Vector で公開してる「キッチンタイマー」のソースコードではありません。
公開中の「キッチンタイマー」は、下記のソースコードをもとに次の様なものが追加されてます。

  1. デザイン面の強化
  2. マウス処理の追加
  3. 画面外補正の追加
  4. 画面端吸着の追加
  5. 最前面表示の追加
  6. 色選択メニューの追加
//------------------------------------------------------------------------------
// キッチンタイマー by 科学太郎
//==============================================================================
// 新規作成日:2019-07-10 (水) 23:15:00
// 最終更新日:2019-07-11 (木) 02:12:00
//------------------------------------------------------------------------------
#cmpopt varinit     1
#packopt hide       1
#packopt name       __FILE__
#
#include "User32.as"
#include "Kernel32.as"

//--------------------------------------
// 記号定数(API定数)
//--------------------------------------
#const global NULL                      0
#const global WM_CLOSE                  $00000010
#const global WM_TIMER                  $00000113
#const global WM_LBUTTONUP              $00000202
#const global WM_RBUTTONUP              $00000205
#const global WM_SYSKEYDOWN             $00000104
#
#const global GWL_STYLE                 $FFFFFFF0
#const global BS_MULTILINE              $00002000
#
#const global VK_F01                    $00000070
#const global VK_F02                    $00000071
#const global VK_F03                    $00000072
#const global VK_F04                    $00000073
#const global VK_F05                    $00000074
#const global VK_F06                    $00000075
#const global VK_F07                    $00000076
#const global VK_F08                    $00000077
#const global VK_F09                    $00000078
#const global VK_F10                    $00000079
#const global VK_F11                    $0000007A
#const global VK_F12                    $0000007B

//--------------------------------------
// 記号定数
//--------------------------------------
#const WID_MAIN             (0)         ;ウインドウID
#const TID_STOPWATCH        (1)         ;タイマーID
#const TMS_STOPWATCH        (100)       ;タイマー間隔(ms)

//--------------------------------------
// 列挙定数(ボタンID)
//--------------------------------------
#enum BID_KEY1=0
#enum BID_KEY2
#enum BID_KEY3
#enum BID_KEY4
#enum BID_KEY5
#enum BID_KEY6
#enum BID_KEY7
#enum BID_KEY8
#enum BID_KEY9
#enum BID_START
#enum BID_KEY0
#enum BID_STOP

//--------------------------------------
// 記号定数(サイズ)
//--------------------------------------
#const FONT_SIZE        (66)
#const FONT_HALF        (FONT_SIZE/2)
#
#const MARGIN_XSIZE     (20)
#const MARGIN_YSIZE     (20)
#
#const SPACE_XSIZE      (20)
#const SPACE_YSIZE      (20)
#
#const PUSH_XSIZE       (50)
#const PUSH_YSIZE       (50)
#
#const DISP_BORDER      (3)
#const DISP_XSIZE       ((PUSH_XSIZE+SPACE_XSIZE)*3-SPACE_XSIZE)
#const DISP_YSIZE       (80)
#
#const NUMB_XPOS        ((DISP_XSIZE-5*FONT_HALF)/2)
#const NUMB_YPOS        ((DISP_YSIZE-  FONT_SIZE)/2)
#
#const WINDOW_XSIZE     (MARGIN_XSIZE*2+DISP_XSIZE)
#const WINDOW_YSIZE     (MARGIN_YSIZE*2+DISP_YSIZE+(PUSH_YSIZE+SPACE_YSIZE)*4)

//--------------------------------------
// 記号定数(桃色)
//--------------------------------------
#define RGB_BACK_TXCOLOR    $66,$00,$00
#define RGB_BACK_BKCOLOR    $DD,$66,$99
#define RGB_DISP_LTCOLOR    $FF,$00,$66
#define RGB_DISP_DKCOLOR    $99,$00,$33
#define RGB_MOJI_TXCOLOR    $FF,$00,$66
#define RGB_MOJI_SHCOLOR    $66,$00,$33

//--------------------------------------
// メイン部
//--------------------------------------
*Init
    ;ストップウォッチ
    dim nStart                          ;開始時間(ms)
    dim nCount                          ;経過時間(ms)
    dim bMode                           ;モード状態(0=停止,1=計測中)
    ;キッチンタイマー
    dim nPreset                         ;タイマー時間(ms)
    dim nMin                            ;タイマー要素(分)
    dim nSec                            ;タイマー要素(秒)
    dim nMSec                           ;タイマー要素(ミリ秒)
    dim bInput                          ;数字キー状態(0=なし,1=入力中)
*Main
    screen WID_MAIN,WINDOW_XSIZE,WINDOW_YSIZE,SCREEN_NORMAL|SCREEN_FIXEDSIZE|SCREEN_HIDE
    syscolor 15:boxf:color:title "科学太郎"
    SetTimer hWnd,TID_STOPWATCH,TMS_STOPWATCH,NULL
    ;設定
    oncmd   gosub *OnTimer,         WM_TIMER
    oncmd   gosub *OnLButtonUp,     WM_LBUTTONUP
    oncmd   gosub *OnRButtonUp,     WM_RBUTTONUP
    oncmd   gosub *OnSysKeyDown,    WM_SYSKEYDOWN
    onkey   gosub *OnKeyBoard
    onexit  gosub *OnQuit
    ;配置
    s="1","2","3","4","5","6","7","8","9","START","0","STOP\nRESET"
    objsize PUSH_XSIZE,PUSH_YSIZE
    objmode 2
    foreach s
        if(cnt==BID_START)or(cnt==BID_STOP):n=16:else:n=40
        x=(cnt\3)*(PUSH_XSIZE+SPACE_XSIZE)+(MARGIN_XSIZE)
        y=(cnt/3)*(PUSH_YSIZE+SPACE_YSIZE)+(MARGIN_YSIZE+DISP_YSIZE+SPACE_YSIZE)
        pos x,y:font "HG明朝E",n:button gosub s(cnt), *PushExecute
        h=objinfo_hwnd(stat)
        GetWindowLong h,GWL_STYLE
        SetWindowLong h,GWL_STYLE,stat|BS_MULTILINE
    loop
    objmode 1
    ;表示
    font MSGOTHIC,FONT_SIZE:DrawDisplay
    gsel WID_MAIN,1
    stop
//--------------------------------------
// タイマー・イベントの処理
//--------------------------------------
*OnTimer
    if(wParam==TID_STOPWATCH){
        redraw 0
        DrawDisplay
        redraw 1
    }
    return 0
//--------------------------------------
// ディスプレイの描画
//--------------------------------------
#deffunc DrawDisplay
    ;ストップウォッチ
    if(bMode):n=(nCount+(GetTickCount()-nStart)):else:n=nCount
    ;キッチンタイマー
    if(nPreset){
        n=(nPreset-n)
        if(n<0):CmdReset:dialog "時間ですよ~。",0,"確認":return
    }
    ;分離
    if(bInput==0){
        nMSec   =(n\1000)   :n/=1000
        nSec    =(n\60)     :n/=60
        nMin    =(n\100)    :n/=100
    }
    ;作成
    if(bMode==0):c=':':else:if(nMSec<500):c=':':else:c=$20
    s=strf("%02d%c%02d",nMin,c,nSec)
    ;描画
    cx=(MARGIN_XSIZE)
    cy=(MARGIN_YSIZE)
    ex=(MARGIN_XSIZE+DISP_XSIZE-1)
    ey=(MARGIN_YSIZE+DISP_YSIZE-1)
    ;表示器
    n=DISP_BORDER
    color RGB_BACK_BKCOLOR:boxf
    color RGB_DISP_LTCOLOR:boxf(cx+0),(cy+0),(ex-0),(ey-0)
    color RGB_DISP_DKCOLOR:boxf(cx+n),(cy+n),(ex-n),(ey-n)
    ;数字
    color RGB_MOJI_SHCOLOR:pos(cx+NUMB_XPOS+2),(cy+NUMB_YPOS+2):mes s
    color RGB_MOJI_TXCOLOR:pos(cx+NUMB_XPOS+0),(cy+NUMB_YPOS+0):mes s
    return
//--------------------------------------
// プッシュボタンの処理
//--------------------------------------
*PushExecute
    switch(stat)
        ;数字キー
        case BID_KEY0:      SetTenKey 0     :swbreak
        case BID_KEY1:      SetTenKey 1     :swbreak
        case BID_KEY2:      SetTenKey 2     :swbreak
        case BID_KEY3:      SetTenKey 3     :swbreak
        case BID_KEY4:      SetTenKey 4     :swbreak
        case BID_KEY5:      SetTenKey 5     :swbreak
        case BID_KEY6:      SetTenKey 6     :swbreak
        case BID_KEY7:      SetTenKey 7     :swbreak
        case BID_KEY8:      SetTenKey 8     :swbreak
        case BID_KEY9:      SetTenKey 9     :swbreak
        ;実行キー
        case BID_START:     CmdStart        :swbreak
        case BID_STOP:      CmdResetStop    :swbreak
    swend
    return
//--------------------------------------
// スタート/ストップの処理
//--------------------------------------
#deffunc CmdStartStop
    if(bMode):CmdStop:else:CmdStart
    return
//--------------------------------------
// ストップ/リセットの処理
//--------------------------------------
#deffunc CmdResetStop
    if(bMode):CmdStop:else:CmdReset
    return
//--------------------------------------
// スタートの処理
//--------------------------------------
#deffunc CmdStart
    if(bInput){
        ;補正
        nMin    =limit(nMin,0,99)
        nSec    =limit(nSec,0,59)
        nMSec   =0
        ;合成
        nPreset =(nMin*60+nSec)*1000
        nStart  =0
        nCount  =0
        bMode   =0
        bInput  =0
    }
    if(bMode==0){
        bMode=1:nStart=GetTickCount()
    }
    return
//--------------------------------------
// ストップの処理
//--------------------------------------
#deffunc CmdStop
    if(bMode){
        bMode=0:nCount+=(GetTickCount()-nStart)
    }
    return
//--------------------------------------
// リセットの処理
//--------------------------------------
#deffunc CmdReset
    if(nStart==0)and(nCount==0)and(bMode==0){
        nPreset =0
        nMin    =0
        nSec    =0
        nMSec   =0
        bInput  =0
    }
    else{
        nStart  =0
        nCount  =0
        bMode   =0
    }
    return
//--------------------------------------
// 全リセットの処理
//--------------------------------------
#deffunc CmdClear
    ;ストップウォッチ
    nStart  =0
    nCount  =0
    bMode   =0
    ;キッチンタイマー
    nPreset =0
    nMin    =0
    nSec    =0
    nMSec   =0
    bInput  =0
    return
//--------------------------------------
// 数字キーの入力
//--------------------------------------
#deffunc SetTenKey int _ten_
    if(bMode):return
    ;入力
    nPreset=(nMin*100+nSec)
    nPreset=(nPreset*10)+(_ten_)
    nPreset=(nPreset\10000)
    ;分離
    nMSec   =(0)
    nSec    =(nPreset\100):nPreset/=100
    nMin    =(nPreset\100):nPreset/=100
    bInput  =1
    return
//--------------------------------------
// プリセットの設定
//--------------------------------------
#deffunc SetPreset int _m_,int _s_
    if(bMode):return
    ;代入
    nMin    =limit(_m_,0,99)
    nSec    =limit(_s_,0,99)
    nMSec   =0
    bInput  =1
    return
//--------------------------------------
// アップ・ダウンの設定
//--------------------------------------
#deffunc SetUpDown int _m_,int _s_
    if(bMode):CmdStop:return
    ;計算
    nMin    +=(_m_):nMin\=100
    nSec    +=(_s_):nSec\=100
    nMSec    =0
    if(bInput):return
    ;補正
    nMin    \=100
    nSec    \=60
    ;合成
    nPreset =(nMin*60+nSec)*1000
    nStart  =0
    nCount  =0
    bMode   =0
    return
//--------------------------------------
// スタート/ストップの処理
//--------------------------------------
*OnLButtonUp
    CmdStartStop
    return 0
//--------------------------------------
// ストップ/リセットの処理
//--------------------------------------
*OnRButtonUp
    CmdResetStop
    return 0
//--------------------------------------
// [F10]キーの処理
//--------------------------------------
*OnSysKeyDown
    if(wParam==VK_F10){
        SetPreset 10,0
        CmdStart
    }
    return 0
//--------------------------------------
// キーボードの割り込み処理
//--------------------------------------
*OnKeyBoard
    ;[F01]~[F12]キー
    if(VK_F01<=wParam)and(wParam<=VK_F12){
        SetPreset(wParam-VK_F01+1),0
        CmdStart
        return
    }
    ;[数字]キー
    if('0'<=iParam)and(iParam<='9'){
        SetTenKey(iParam-'0')
        return
    }
    ;その他
    if(iParam==$0D):CmdStartStop                    :return;[RET]スタート/ストップ
    if(iParam==$20):CmdResetStop                    :return;[SPC]ストップ/リセット
    if(iParam==$1B):CmdClear                        :return;[ESC]全クリア
    if(iParam=='C'):CmdClear                        :return;[ C ]全クリア
    if(iParam=='M'):SetUpDown 1,0                   :return;[ M ]分アップ
    if(iParam=='S'):SetUpDown 0,1                   :return;[ S ]秒アップ
    if(iParam=='Q'):PostMessage hWnd,WM_CLOSE,0,0   :return;[ Q ]終了
    return
//--------------------------------------
// 終了時の割り込み処理
//--------------------------------------
*OnQuit
    oncmd 0
    KillTimer hWnd,TID_STOPWATCH
    end
    return
//------------------------------------------------------------------------------
// End of sample356.hsp
//------------------------------------------------------------------------------
  • 上記のソースコードを HSP のスクリプト・エディタにコピー&ペーストして「F5」キーを押すと実行されます。
  • 同様にコピー&ペーストして「名前を付けて保存」した後に「F9」キーを押すと実行ファイルが作成されます。

関連記事



コメント (4)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« HSPの広場 - トップページ | トップ | [HSP]タスク・ダイアログの... »
最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
お願いですm(__)m (大佐)
2019-10-14 14:46:28

はじめまして。m(__)m

PC用としてテンキー入力出来、且つシンプルなソフトを探しており辿り着きました「キッチンタイマー」

理想に近いソフトなのですが・・・一点だけ要望があります。

それは、アラーム音の種類です。

Windowsベースのあまりにもシンプルで短い音源なので、出来れば出来れば2~3種類くらいの中から選べるようにして欲しいです。
「ポーン」というデフォルトの音では、少しウトウトしてたり、よそ事をしていたら全く気付きません(^_^;)

是非機能追加のご検討宜しくお願いしますm(__)m
返信する
Re:お願いですm(__)m (ブログ管理人)
2019-10-15 20:44:51
> 「ポーン」というデフォルトの音では、少しウトウトしてたり、よそ事をしていたら全く気付きません(^_^;)
同感です。

> 是非機能追加のご検討宜しくお願いしますm(__)m
そのつもりでバージョン・アップ時に設定ウインドウを設けることにしてます。

・やっと「キッチンタイマー」が公開されました
http://hsp.tv/play/pforum.php?mode=all&num=87945

こちらの掲示板でも同じような要望がありました。
いろいろと見落としていた機能があり、見直す必要があるのため、
今年の12月31日までには、バージョン・アップする予定です。

ほかにも要望がありましたら上記の掲示板に書き込むか、
このページのコメントに書き込んでください。

ただし、なるべくシンプルにしたいため、
すべての要望を取り入れるわけではありません。
参考にしたいので意見を募集します。という感じです。

バージョン・アップした場合は、このページのコメントで報告します。

以上。
返信する
Unknown (大佐)
2019-10-16 23:12:52
そうですよね~あれこれ盛り込み過ぎて、シンプルさが無くなったらソフトの価値も半減しちゃいますよね(^^;)

私の希望は「音源の種類」だけでございます…

お忙しいと思いますが、是非宜しくお願いしますm(__)m
返信する
ありがとう (お礼)
2023-10-19 16:00:11
これを作ってくださって本当にありがとうございます。いろいろなタイマーを使ってみては、使い勝手が悪くあきらめていましたところ、こちらのとても使いやすいタイマーを見つけてハマってしまいました。
こんなに探し回って分かりました、これは素晴らしいと思います!!
返信する

コメントを投稿

HSP講座」カテゴリの最新記事