VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばす方法

このQ&Aのポイント
  • VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばす方法を詳しく解説します。
  • コマンドボタンをクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させる方法を紹介します。
  • 初心者でもわかりやすく、ステップバイステップで説明します。
回答を見る
  • ベストアンサー

VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたい。

VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたいのですが、上手くいきません。コマンドボタンを使いクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させたいと思っているのですが、初心者同然なので詳しくお願いします。 Dim dat(4, 3) As Integer Dim a As Long Private Sub Command1_Click() With MSChart1 .chartType = VtChChartType3dBar .ColumnCount = 3 .RowCount = 4 For i = 1 To .RowCount For j = 1 To .ColumnCount .Column = j .Row = i .Data = dat(i, j) Next j Next i .DataGrid.ColumnLabel(1, 1) = "(1)" .DataGrid.ColumnLabel(2, 1) = "(2)" .DataGrid.ColumnLabel(3, 1) = "(3)" .DataGrid.RowLabel(1, 1) = "1月~3月" .DataGrid.RowLabel(2, 1) = "4月~6月" .DataGrid.RowLabel(3, 1) = "7月~9月" .DataGrid.RowLabel(4, 1) = "10月~12月" .Visible = True End With Timer1.Enabled = True End Sub Private Sub Form_Load() a = 0 MSChart1.Visible = False End Sub Private Sub MSChart1_OLEStartDrag(Data As MSChart20Lib.DataObject, AllowedEffects As Long) End Sub Private Sub Timer1_Timer() a = a + 10 dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110 dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110 dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110 dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110 If a = 100 Then Timer1.Enabled = False End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

データセットがボタンを押した時になってました。 一定間隔でグラフを伸ばすのであれば、 定期間隔でのイベント=タイマーイベント で行うべきです。 ちょっと改造してみました。 Dim dat(4, 3) As Integer Dim a As Long Private Sub Command1_Click()   'チャート初期設定   With MSChart1     .chartType = VtChChartType3dBar     .ColumnCount = 3     .RowCount = 4     .DataGrid.ColumnLabel(1, 1) = "(1)"     .DataGrid.ColumnLabel(2, 1) = "(2)"     .DataGrid.ColumnLabel(3, 1) = "(3)"     .DataGrid.RowLabel(1, 1) = "1月~3月"     .DataGrid.RowLabel(2, 1) = "4月~6月"     .DataGrid.RowLabel(3, 1) = "7月~9月"     .DataGrid.RowLabel(4, 1) = "10月~12月"        End With      'タイマー起動   Timer1.Enabled = True End Sub Private Sub Form_Load()   a = 0            'タイマカウンタ初期化   MSChart1.Visible = False  'チャート不可視   Timer1.Enabled = False   'タイマー使用不可   Timer1.Interval = 1000   '1000ms(1秒)ごとに更新 End Sub Private Sub Timer1_Timer()   Dim i  As Long   Dim j  As Long      'セットする値の作成   a = a + 10   dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110   dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110   dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110   dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110   With MSChart1     'データセット     For i = 1 To .RowCount       For j = 1 To .ColumnCount         .Column = j         .Row = i         .Data = dat(i, j)       Next j     Next i          'もし不可視なら表示する     If Not .Visible Then       .Visible = True     End If     '更新した値を画面に反映     .Refresh        End With      If a = 100 Then     Timer1.Enabled = False   End If End Sub

sasamori
質問者

お礼

ありがとうございました。イメージしていた物ができるようになりました。今後はデータをAccessから取得できるようにしていきたいと思います。また機会があればいろいろと教えてください。ありがとうございました。

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

>今後はデータをAccessから取得できるようにしていきたいと思います。また機会があればいろいろと教えてください。 どうぞどうぞ、Accessの質問には答える人が多いから、すぐに解決すると思いますよ。 コメントからすると解決したのですか? それともまだ問題があるのですか? 解決したのなら、別にポイントはいらないので、締め切りだけはするようにしてくださいね。 解決してないのなら、解決できてない部分を書き込んでくださいね。 もしその解決してない部分が、この問題とは別の部分であれば、新規に投稿してくださいね。 それでは がんばってください。。。

関連するQ&A

  • タイマーがうまく動かない

    VB6.0(SP5)で、バッチファイルを実行後、5秒待つようにしたいのですが、うまく動きません。 Dim ping_count As Long Private Sub Command1_Click() Shell ("executeping.bat") Timer1.Interval = 1000 Timer1.Enabled = True Do Text1.Text = "ただいま実行中" Timer1_Timer Loop Until ping_count = 5 Text1.Text = "終了" Timer1.Enabled = False End Sub Private Sub Timer1_Timer() ping_count = ping_count + 1 Text1.Text = "ただいま実行中" End Sub デバックで動かすと、ちゃんとループを5回繰り返してテキストボックスに「終了」と表示するのですが、実行するといきなり「終了」を表示してしまいます。 ループの中のTimer1_Timerをコメントにすると、デバックでは延々ループを続け、実行するとフリーズしてしまいます。 そもそもタイマーの使い方が間違っているのでしょうか? 教えてください。よろしくお願いします。

  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • 続・タイマーとShowdialog(VB2010)

    タイマーコントロールについて の続きになります。 一つ方法を考えました。いくつか問題ありですが・・。 ApplicationEvent.vbの部分を Namespace My Partial Friend Class MyApplication Protected Overrides Function OnInitialize( _ ByVal commandLineArgs As _ System.Collections.ObjectModel.ReadOnlyCollection(Of String) _ ) As Boolean 'スプラッシュウィンドウを表示する最短時間を0.5秒にする Me.MinimumSplashScreenDisplayTime = 500 Return MyBase.OnInitialize(commandLineArgs) End Function      'スプラッシュスクリーンのタイマーコントロール設定 Friend Sub Splash() With SplashScreen1.Timer1 .Enabled = True .Interval = 500 End With SplashScreen1.Timer1.Start() End Sub ' この書き方あってますか?とりあえずは反映されてるようですけれど・・・ End Class End Namespace SplashScreen1の部分を Public Class SplashScreen1 Friend Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     ' クリックで閉じる DialogResult = DialogResult.OK Me.Close() End Sub Friend Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' タイマーコントロール発動時、瞬時に停止させる。スクリーンは消えないように。 Me.Timer1.Enabled = False Me.ShowDialog() End Sub End Class と、してみましたが・・・問題が発生するのです。 この時、スクリーンフォームがMe.ShowDialog()と書いてあるにもかかわらず、 メインフォームとともに操作可能・・つまりモードレスであるShowで表示されるのです。上記のコードを実行してもらえれば分かると思いますが・・。 また、メインフォームが前方に、スクリーンフォームが後方に行ってしまいます。これはどのようにすれば良いでしょうか? Me.TopMost = True としても駄目でした。 BringToFrontを使っても同じでした。

  • タイマーがうまくできません

    VisualBasicにてタイマーを作ろうと思っています。(キッチンタイマーみたいなもの) プロパティの初期値としては「Timer2.Interval = 100」 別に作成したボタンで「Timer2.Enabled = True」にするプログラムをした上で Private Sub Timer2_Tick(。。。省略  hyaku = Int((hyaku - 0.1) * 10) / 10  If hyaku >= 0 Then    Label5.Text = hyaku  Else    Timer2.Enabled = False  End if End Sub というプログラムを作成しました。 しかしプログラムを実行させると通常の約2倍の速さで秒数を刻んでいきます。 だからといって上の hyaku = Int((hyaku - 0.1) * 10) / 10 を hyaku = hyaku - 0.1 にすると小数点1位未満の数字も表示されてしまいます。 もしプログラムにミスがあるなら指摘をお願いします。 またExcelの関数にある「Round」みたいなものがあれば教えてください。 よろしくお願いします。

  • vb.netのタイマーについて

    こんにちわ。 vb.netのタイマー機能についての質問です。 私の理解ではタイマーをオンにし、設定時間立つとタイマーに設定してあるルーチンが「割り込み実行」される。 なんですが、 その割り込み実行した後、割り込み元のルーチンを終了させるにはどうしたらよいでしょうか? イメージは↓ Public Sub main_test() Dim aaa As Integer = 0 time_count.Enabled = True time_count.Interval = 5000 For i = 0 To 10000 Step 1 aaa += 1 Next i End Sub '切断タイマー Private Sub time_count_Tick(sender As Object, e As EventArgs) Handles time_count.Tick 'ここでmain_test()を終了させたい。 End Sub 他のやり方でも構いませんが、アドバイスのほどよろしくお願いいたします。 使用しているのは win7 VB.net2012 です。

  • 画像のランダム表示

    初心者なのですがVisual Studio6.0でもぐらたたきゲームを利用した作品を現在制作しています。内容は決まった画像がランダムでImageコントロールに表示され、それをクリックできると画像が変わり得点加算、クリックできないと画像が変わり減点というゲームです。現在Imageコントロールに決まった画像を呼び出す処理が完成しました。そして追加機能としてクリックできたらボーナスポイントの画像をImageコントロールに何分の何かの確率で表示させたいのですがわからない状態です。ちなみに画像は私のパソコンのDドライブから呼び出して表示させています。 どういった命令文を打ったら良いのかわかる方教えて下さい。宜しくお願いします。 こちらがプログラムです。 Option Explicit Const MinImgAry = 0 Const MaxImgAry = 15 Const GameTime = 15 Dim HitFlg As Integer Dim TEN As Integer Dim HoleNum As Integer Dim IconAry(2) As String Private Sub Command1_Click() Command1.Enabled = False Option1.Enabled = False Option2.Enabled = False Option3.Enabled = False HitFlg = 0 TEN = 0 Text1.Text = Str(TEN) Timer1.Enabled = True Timer2.Enabled = True End Sub Private Sub Command2_Click() Form1.Show End Sub Private Sub Form_Load() Dim StrPath As String StrPath = App.Path If Right(StrPath, 1) <> "\" Then StrPath = StrPath + "\" End If IconAry(0) = "D:制作\5\画像1.bmp" IconAry(1) = "D:制作\5\画像2.bmp" IconAry(2) = "D:制作\5\画像3.bmp" End Sub Private Sub Image1_Click(Index As Integer) Image1(Index).Enabled = False HitFlg = -1 End Sub Private Sub Option1_Click() Timer1.Interval = 1000 End Sub Private Sub Option2_Click() Timer1.Interval = 800 End Sub Private Sub Option3_Click() Timer1.Interval = 500 End Sub Private Sub Timer1_Timer() Static CtlFlg As Integer Select Case CtlFlg Case 0 Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False HoleNum = Int((MaxImgAry - _ MinImgAry + 1) * Rnd + MinImgAry) Image1(HoleNum).Picture = _ LoadPicture(IconAry(0)) CtlFlg = 1 Image1(HoleNum).Visible = True Image1(HoleNum).Enabled = True Exit Sub Case 1 Image1(HoleNum).Enabled = False If HitFlg Then HitFlg = 0 Image1(HoleNum).Picture = _ LoadPicture(IconAry(2)) TEN = TEN + 1 Text1.Text = Str(TEN) Else Image1(HoleNum).Picture = _ LoadPicture(IconAry(1)) TEN = TEN - 1 Text1.Text = Str(TEN) End If CtlFlg = 0 Exit Sub End Select End Sub Private Sub Timer2_Timer() Static TimeCnt As Long TimeCnt = TimeCnt + 1 If TimeCnt <> GameTime Then Exit Sub End If Timer1.Enabled = False Timer2.Enabled = False MsgBox "おしまい" TimeCnt = 0 Command1.Enabled = True Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False Option1.Enabled = True Option2.Enabled = True Option3.Enabled = True End Sub

  • タイマーの使い方

    VB初心者です(6.0を使っています) タイマーの使い方がよく分かっていません。 ボタンを押してからの経過時間をラベルに表示させたいと思っているのですが、 ----------------------------------------------- Private Sub Command1_Click()   Timer1.Interval = 1000   処理1   処理2    ・    ・    ・   Timer1.Interval = 0 End Sub Private Sub Timer1_Timer()   Label1.Caption = [経過時間] End Sub ----------------------------------------------- という感じに書いていると、[処理1]~をしている間はラベルが表示されなくて、 最後の[処理]が終わった直後の[経過時間]のみが表示されます。 こういう形ではタイマーは使用できないのでしょうか? 他のWebサイトなども調べてみたのですが、解決できませんでした。 どなたか教えていただけませんでしょうか?

  • アクセスのタイマー間隔

    アクセス2003のタイマー間隔の実行で 何回実行したかカウントを取りたいのですが変数がクリアなるのか いきません。 フォームを開いた時 Dim a As Double a=0 Private Sub Form_Timer() Dim a As Double a = a + 1 MsgBox a End Sub 返し値がすべて 1になる ご伝授お願いします

  • MSChartコントロールのフォント設定

    VB6のMSChartコントロールで、 Private Sub Form_Load() MSChart1.Title.Font.Size = 20 End Sub とし、フォントサイズを設定しようとしたところ、実行時に 「値の設定のみ可能なプロパティです。」 というエラーが発生してしまします。 フォントサイズだけでなく、フォントの名前、さらにFootnoteでも同様なエラーが発生します。 何が原因でしょうか?よろしくお願いします。

  • VB2005 データグリッドについての質問です。

    はじめまして。 VB2005にてデータグリッドについて質問です。 データグリッドの初期化がうまくいかなく困っています。 ネットでもいろいろ探しましたが解決策が見つからない為、投稿しました。 下記にソースの一部を記述します。 Dim User_Clone As New ADODB.Recordset Private Sub AAA_Load() User_Clone = XXXX '-- XXXXにはデータベース接続情報が入っている。 DataGrid1.DataSource = User_Clone '-- ↑XXXXの内容が正しくDataGrid1に表示される。 End Sub Private Sub BBB_Click DataGrid1.DataSource = Nothing DataGrid1.Refresh() '-- ↑DataGrid1にはXXXXの内容が表示されたままとなっている。 End Sub なんとか対応をと思い、下記方法で試しましたが いまいち納得いきません。 Private Sub BBB_Click User_Clone = New ADODB.Recordset DataGrid1.DataSource = User_Clone '-- ↑DataGrid1には何も表示されませんが '-- Refresh等で初期化できれば・・・。 End Sub 長文ですみませんが、どなたかご教授願います。