ドット絵エディタを作る(ドットを打つぞ編)
あぃ〜ン.
前回,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...