パラパラ漫画

Similar documents
パラパラ漫画

3D回転体プログラム

3D回転体プログラム

グラフィックス

PowerPoint プレゼンテーション

ルーレットプログラム

ブロック パニック

ICONファイルフォーマット

ブロック崩し風テニス

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

神経衰弱ゲーム

VB.NET解説

インベーダープログラム

スライド 1

ファイル操作

ウィンドウ操作 応用

プロセス間通信

C#の基本

ListViewコントロール

アプリケーション

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

データアダプタ概要

回文作成支援プログラム

Prog2_12th

万年暦プログラム

画像閲覧プログラム

3D回転体プログラム

回文作成支援プログラム

C#の基本2 ~プログラムの制御構造~

神経衰弱ゲーム

ファイル監視

通信対戦プログラム

NotifyIconコントロール

占領双六ゲーム

スレッド操作 タイマー

VB実用⑦ エクセル操作Ⅰ

Userコントロール

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

回文作成支援プログラム

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

草競馬プログラム

プレポスト【問題】

占領双六ゲーム

万年暦プログラム

GUIプログラムⅣ

スロットプログラム

PowerPoint プレゼンテーション

相性占いプログラム

ファイル操作-インターネットキャッシュ

プラグイン

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

構造体

クリッピング領域

Prog2_2nd

Javaプログラムの実行手順

回文作成支援プログラム

万年暦プログラム

チャットプログラム

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

Prog2_15th

CodeGear Developer Camp

画像閲覧プログラム

正規表現応用

ファイル操作-バイナリファイル

相性占いプログラム

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライト スプライト Pygame では pygame.sprite を用いる事でスプライトの管理 描画 衝突判定等を簡単に行う事が出来る 此れを利用してキャラクター操作に関する各種機能をスプライトクラスとして 1 個

ハッシュテーブル

何時何処で誰が

グラフィックス 目次

PowerPoint プレゼンテーション

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

Microsoft Word -

Microsoft PowerPoint - OOP.pptx

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

VB実用⑬ 印刷Ⅲ(PrintFormメソッド)

スライド 1

Microsoft Word - VB.doc

グラフィックス 目次

Microsoft PowerPoint - OOP.pptx

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

データベース1

回文作成支援プログラム

印刷

回文作成支援プログラム

Prog2_4th

Microsoft Word - VB_10.doc

PowerPoint プレゼンテーション

文書閲覧プログラム

印刷

VB実用Ⅲ⑩ フリーデータベースⅡ

Microsoft Excel操作

14.event-handling

PowerPoint プレゼンテーション

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

データベース1

ドッグファイト

Transcription:

パラパラ漫画 C# 2005 3 プログラムの概要 10 枚のピクチャーボックスの夫々れに マウスを左クリックしてドラッグする事に依り 連続線を引き 自由な絵を描く 此の場合 マウスを右クリックする事に依り 新たな線を描き始める事が出来る 描画の対象と成る各ピクチャーボックスは 戻るボタン又は 進むボタンをクリックする事に依り 変更する事が出来る 10 枚の絵を描き終われば ( 途中での再生も可 ) 再生ボタンをクリックする事に依り 連続表示する事が出来る 表示は トグル形式で連続して行われるので 停止するには 停止ボタンをクリックする 今回は コントロール内でのマウス座標の取得とグラフィックスメソッドを利用した描画を学習する 今回の課題項目 定数の宣言 (Const) 標準コントロールの利用 (PictureBox Label Button Timer) プロパティの利用 (Size Location Tag Image Button X Y) イベントの利用 (Load Closing MouseDown MouseMove MouseUp Click Tick) メソッドの利用 (FromImage DrawLine Clear Refresh FromImage BringToFront) 実行時にコントロールを追加 (new) 実行時にコントロールのイベントハンドラを追加 (new) 演算子 ( 代入演算子 算術演算子 比較演算子 ) 制御構造構文 ( 条件分岐 If ~ Then ElseIf Else End If ループ処理 For ~ Next) 今回の重点項目 マウスイベントに依るマウス座標の取得 (MouseDown MouseMove MouseUp) 描画メソッドに依るグラフィックスの描画 (DrawLine Clear Refresh) 今回の応用項目 描画する色や線の太さ等を自由に設定出来る様にする 作成した一連の画像をファイルに記録出来る様にする -1-

オブジェクト プロパティ一覧 ピクチャーボックス ラベル 1 ラベル 2 ボタン 1 ボタン 2 ボタン 3 ボタン 4 タイマー コントロールの種類 プロパティ プロパティの設定値 フォーム Name anime Text ぱらぱらアニメ ピクチャーボックス Name picbase BackColor White ラベル1 Name lblframetitle Text 現在のフレーム番号 TextAlign MiddleRight ラベル2 Name lblframenum BackColor White AutoSize False Text TextAlign 空白 MiddleRight ボタン1 Name btnmoveprev Text 戻る Tag 0 ボタン2 Name btnmovenext Text 進む Tag 1 ボタン3 Name btnplay Text 再生 Tag 0 ボタン4 Name btnstop Text 停止 Tag 1 タイマー Name tmranime Enabled False Interval 200-2-

プログラムリスト using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace anime public partial class anime : Form // フォームレベルでグローバルな定数の宣言 private const int NumPic = 10; ネームスペース ( 名前空間 ) の使用を宣言して居る 此の部分は エディタが 自動的に記述して下れる 定数を使用すると プログラムの可読性が高まり 修正が容易に成る 定数は 変数とは異なり プログラムの実行中に値を変更する事は出来ない // フォームレベルでグローバルな変数の宣言此処で宣言した変数は同じフォー private int FrameNum, AnimeNum; ム内の総てのサブプロシージャで private int StartX, StartY; 値の参照と設定を行う事が出来 private bool DrawFlag; る private Graphics[ ] g = new Graphics[ NumPic ]; private PictureBox[ ] picanime = new PictureBox[ NumPic ]; public anime( ) InitializeComponent( ); // フォームが読み込まれた時の処理 private void anime_load( object sender, EventArgs e ) int i; // 描画用ピクチャボックスの生成クスのインスタンスを生成し 配 for ( i = 0; i < NumPic; i++ ) 列に格納して居る picanime[ i ] = new PictureBox( ); ピクチャボックスの Imege プロ picanime[ i ].Size = picbase.size; パティに 描画を行うキャンバス picanime[ i ].Location = picbase.location; の役目をする Bitmap オブジェク picanime[ i ].BackColor = Color.White; トを生成して居る picanime[ i ].Tag = i; picanime[ i ].Image = new Bitmap( picanime[ i ].Width, picanime[ i ].Height ); g[ i ] = Graphics.FromImage( picanime[ i ].Image ); this.controls.add( picanime[ i ] ); this.picanime[ i ].MouseDown += new MouseEventHandler(this.picAnime_MouseDown); this.picanime[ i ].MouseMove += new MouseEventHandler(this.picAnime_MouseMove); this.picanime[ i ].MouseUp += new MouseEventHandler(this.picAnime_MouseUp); -3- コードで生成したコントロールは フォームの Controls コレクショ ンに追加する必要が有る 定数 NumPic 個分のピクチャボッ 実際に描画を行う Graphics オブジェクトを Image から生成

// ボタンのイベントハンドラの設定 this.btnmoveprev.click += new EventHandler( this.btnmove_click ); this.btnmovenext.click += new EventHandler( this.btnmove_click ); this.btnplay.click += new EventHandler( this.btnplay_click ); this.btnstop.click += new EventHandler( this.btnplay_click ); // 初期状態に設定 FrameNum = 0; picanime[ FrameNum ].BringToFront( ); lblframenum.text = FrameNum.ToString( ); DrawFlag = false; 描画モードと移動モードを区別する為の変数 DrawFlag はブール型の変数で True か False の孰れかの値を取る // フォームが閉じられ様と仕た時の処理 private void anime_formclosing( object sender, FormClosingEventArgs e ) int i; アプリケーションを終了する場 // タイマーの停止 tmranime.enabled = false; 合 タイマーの Enabled プロパテ ィは必ず false にして タイマー を止めて置く事が望ましい // Graphics オブジェクトの開放 for ( i = 0; i < NumPic; i++ ) g[ i ].Dispose( ); 生成したオブジェクトは 終了時 には 必ず破棄して メモリから 開放する必要が有る // ピクチャボックスでマウスボタンが押し下げられた時の処理 private void picanime_mousedown( object sender, MouseEventArgs e ) PictureBox p = ( PictureBox ) sender; int n = ( int ) p.tag; 左右孰れかのマウスボタンを押し下げると MouseDown イベントが発生する 左のマウスボタンが押された場合 if ( e.button == MouseButtons.Left ) には 引数 e の Button に 100000H が 亦 右のマウスボタンが押さ // 左ボタンがクリックされた時の処理れた場合には 引数 e の Button DrawFlag = true; に 200000H が格納されて居る StartX = e.x; StartY = e.y; g[ n ].DrawLine( Pens.Black, StartX, StartY, StartX, StartY ); else if ( e.button==mousebuttons.right ) // 右ボタンがクリックされた時の処理 DrawFlag = false; g[ n ].Clear( Color.White ); picanime[ n ].Refresh( ); MouseDown イベントが発生した時 マウスの当該オブジェクト内での座標は 引数 e の X と Y に格納されて居る 描画後は Refresh メソッドで再 描画しないと 描画結果が反映さ れない -4-

// ピクチャボックスでマウスポインタが移動した時の処理 private void picanime_mousemove( object sender, MouseEventArgs e ) PictureBox p = ( PictureBox ) sender; int n = ( int ) p.tag; マウスをオブジェクト上で移動すると MouseMove イベントが発生する // 描画フラグが立って居る時の処理 if ( DrawFlag ) // ピクチャボックスに直線を描画 g[ n ].DrawLine( Pens.Black, StartX, StartY, e.x, e.y ); picanime[ n ].Refresh( ); // 描画開始点の更新 StartX = e.x; StartY = e.y; 従来のコントロール配列の Index に対応する物と仕て Tag プロパティを用いるのが一般的で有る DrawLine は 指定した 2 点を結ぶ直線を 指定したペンで描画するメソッドで有る 描画モード (DrawFlag が True) の時以外は 此のプロシージャは実質的には何も行わない // ピクチャボックスでマウスボタンが開放された時の処理 private void picanime_mouseup( object sender, MouseEventArgs e ) 押し下げて居たマウスボタンを放 PictureBox p = ( PictureBox ) sender; すと MouseUp イベントが発生す int n = ( int ) p.tag; る // 描画フラグが立って居る時の処理 if ( DrawFlag ) // ピクチャボックスに直線を描画 g[ n ].DrawLine( Pens.Black, StartX, StartY, e.x, e.y ); picanime[ n ].Refresh( ); // 描画フラグの設定 DrawFlag = false; 描画モード (DrawFlag が True) の時以外は 此のプロシージャも実質的には何も行わない 描画後は Refresh メソッドで再 描画しないと 描画結果が反映さ れない // ボタン ( 戻る 進む ) がクリックされた時の処理 private void btnmove_click( object sender, EventArgs e ) Button b = ( Button ) sender; int n = System.Convert.ToInt32( b.tag ); btnmoveprev と btnmovenext が 此のプロシージャにハンドルされ て居る if ( n == 0 ) FrameNum--; if ( FrameNum < 0 ) FrameNum = NumPic - 1; else FrameNum++; if ( FrameNum >= NumPic ) FrameNum = 0; BringToFront は オブジェクトを picanime[ FrameNum ].BringToFront( ); 最前面に移動させるメソッド lblframenum.text = FrameNum.ToString( ); -5-

// ボタン ( 再生 停止 ) がクリックされた時の処理 private void btnplay_click( object sender, EventArgs e ) Button b = ( Button ) sender; int n = System.Convert.ToInt32( b.tag ); if ( n == 0 ) AnimeNum = FrameNum; tmranime.enabled=true; else tmranime.enabled=false; FrameNum=AnimeNum-1; Object 型から Button 型への変換等の異なるデータ型への変換は 明示的にキャストする必要が有る タイマーの Enabled プロパティの True と false を切り替える事に依り タイマーを動かせたり 止めたりして居る // タイマーが一定間隔で行う処理 private void tmranime_tick( object sender, EventArgs e ) picanime[ AnimeNum ].BringToFront( ); lblframenum.text = AnimeNum.ToString( ); AnimeNum++; if ( AnimeNum >= NumPic ) AnimeNum = 0; BringToFront は オブジェクトを 最前面に移動させるメソッド -6-

New キーワードに依るオブジェクトインスタンスの生成 新しいオブジェクトのインスタンスを生成するキーワード オブジェクト変数 配列 = New 生成するオブジェクトのコンストラクタ ( ) 宣言ステートメントや代入ステートメントの中で使用し 指定したクラスのコンストラクタを呼び出して 新しいオブジェクトのインスタンスを生成する New 句では インスタンスを作成出来る定義済みクラスを指定する必要が有る New は 宣言ステートメント 又は 代入ステートメントの中で使用し ステートメントが実行されると 指定したクラスのコンストラクタが呼び出されて 指定した引数が渡される 宣言ステートメントで使用する場合 生成するオブジェクトの型オブジェクト変数 = New 生成するオブジェクトのコンストラクタ ( ); 代入ステートメントで使用する場合 生成するオブジェクトの型オブジェクト変数 ; オブジェクト変数 = New 生成するオブジェクトのコンストラクタ ( ); コンストラクタ (Constructor) とは オブジェクト指向プログラミングで オブジェクト ( クラスのインスタンス ) を新しく生成する時に呼び出す特別なメソッドで有り クラス名と同じ名前を持つ 通常 新しく作成したオブジェクトを初期化する為に使用する Controls コレクションの Add メソッドに依るコントロールの追加 Control オブジェクトをコントロールコレクションの末尾に追加するメソッド コンテナオブジェクト.Controls.Add( 追加するコントロール ) Form オブジェクトや Panel オブジェクト等のコンテナに成る事の出来るオブジェクトにコントロールを追加する 引数には 追加するコントロール名を指定し 省略する事は出来ない New キーワードに依りコードで生成したコントロールは 何のコレクションにも属して居ない為 画面には表示されない 其の為 Form オブジェクトや Panel オブジェクト等のコンテナに成る事の出来るオブジェクトのコントロールコレクションに追加する必要が有る コントロールオブジェクトは 一度に 1 個のコントロールコレクションにしか割り当てる事が出来ず コントロールが既に他のコントロールの子コントロールで有る場合は 別のコントロールに追加される前に其のコントロールから削除される 猶 追加したコントロールを削除するには Remove RemoveAt Clear の各メソッドを使用する コンテナとは 他のオブジェクトを内包する事の出来るオブジェクトを謂う -7-

New キーワードに依るイベントハンドラの追加 イベントをイベントハンドラに関連付けるキーワード オブジェクト名. イベント名 += new デリゲート名 ( イベント処理プロシージャ名 ); コントロールのイベントと其れを処理するイベントプロシージャを関連付ける New キーワードに依りコードで生成したコントロールは 何のイベントプロシージャにも関連付けられて居ない為 イベント処理が行われない 其の為 new キーワードを使用して 既存のイベントプロシージャと関連付ける必要が有る イベントハンドラとは 対応するイベントが発生した時に呼び出されるプロシージャで有る 任意の有効なサブルーチンをイベントハンドラと仕て使用する事が出来る 但し イベントハンドラはイベントソース ( イベントの発生元 ) に値を返す事が出来ない為 関数 (Function プロシージャ ) をイベントハンドラと仕て使用する事は出来ない イベントをイベントハンドラに関連付けるには デリゲートのインスタンスをイベントに追加する デリゲートを削除しない限り 其のイベントが発生すると 常にイベントハンドラが呼び出される イベントに追加する事の出来るデリゲートの多くは System.Windows.Forms 名前空間で定義されて居る 亦 一般的なデリゲートと仕て イベントデータを持たないイベントを処理するメソッドを表す EventHandler デリゲート フォーム コントロール 又は 其他のコンポーネントの MouseDown イベント MouseUp イベント MouseMove イベントを処理するメソッドを表す MouseEventHandler デリゲート等が有る BringToFront メソッドに依る Z オーダーの変更 コントロールを z オーダーの最前面へ移動するメソッド コントロール名.BringToFront( ) コントロールを z オーダーの最前面へ移動する コントロールは z オーダーの最前面へ移動される コントロールが別のコントロールの子で有る場合 子コントロールは z オーダーの最前面に移動される BringToFront メソッドは コントロールをトップレベルコントロールにする訳では無い 猶 コントロールを z オーダーの背面に移動するには SendToBack メソッドを使用する 此の場合もコントロールが別のコントロールの子で有る場合 子コントロールは z オーダーの背面に移動される z オーダーはプロパティではない 亦 z オーダーの操作は 最前面と最背面丈で 3 個のコントロールが有る様な場合 真ん中の位置するには 1 個のコントロールを最前面に仕て 其の後 別の 1 個のコントロールを最背面にすると謂う手順を踏む事に成る Z オーダーとは コントロールの重なりの順番の事で有る 亦 重なり方以外にも タブオーダーを決定する要素と仕ても使用される -8-

PictureBox コントロールに Graphics 描画を行う為の手順 1.Graphics オブジェクトを参照する為の変数 ( 配列も可 ) を宣言する 例 :Graphics g; 2. ピクチャボックスの Image プロパティに Bitmap オブジェクトを割り当てる 例 : ピクチャボックス.Image = New Bitmap( 幅, 高さ ) 3. ピクチャボックスの Image より Graphics オブジェクトを作成する 例 :g = Graphics.FromImage( ピクチャボックス.Image ) 4.Graphics オブジェクトを通じてピクチャボックスにグラフィックスを描画する 例 :g.drawline( Pens.Black, 100, 100, 300, 300 ) Visual Basic 6.0 の様に ピクチャボックスにグラフィックメソッドで直接描画する事は出来ない コントロールの CreateGraphics メソッドに依る Graphics オブジェクトの生成 ( 再掲 ) コントロールの Graphics オブジェクトを作成するメソッド Graphics オブジェクト変数 = Object.CreateGraphics( ) コントロールに画像を表示したり グラフィックスや文字を描画する為に必要な Graphics オブジェクトを生成する 生成された Graphics オブジェクトを通じて コントロールに画像を表示したり グラフィックスや文字を描画する 従来の Visual Basic 6.0 以前の様に フォームやピクチャボックスに グラフィックスメソッドを使用して 直接描画を行う事は出来ない 猶 Graphics オブジェクトは 不要に成れば Dispose メソッドを呼び出して破棄する必要が有る 亦 Graphics オブジェクトは 現在のウィンドウのメッセージの存続期間丈有効で有る Bitmap コンストラクタに依る Bitmap オブジェクトの生成 ( 再掲 ) Bitmap オブジェクトを作成するコンストラクタ Bitmap オブジェクト変数 = New Bitmap(Object.Image) コントロールの Image プロパティより グラフィックスイメージのピクセルデータと其の属性で構成される GDI+ ビットマップをカプセル化したデータを保持し イメージを処理する場合に使用する Bitmap オブジェクトを生成する Bitmap コンストラクタには 上記以外にも 画像ファイルから生成したり サイズ丈を指定して生成したり 色々なオーバーロード ( 同一のスコープ内で同一の関数や演算子に複数の定義を与える事 即ち 同じ名称で 引数の異なる形式 ) が存在する -9-

Graphics オブジェクトの DrawLine メソッドに依る直線の描画 座標ペアで指定された 2 点を結ぶ直線を描画するメソッド GraphicsObject.DrawLine( ペン, 始点 X 座標, 始点 Y 座標, 終点 X 座標, 終点 Y 座標 ) 始点座標と終点座標を結ぶ直線を 指定したペンで描画する 引数のペンには 直線の色 幅 スタイルを指定する Pen オブジェクトを指定する 引数の始点 X 座標には 一方の点の X 座標を指定する 引数の始点 Y 座標には 一方の点の Y 座標を指定する 引数の終点 X 座標には 他方の点の X 座標を指定する 引数の終点 Y 座標には 他方の点の Y 座標を指定する 座標は Integer 型 Single 型の孰れでも指定する事が出来るが 両者を混在する事は出来ない 猶 各点を Point 構造体で指定する事も出来る Graphics オブジェクトには 多彩な描画メソッドが用意されて居るが Visual Basic 6.0 の様に 点を描画する Pset メソッドは用意されて居ない 併し 始点を終点に同じ点を指定する事に依り 点を描画する事が出来るので 特に問題は無い Bitmap オブジェクトの SetPixel メソッドを使用すれば 点の描画を行う事が出来る Graphics オブジェクトの Clear メソッドに依る描画面のクリア 描画面全体を消去し 指定した背景色で塗り潰すメソッド GraphicsObject.Clear( 塗潰色 ) Color 構造体で指定した色で 描画面全体を塗潰す 引数の塗潰色には 描画面全体を塗潰す色を Color 構造体で指定する Control オブジェクトの Refresh メソッドに依る描画面の再描画 コントロールを再描画するメソッド Control.Refresh( ) 強制的に コントロールがクライアント領域を無効化し 直後に其のコントロール自体と其の子コントロールを再描画する Visual Basic 6.0 の様に フォームやピクチャボックスに AutoRedraw プロパティが無い為 此等のコントロールに Graphics オブジェクトを通じて描画した場合 当該コントロールを Refresh メソッドを用いて再描画しないと 描画が反映されないので注意を要する -10-

Color 構造体に依る色の指定 ( 再掲 ) Color 構造体のプロパティを使用してシステム定義色を指定する方法 約 140 色が システム定義色と仕て Color 構造体のプロパティに定義されて居る 此れを使用して 色を指定するは 下記の通りで有る :[System.Drawing.]Color. プロパティ記述例 :[System.Drawing.]Color.Red 猶 System.Drawing 名前空間は 既定で参照設定される為 特に名前の衝突が起こらない限り 記述する必要は無い ( 以下同じ ) Color 構造体のメソッドを使用してユーザー定義色を指定する方法 ユーザ定義色を指定する FromArgb メソッドのは 下記の通りで有る :[System.Drawing.]Color.FromArgb( アルファブレンド, 赤の要素, 緑の要素, 青の要素 ) 記述例 :[System.Drawing.]Color.FromArgb(128, 255, 0, 0 ) 夫々れの引数には 0~255 迄の整数の値を指定する アルファブレンドは 省略する事が可能で 省略した場合は 255( 不透明 ) を指定した事に成る 上記以外にも SystemColors クラスのプロパティを使用してシステムカラー ( 例えば タイトルバーの色に設定されて居る色 ) を指定する方法や ColorTranslator クラスの FromOLE メソッドを使用して従来の方法で色を指定する方法が有る [System.Drawing.] SystemColors.ScrollBar [System.Drawing.]ColorTranslator.FromOLE(VB6.QBColor(14 ) [System.Drawing.]ColorTranslator.FromOLE(VB6.RGB(255, 0, 0 ) [System.Drawing.]ColorTranslator.FromOLE(&HFF80FF) 一般に Color 構造体のプロパティやメソッドを使用して色の指定を行う事が多い MouseEventArgs クラスのメンバ MouseEventArgs クラスは MouseUp MouseDown MouseMove の各イベントのデータを提供するクラスで 下記のメンバが有る Button Clicks Delta X Y マウスのどのボタンが押されたかを示す値 ( 下記 ) を取得する MouseButtons.Left: マウスの左ボタンが押された MouseButtons.Middle: マウスの中央ボタンが押された MouseButtons.None: マウスボタンは押されて居ない MouseButtons.Right: マウスの右ボタンが押された マウスボタンが押されて離された回数を取得する マウスホイールの回転回数を表す符合付きの数値を取得する マウスホイールのノッチ 1 つ分が 1 移動量に相当する マウスがクリックされた位置の x 座標を取得する マウスがクリックされた位置の y 座標を取得する -11-

座標系 GDI+ では ワールド座標空間 ページ座標空間 及び デバイス座標空間の 3 種類を使用する mygraphics.drawline( mypen, 0, 0, 160, 80 ) を呼び出す場合 DrawLine メソッドに渡す点 (0, 0) と点 (160, 80) は ワールド座標空間内の点で有る GDI+ が画面上に直線を描画する前に 此の座標に対して一連の変換処理が適用される ワールド座標がページ座標に変換され 次にページ座標がデバイス座標に変換される クライアント領域の左上隅ではなく内側に原点が有る座標系を使用するとする 例えば クライアント領域の左端から 100 ピクセル 上端から 50 ピクセルの点を原点にした場合の座標系を 下左図に示す mygraphics.drawline( mypen, 0, 0, 160, 80 ) を呼び出すと 下右図に示す直線が描画される 此の直線の端点の座標は 3 種の座標空間では 夫々れ下記の様に成る ワールド (0, 0) ~ (160, 80) ページ (100, 50) ~ (260, 130) デバイス (100, 50) ~ (260, 130) ページ座標空間の原点は 常にクライアント領域の左上隅で有る 亦 単位がピクセルで有る為 デバイス座標はページ座標と同じに成る 単位をピクセル以外のインチ等に設定すると デバイス座標はページ座標と異なる値に成る ワールド座標からページ座標への変換をワールド変換と呼び 此の変換は Graphics クラスの Transform プロパティが保持する 上の例のワールド変換は x 方向に 100 単位 y 方向に 50 単位の平行移動で有る Graphics オブジェクトのワールド変換を設定し 其の Graphics オブジェクトを使用して上図に示す直線を描画する例を下記に示す mygraphics.translatetransform( 100, 50 ) mygraphics.drawline( mypen, 0, 0, 160, 80 ) ページ座標からデバイス座標への変換をページ変換と呼ぶ Graphics クラスには ページ変換を操作する為の PageUnit プロパティと PageScale プロパティが有る Graphics クラスは ディスプレイデバイスの水平方向 及び 垂直方向の dpi( インチ毎のドット数 ) を調べる為に DpiX と DpiY の 2 個の読み取り専用プロパティも提供して居る Graphics クラスの PageUnit プロパティを使用して ピクセル以外の単位を指定する事が出来る (0, 0) から (2, 1) 迄 直線を描画する例を下記に示す 此処で 点 (2, 1) は 点 (0, 0) から右に 2 インチ 下に 1 インチの位置に有る -12-

mygraphics.pageunit = GraphicsUnit.Inch mygraphics.drawline( mypen, 0, 0, 2, 1 ) ペンを構築する時にペン幅を指定しないと 上記の例では 1 インチ幅の直線が描画される ペンの幅は 下記に示す様に Pen コンストラクタの 2 番目の引数で指定する事が出来る Dim mypen As New Pen( Color.Black, 1 / mygraphics.dpix ) ディスプレイデバイスの dpi が水平方向で 96 ドット 垂直方向で 96 ドットで有ると仮定すると 上記の例で示した直線の端点の座標は 3 種の座標空間では 夫々れ下記の様に成る ワールド (0, 0) ~ (2, 1) ページ (0, 0) ~ (2, 1) デバイス (0, 0) ~ (192, 96) ワールド座標空間の原点はクライアント領域の左上隅で有る為 ページ座標はワールド座標と同じに成る 様々な効果を得る為に ワールド変換とページ変換を組み合わせて実行する事も出来る 例えば 単位と仕てインチを使用し 座標系の原点と仕て クライアント領域の左端から 2 インチ 上端から 1/2 インチの点を使用するとする Graphics オブジェクトのワールド変換とページ変換を設定し (0, 0) から (2, 1) 迄 直線を描画する例を下記に示す mygraphics.translatetransform( 2, 0.5F ) mygraphics.pageunit = GraphicsUnit.Inch mygraphics.drawline( mypen, 0, 0, 2, 1 ) ディスプレイデバイスの dpi が水平方向で 96 ドット 垂直方向で 96 ドットで有ると仮定すると 上記の例で示した直線の端点の座標は 3 種の座標空間では 夫々れ下記の様に成る ワールド (0, 0) ~ (2, 1) ページ (2, 0.5) ~ (4, 1.5) デバイス (192, 48) ~ (384, 144) -13-