スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
パフォーマンスモニターのグラフみたいなものを作成 (C#)
寒くて電子工作する気が起きず、こたつに入ってできるプログラミングの勉強をしました。
今回はWindowsタスクマネージャーのパフォーマンスタブにあるグラフみたいのが作成できるのかチャレンジしたところ、思ったより簡単にできました。今後の仕事で使うかもしれないのでメモしておきます。

<仕様>
50ms毎にスライダーの値(0~100)を取得し、取得した値をグラフに表示させます。
※グラフの右端が最新の値で、左へ行くほど過去の値となります(履歴)
<フォームデザイン>
使用しているコントロールは以下の通りです。
・PictureBox
・TrakBar(スライダー)
・TextBox
・Timer

<ソース>
今回はWindowsタスクマネージャーのパフォーマンスタブにあるグラフみたいのが作成できるのかチャレンジしたところ、思ったより簡単にできました。今後の仕事で使うかもしれないのでメモしておきます。
<仕様>
50ms毎にスライダーの値(0~100)を取得し、取得した値をグラフに表示させます。
※グラフの右端が最新の値で、左へ行くほど過去の値となります(履歴)
<フォームデザイン>
使用しているコントロールは以下の通りです。
・PictureBox
・TrakBar(スライダー)
・TextBox
・Timer
<ソース>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Monitor
{
public partial class Form1 : Form
{
const Int32 BoxSize = 20;
Bitmap m_Bitmap;
Int32 m_X = 0;
List m_DataList = new List();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// スライダーの設定
trackBar1.Minimum = 0;
trackBar1.Maximum = 100;
trackBar1.Value = 0;
// テキストボックスの設定
textBox1.ReadOnly = true;
textBox1.TextAlign = HorizontalAlignment.Right;
textBox1.Text = String.Format("{0}",trackBar1.Value);
// データを初期化
Int32 temp = 0;
for (Int32 i = 0; i < pictureBox1.Size.Width; i++)
{
m_DataList.Add(temp);
}
// PictureBox表示用ビットマップ
m_Bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
pictureBox1.Image = m_Bitmap;
PictureBox1Draw();
// タイマー設定(50ms)
timer1.Interval = 50;
timer1.Start();
}
//=========================================================================================
// PictureBox1描画処理
//=========================================================================================
private void PictureBox1Draw()
{
Graphics g = Graphics.FromImage(pictureBox1.Image);
//-----------------------------------
// グラフを描画
//-----------------------------------
g.FillRectangle(Brushes.Black, 0, 0, pictureBox1.Size.Width, pictureBox1.Size.Height);
// 縦線
Int32 cy = pictureBox1.Size.Height / BoxSize;
for (Int32 y = 0; y <= cy; y++)
{
g.DrawLine(Pens.Green, 0, pictureBox1.Size.Height - (y * BoxSize), pictureBox1.Size.Width, pictureBox1.Size.Height - (y * BoxSize));
}
// 横線
Int32 cx = (pictureBox1.Size.Width + m_X) / BoxSize;
for (Int32 x = 0; x <= cx; x++)
{
g.DrawLine(Pens.Green, pictureBox1.Size.Width - (x * BoxSize) - m_X, 0, pictureBox1.Size.Width - (x * BoxSize) - m_X, pictureBox1.Size.Height);
}
//-----------------------------------
// データを描画
//-----------------------------------
for (Int32 i = 0; i < (pictureBox1.Size.Width - 1) ; i++)
{
double dblTemp00 = (m_DataList[i] / (double)10) * (double)BoxSize;
double dblTemp01 = (m_DataList[i + 1] / (double)10) * (double)BoxSize;
g.DrawLine(Pens.Yellow, i, (int)(pictureBox1.Size.Height - dblTemp00), i + 1, (int)(pictureBox1.Size.Height -dblTemp01));
}
if (++m_X >= BoxSize) m_X = 0;
pictureBox1.Refresh();
}
//=========================================================================================
// タイマーイベント処理
//=========================================================================================
private void timer1_Tick(object sender, EventArgs e)
{
// データ値を取得(トコロテン方式で最初のデータを削除)
m_DataList.Add(trackBar1.Value);
m_DataList.RemoveAt(0);
// PictureBox1描画処理
PictureBox1Draw();
}
//=========================================================================================
// スライダーイベント処理
//=========================================================================================
private void trackBar1_Scroll(object sender, EventArgs e)
{
textBox1.Text = String.Format("{0}", trackBar1.Value);
}
}
}
この記事へのコメント
トラックバック
URL :