アプリ版:「スタンプのみでお礼する」機能のリリースについて

たとえば、1秒おきにある配列に適当な数値を代入するにはどうすればよろしいでしょうか。Timer イベントの発生のさせ方はわかるのですが…。
ってか、これじゃ質問の意味がわかんないですよね。例えば、1秒毎にそのときの時刻の、「秒」を配列 a に格納することにします。。はじめた時間が 14:35:17 なら、
a(0) = 17, a(1) = 18, a(2) = 19, a(3) = 20,…
というようにしたいのです。これでなんとなく分かって頂けると思うんですが。よろしくお願いします。

A 回答 (2件)

「Timerイベント」が発生するたびに変数が初期化されるのが問題なのでしょうか?


でしたら、「Staticステートメントで変数を宣言する。」あるいは、モジュールの宣言セクションで「Publicキーワードを使って”パブリック変数”を宣言する。」を利用してみてはいかがでしょうか?
どちらの場合でも、途中で初期化(0?)する必要がある場合はそのタイミングが難しいかも知れません。
ご参考までに...
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。ただ、初心者なので、ちょっと難しいですね。もっともっとレベルアップしたいところです。

お礼日時:2001/10/17 16:50

ぼくはVBのタイマーを信用していません。


VBのタイマーは、タイマーイベントのロジックの処理の重さにより多少ずれているように思えるのです。(正確だというのであればごめんなさい)

ちなみにAPI関数でWINDOWSが起動してからどれだけの時間が経過したかなどの、時間に関するものがあります。そういったものを使用したほうが、コンパイル後のEXEが小さくすみます。

タイマーコントロールを使用しないやり方を記述します。

処理の簡単なながれとしては
直前の実行時から1秒経過したら、配列に値をセットするようになってます。
実行秒数は、配列要素の数だけの秒数を実行します。

----以下のソースを貼り付けてください。----
必要なものフォームとコマンドボタン1

Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private pTime    As Long
Private lngWork(5)  As Long
Private lngCount  As Long

Private Sub Command1_Click()
  Dim maxCount  As Long
  Dim lngGetTime As Long
  
  Command1.Enabled = False
  
  lngCount = LBound(lngWork)
  maxCount = UBound(lngWork)

  'とりあえず開始の時間を取得
  pTime = timeGetTime
  
  Do Until lngCount > maxCount
    DoEvents
    '時間を取得
    lngGetTime = timeGetTime
    '前回の処理から1秒経過すると以下の処理を行う
    If (lngGetTime - pTime >= 1000) Then
      lngWork(lngCount) = lngGetTime
      pTime = lngGetTime
      lngCount = lngCount + 1
    End If
  Loop
  MsgBox "end"
  Command1.Enabled = True
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。わざわざソースまで書いてくださって、とてもうれしいです。大変参考になりました。おかげさまで問題はほぼ解決できました。勉強になりました。

お礼日時:2001/10/17 16:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!