今、Visual Basic でスライドショーのプログラムを作っています。
その中で、プログラムの一時停止(それに伴う再開)という事をしたいのですが、どのようにすればよいかわかりません。
教えて下さい。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

Enabledの操作で充分だと思いますよ。



ちなみに先ほどの方法の処理を書くと(フラグの1と0の値が変わってますが・・・)

Private bytFlg As Byte

Private Sub cmdPause_Click()
  bytFlg = 0
End Sub

Private Sub cmdPlay_Click()
  bytFlg = 1
End Sub

Private Sub Form_Load()
  bytFlg = 0
End Sub

Private Sub Timer1_Timer()
  If bytFlg = 1 Then
    'ここに画像読み込み処理
  End If
End Sub

とするとできます。
しかし、画像の読み込みを必要としないときもタイマーが動いているので、Windowsに負荷がかかります。

だからgotkatさんの今までのEnabledの操作で充分です
    • good
    • 0
この回答へのお礼

丁寧に回答していただいてありがとうございます。

お礼日時:2001/10/27 12:40

#2の発言のARCに質問です。



>Sleep 100 '100ミリ秒待機する
とありますが、これは意味があるのですか?
VBの処理にロックがかかるだけで、意味がないのでは?
    • good
    • 0

>スライドショーのプログラム


とあるので、きっとタイマーコントロールで定期的に画像を更新しているのでは?
もしその場合#1さんの発言の方がいいかも?

PublicもしくはPrivateでフラグの宣言
フラグのデフォルト=0
タイマーイベントでフラグが0の時以外は処理を抜ける。
一時停止ボタンの機能:フラグ=1
一時停止解除ボタンの機能:フラグ=0

もしさっきの推測がはずれならば、どのようにスライドショーの画面の更新が行われているかが気になりますね。
    • good
    • 0
この回答へのお礼

ご推測の通りです。説明不足ですみません。
僕のプログラムがまずいらしく、上述の方法がうまく出来ません。
それで、
一時停止ボタンの機能:Timer1.Enabled=False
一時停止解除ボタンの機能:Timer1.Enabled=True
としたら出来ました。これらのボタンを押して欲しくないときは、
Command1.Enabled=False
としています。このやり方でいいんでしょうか?

まだVisual Basicを始めたばかりなので、参考になりました。
ありがとうございます。

お礼日時:2001/10/27 09:46

途中でSleepを挟んだ方がいいかも。



(Genaral) (Declarations)に

Private Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)

って行を追加しまして、

Do Until 終了条件
 Sleep 100 '100ミリ秒待機する
 DoEvents
Loop

のようにします。
    • good
    • 0

>一時停止


ボタンクリックで、
val_restart = 0
do
  doevents
  if val_restart = 1 then
exit do
end if
loop

>再開
 ボタンクリックで
 val_restart = 1

やってることわかります?
(試してないので、自信なし)
    • good
    • 0
この回答へのお礼

ありがとうございます。
さっそくやってみます。

お礼日時:2001/10/26 21:42

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB Loopを一時停止し再開あるいはキャンセル

Loopで処理を回しています。処理件数が多く、処理の途中で一時停止させ、DataGridViewに表示されている処理結果を目で確認ないしマウスでコピーしてから、処理を再開ないしキャンセルして終了させる仕様を作成中です。

MessageBoxを使用すれば、Loopは一時停止出来たのですが、MessageBoxだとDataGridView上の処理結果をマウスでコピーなど出来ません。

そこで、MessageBoxを使用せずに、以下のコマンドを書いてみたのですが、最初のStopFlag=Trueが効くだけで次のコマンドは一瞬で処理されLoopが続いてしまいます。いかにすればLoopを一時停止できるか教えてください。

<変数宣言>
Public StopFlag As Boolean
Public CancelFlag As Boolean
<前処理>
TextBox1.Text = "処理待ち" 'テキストボックスに処理ステータスを表しています。
TextBox1.Refresh()

<処理>
Do
Me.Cursor = Cursors.WaitCursor '砂時計開始
TextBox1.Text = "処理中" ’ステータスを処理中として表示
TextBox1.Refresh()

Application.DoEvents() 'ストップボタンを押下したらここでDoEventsさせます。
If StopFlag = True Then ’ここでLoopを一時停止させておきたいのです。
Me.Cursor = Cursors.Default '一旦砂時計を止めます
TextBox1.Text = "処理一時停止"
TextBox1.Refresh()
If StopFlag = False Then ’再開ボタンが押下されたらここで再開させたい。
TextBox1.Text = "処理中" ’処理中と表示させます
TextBox1.Refresh()
Me.Cursor = Cursors.WaitCursor '砂時計再開です
ElseIf CancelFlag = True Then ’キャンセルボタンが押下されれば、処理はLoopを抜けます。
TextBox1.Text = "キャンセル"
TextBox1.Refresh()
Exit Do
End If
Loop

'----------ストップボタン----------
Private Sub Button2_Click~
StopFlag = True
End Sub
'----------再開ボタン----------
Private Sub Button3_Click~
StopFlag = False
End Sub
'----------キャンセルボタン----------
Private Sub Button4_Click~
CancelFlag = True
End Sub

この質問に補足する

Loopで処理を回しています。処理件数が多く、処理の途中で一時停止させ、DataGridViewに表示されている処理結果を目で確認ないしマウスでコピーしてから、処理を再開ないしキャンセルして終了させる仕様を作成中です。

MessageBoxを使用すれば、Loopは一時停止出来たのですが、MessageBoxだとDataGridView上の処理結果をマウスでコピーなど出来ません。

そこで、MessageBoxを使用せずに、以下のコマンドを書いてみたのですが、最初のStopFlag=Trueが効くだけで次のコマンドは一瞬で処理されLoopが続いてしまいま...続きを読む

Aベストアンサー

失礼、コルーチンを使うべきらしい。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=44349&forum=7

QVisual Basicプログラムのエラーについて

「Visual Basicでエンジョイプログラミング」(CQ出版社)
という本の11章VisualBasicで動かす自作装置の製作方法、
A-Dコンバータの製作と題してA-Dコンバータのプログラムが書いてあるのですが

<同じプログラムが掲載されているホームページ>http://mweb.jrscomware.com/tie/data/KyouzaiDB/bg/07/76aa45a7e4cc774b6976aad26a0709/_5051b778aae80343/b778768d0222/b778768d0222.htm

本に従ってプログラムを書いたのですが、実行しようとしたら
Public Const CLRDTR = 6
Public Const SETDTR = 5
Public Const CLRRTS = 4
Public Const SETRTS = 3
Public Const MS_CTS_ON = &H10&
Public Const MS_DSR_ON = &H20&

の部分が赤色の表示になって
「コンパイルエラー
定数、固定長文字列、配列、ユーザー定義型、
およびDeclareステートメントはオブジェクトモジュールのパブリックメンバとしては使用できません。」
と表示されたのですが、僕はまったくの初心者なので
ヘルプを見てもどのように修正すればいいのか良く分かりません。

何か知っている方がいらしゃいましたら教えてください。よろしくお願いします。

「Visual Basicでエンジョイプログラミング」(CQ出版社)
という本の11章VisualBasicで動かす自作装置の製作方法、
A-Dコンバータの製作と題してA-Dコンバータのプログラムが書いてあるのですが

<同じプログラムが掲載されているホームページ>http://mweb.jrscomware.com/tie/data/KyouzaiDB/bg/07/76aa45a7e4cc774b6976aad26a0709/_5051b778aae80343/b778768d0222/b778768d0222.htm

本に従ってプログラムを書いたのですが、実行しようとしたら
Public Const CLRDTR = 6
Public Const SETDTR = 5
...続きを読む

Aベストアンサー

No 1 の方のおっしゃるように、
(1) プロジェクトエクスプローラの
プロジェクト名を右クリック→追加→標準モジュール
としてそちらに記載するか、

(2) フォームを一つしか使わないのであれば、全部Publicを省いて記述しても大丈夫だと思います。

QactiveX を 使った Visual Basicのプログラム

IteractiveBrokersという株のbrokerのサイトでサンプル プログラムを使いたいのですがよくわかりません。使用方法を下記します
Use the Visual Basic VBClient Sample Program

You can access the server through the ActiveX interface using the Visual Basic sample application.
To run the sample you must:
Install the API sample programs <-インストール完了
Configure the application to support the API components
ー>configure済み
Have MS Visual Studio (Visual Basic 6.0 or higher) installed on your PC. ー>visual studio 2005あり

The VBClient program is a sample program that shows you how to use the TWS ActiveX control to connect to the server from a Visual Basic application.

To use the VBClient program
1.From MS Visual Basic, open the project file VB_API_sample.vbp.
ー>open済み
2.On the Projects menu, select Components.
ー>VB2005で「はコンポーネントの追加」をクリック
3.In the Components dialog box, select TWS ActiveXControl module and click OK.ー>ダイアログにはTWS activeXControlがない

Press Ctrl + F5 to compile and run the project.

3.のTWS というのはこの会社の株取引用のツールです。
普通何もしないでダイアログにTWS ActiveXControlがあるはずがないとは思うのですが、何かが抜けているのか、やり方が悪いのか、またはテンプレート中のどれかをクリックして,TWSActiveControlという名前をつければよいのか、おわかりの方がおられたら教えてください。
直接聞けばよいのですが、英語の質問は苦手なもので、またAPIプログラムはサポートしないとあったものですから・・・・。
よろしくお願いします。

IteractiveBrokersという株のbrokerのサイトでサンプル プログラムを使いたいのですがよくわかりません。使用方法を下記します
Use the Visual Basic VBClient Sample Program

You can access the server through the ActiveX interface using the Visual Basic sample application.
To run the sample you must:
Install the API sample programs <-インストール完了
Configure the application to support the API components
ー>configure済み
Have MS Visual Studio (Visual Basic 6.0 or high...続きを読む

Aベストアンサー

VB.NETですと コンポーネントの追加で 『COM』タグあると思います
ここを 選択して『TWS ActiveX Control』を探してみましょう ...

QVisual BASIC から外部プログラムが起動できません。

東京デバイセズより発売されているリレーボードを入手し、リレー制御のプログラム iwt303ctl をダウンロードしてディスクトップに配置し、OSのコマンドプロンプトからコマンドを入力することにより、リレーを制御することは確認できたのですが

https://tokyodevices.jp/items/149


Microsoft Visual Studio 2015 のVisual BASICにて下記コードを記載して走らせますとエラーとなりリレーを制御することが出来ません。

System.Diagnostics.Process.Start("C:\Users\RD\Desktop\iwt303ctl set ANY 1")

エラーコードは以下の内容になります。

スレッド 0x124c はコード 0 (0x0) で終了しました。
'test1.vshost.exe' (CLR v4.0.30319: test1.vshost.exe): 'C:\Users\RD\Documents\Visual Studio 2015\Projects\リレー制御\test1\bin\Debug\test1.exe' が読み込まれました。シンボルが読み込まれました。
'test1.vshost.exe' (CLR v4.0.30319: test1.vshost.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
例外がスローされました: 'System.ComponentModel.Win32Exception' (System.dll の中)
型 'System.ComponentModel.Win32Exception' のハンドルされていない例外が System.dll で発生しました
追加情報:指定されたファイルが見つかりません。

プログラム '[8076] test1.vshost.exe' はコード -1 (0xffffffff) で終了しました。

---------------------------------------

Visual BASIC にて以下のようにコードを記載すると

System.Diagnostics.Process.Start("notepad.exe")

外部プログラムであるnotepadは問題なく起動できるのですが。

どこに問題があるのでしょうか。

ご教授のほどよろしくお願いいたします。

東京デバイセズより発売されているリレーボードを入手し、リレー制御のプログラム iwt303ctl をダウンロードしてディスクトップに配置し、OSのコマンドプロンプトからコマンドを入力することにより、リレーを制御することは確認できたのですが

https://tokyodevices.jp/items/149


Microsoft Visual Studio 2015 のVisual BASICにて下記コードを記載して走らせますとエラーとなりリレーを制御することが出来ません。

System.Diagnostics.Process.Start("C:\Users\RD\Desktop\iwt303ctl set ANY 1")
...続きを読む

Aベストアンサー

VB使いではありませんけど……

https://msdn.microsoft.com/ja-jp/library/53ezey2s(v=vs.110).aspx
ということで、
>System.Diagnostics.Process.Start("C:\Users\RD\Desktop\iwt303ctl set ANY 1")
は、
デスクトップにある"iwt303ctl set ANY 1.exe"を起動しようとしています。
そんな実行ファイルはないので、
>追加情報:指定されたファイルが見つかりません。
となるのでしょう。

https://msdn.microsoft.com/ja-jp/library/h6ak8zt5(v=vs.110).aspx
こちらを使用するべきなんじゃないですか?

System.Diagnostics.Process.Start("C:\Users\RD\Desktop\iwt303ctl", "set ANY 1")
ですかね。

QVisual Basicで作成したプログラムをExcelに出力したいです

Visual Basic. NET 2003を使っています。
「N期間(年間)と利子率(%)を入力し、1年目からN年目までの元金の価値の倍率のリストを作成するプログラムを作成し、出力データをMS-Excelのカッマ区切り形式(ファイル名.csv)に保存すること」を、授業の課題として出されました。大学の授業って大変ですね。。。

貯金した元金の価値の倍率は以下の式で表されます。
N年後の価値の倍率=(1+利子率)二乗 N期間

自分でここまではやってみました。
Dim principal As Integer
Dim period As Integer
Dim interest As Double
Dim value As Double

'Input
principal = Val(TextBox1.Text)
period = Val(TextBox2.Text)
interest = Val(TextBox3.Text) / 100

'Calculation
value = principal * ((1 + interest) ^ period)

'Insurt data
Const filename As String = "value.csv"

FileOpen(1, filename, OpenMode.Output)
WriteLine(1, period, interest, value)
FileClose(1)

お昼からずっと格闘しています。。。そろそろお腹がすいてきました(笑)もう困り果ててしまったので、ここに質問させていただきます!!
どなたか回答してくださればうれしいです♪
よろしくお願いします!!

Visual Basic. NET 2003を使っています。
「N期間(年間)と利子率(%)を入力し、1年目からN年目までの元金の価値の倍率のリストを作成するプログラムを作成し、出力データをMS-Excelのカッマ区切り形式(ファイル名.csv)に保存すること」を、授業の課題として出されました。大学の授業って大変ですね。。。

貯金した元金の価値の倍率は以下の式で表されます。
N年後の価値の倍率=(1+利子率)二乗 N期間

自分でここまではやってみました。
Dim principal As Integer
Dim period As Integer
Di...続きを読む

Aベストアンサー

for を使って繰り返し処理ができるようにします


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報