ドット絵エディタを作る(ドットを打つぞ編)

あぃ〜ン.
前回,MDIの基礎を学んだので(?),今日はいよいよドット打ちだー!! いえーぃ!
(゚ε゚(C=(`Д´ ) おらー!!!(テンションたけぇ)

あ.忘れてた.拡大表示機能.ま,いいか.あははー.

一応,後の拡張のために,Zoom プロパティを宣言しておきまひょ.
property Zoom : Integer read getZoom write setZoom ;
いまのところ,getZoom は1を返すってことで….
(後で,拡大表示機能をつけたら getZoom の中身変更します.)


それと,アプリ中で使用する共通データのクラスを作っておきましょ.
持たせるデータとしては,

 ・選択中のツール
 ・処理中かどうかを示すフラグ
 ・マウスドラッグ中かどうかをしめすフラグ

などかな?


とりあえず,今回は,ユニット名をUEditerDataとして,その中に,TToolDataというクラスを作成!
んで,TToolDataクラスを大域変数,g_ToolDataとしてインスタンス化.

じゃ,マウスがドラッグされたところにドットを打つぞ.

そのために,子ウィンドウにはりつけたTImageクラスで発生する以下のイベントを利用しよぉ.

 ・マウスボタンがおされた(描画処理開始)
 ・マウスが移動した(描画処理中)
 ・マウスボタンが離された(描画処理完了)


さてさて,それぞれ処理を考えてみよう.


■ マウスボタンが押された

ドラッグ中フラグを立てる.


■ マウスが移動した

まず,ドラッグ中かどうかを検査.
ドラッグ中で無ければ,その時点で終了します.

ドラッグ中なら,マウス移動先の座標を塗ります.
色はとりあえず黒で.
描画先は,画像データ本体のFBackBmp(TBitmap).
FBackBmp.Canvas.Pixels[x,y] := RGB(0,0,0) ;
うお.簡単…( ̄ロ ̄;)

そして,描画後に画面のFFrongImg(TImage)に反映させる.
今回はWinAPIを直接使って描画しよ.
StretchBlt( FFrontImg.Canvas.Handle, 0, 0, FFrontImg.Width, FFrontImg.Height,
            FBackBmp.Canvas.Handle,  0, 0,  FBackBmp.WIdth,  FBackBmp.Height, srccopy );
とりあえずこんなもんかにゃ?


■ マウスボタンが離された

ドラッグ中フラグをFalseにする.


基本的には,こんなもんで線が引ける…

って,ひけてねー!! ( ̄ロ ̄;)
線(ていうか点)がとぎれとぎれだよ…
減色したら色化けしちゃった.てへ.

まぁ…MoveTo,LineTo,使ってもいいんだけどね.
今回はソレはつかわなーい.
いろいろ考えてるからね…(ウソ)
でも,オリジナルの形状のペンとか使いたいときは,やっぱりMoveTo,LineToじゃムリじゃないかなぁ?

んじゃ,次回は「ブレゼンハムのアルゴリズム」使って線を引いてみよーかにゃ.



<< Back to Diary...