- 日時: 2008/08/05 09:14
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][グリッド関係][描画・画像] * * キーワード:工程表,ガントチャート,進捗管理,スケジュール表示, * *********************************************************************************** タイトル : ガントチャートをVB6で作りたい 記事No : 12662 投稿日 : 2008/07/01(Tue) 22:34 投稿者 : カズ
今回仕事で、VB6でガントチャートを独自で作るようになったのですがなかなかうまく できません。インターネットでもあまり載ってないのでかなり困っています。 VB6での作り方があるのでしたらお教え願えないでしょうか・・・
----------------------------------------------------------------------------------- 記事No : 12665 投稿日 : 2008/07/02(Wed) 09:23 回答者 : 花ちゃん ----------------------------------------------------------------------------------- 最近同じような質問が結構多いのでサンプルを作り直しました。 但し、汎用ではないし、叩き台的なものなので、後はご自分で工夫して下さい。 ここのサンプルの セルに直接データーを入力する(エクセルのように)No.34 と 組み合わせれば、直接データを編集する事も簡単にできます。
MSHFlexGrid コントロールの詳しい使い方は下記をどうぞ。 http://hanatyan.sakura.ne.jp/vbhlp/MSFlexind.htm
Option Explicit
Private Sub Form_Load() Dim i As Long Dim j As Long '仮データの作成部分(CSVファイル 等を使っても OK ) Dim KDat(3, 2) As String KDat(0, 0) = "タイトル": KDat(0, 1) = "開始日時": KDat(0, 2) = "終了日時" KDat(1, 0) = "工 程 1": KDat(1, 1) = "2008/08/01 08:00": KDat(1, 2) = "2008/08/02 8:00" KDat(2, 0) = "工 程 2": KDat(2, 1) = "2008/08/01 18:00": KDat(2, 2) = "2008/08/03 00:00" KDat(3, 0) = "工 程 3": KDat(3, 1) = "2008/08/02 04:00": KDat(3, 2) = "2008/08/04 12:00" Form1.Move 0, 0, 10400, 4000 With MSFlexGrid1 'MSFlexGrid の初期設定 .Font.Name = "MS ゴシック" .Font.Size = 9 .FocusRect = flexFocusNone 'フォーカスを示す四角形を描かない .HighLight = flexHighlightAlways '選択されたセルを常に強調表示 .Move 150, 150, 10000, 3000 '表示位置と大きさを設定 .FixedRows = 1 '固定行の数 Rowsより1以上少ない事 .Cols = 34 '列数の設定(31日分) .Rows = 10 '行数の設定(必要分) .FixedCols = 0 .RowHeightMin = 400 '行の高さを設定 .ColWidth(0) = 1000 '列幅を設定 .ColWidth(1) = 1700 '列幅を設定 .ColWidth(2) = 1700 '列幅を設定 For i = 0 To .Cols - 1 .Col = i: .Row = 0 .CellAlignment = flexAlignCenterCenter '表示位置を中央揃えに設定 If i > 2 Then .ColWidth(i) = 2250 '半角で24文字分 '日付の表示 .TextMatrix(0, i) = "8月" & CStr(i - 2) & "日" End If Next i '初期のカーソル位置 .Col = 0: .Row = 1 'データ部分の表示(CSVファイルから読み込んでも OK ) For i = 0 To 3 For j = 0 To 2 If j = 0 Then .TextMatrix(i, j) = KDat(i, j) 'データの表示 Else .TextMatrix(i, j) = CStr(Format$(KDat(i, j), "yyyy/mm/dd hh:nn")) End If Next j Next i End With 'グラフ部分の表示 Call SetData End Sub
Private Sub SetData() Dim i As Long Dim j As Long Dim SD As Integer '開始日 Dim ED As Integer '終了日 Dim ST As Integer '開始時間 Dim ET As Integer '終了時間 Dim s1 As String '開始日分のグラフのデータ Dim s2 As String '期間日分のグラフのデータ Dim s3 As String '終了日分のグラフのデータ With MSFlexGrid1 For i = 1 To 3 SD = Day(DateValue(.TextMatrix(i, 1))) '開始日の取得 ED = Day(DateValue(.TextMatrix(i, 2))) '終了日の取得 ST = Hour(TimeValue(.TextMatrix(i, 1))) 'スタート時間の取得 ET = Hour(TimeValue(.TextMatrix(i, 2))) '終了時間の取得 If SD = ED Then '開始日と終了日が同じ場合 '開始時間までの時間数分スペースを付加し当日内の時間分 ">" (1個1時間) を表示 s1 = String$(ST, " ") & String$(ET - ST, ">") .TextMatrix(i, SD) = s1 Else s1 = String$(ST, " ") & String$(24 - ST, ">") '------------ 工程が何日にもまたぐ場合 --------------------- Dim Nisu As Integer Nisu = ED - SD If Nisu >= 2 Then s2 = String$(24, ">") For j = 1 To Nisu .TextMatrix(i, SD + j + 2) = s2 Next j End If s3 = String$(ET, ">") & String$(24 - ET, " ") .TextMatrix(i, SD + 2) = s1 '開始日の分 .TextMatrix(i, ED + 2) = s3 '終了日の分 End If Next i End With End Sub
Private Sub Form_Resize() If Me.WindowState <> vbMinimized Then MSFlexGrid1.Move 150, 150, Me.Width - 550, Me.Height - 800 End If End Sub
Private Sub MSFlexGrid1_MouseMove(Button As Integer, _ Shift As Integer, x As Single, y As Single) Dim R As Long R = MSFlexGrid1.MouseRow If R > 0 Then MSFlexGrid1.ToolTipText = MSFlexGrid1.TextMatrix(R, 0) & " 開始日時: " & _ MSFlexGrid1.TextMatrix(R, 1) & " 終了日時: " & MSFlexGrid1.TextMatrix(R, 2) End If End Sub
------------------------------------------------------- 上記実行結果の画像(画像をクリックすると元のサイズで見られます。)
右側は、VB2008 のDataGridViewで工程表(ガントチャート)を作成した結果です。 簡単にオーナードローで描画ができるので、セル内を6時間毎に区切り線等も引いてみました。 データを編集する度に再描画するようにし、ファイルの保存・印刷機能もつけてみました。
|