ドット絵エディタを作る(MDIでつくるぞ編)
前回は,Delphiの勉強をしたので,いよいよアプリ作りだー.
さて,イキナリですが,MDIで作ります.
1からつくるとメンドイので,「ファイル」-「新規作成」-「プロジェクト」-「MDIアプリケーション」で
ぽちぽちっとな.
うーん,これで,簡単にMDIアプリ作れるのはいいとして,どうやってプロジェクト名変えれるの?
わかんねー…
自動的に作られる「Mdiapp.dpr」ファイルの,
program Mdiapp ;
を
program ChipEditer ;
にしてぇ,ファイル名も「ChipEditer.dpr」に変更したらぁ,一応変更できたけどぉ…
もっと簡単な方法があったら(あるはず!!),教えてください.ホントに.
さて,今回はドット絵エディタなので,子ウィンドウ(ChildWin.pasのTMDIChildクラス)の「TMemo」コンポーネントは要りません.
即デリ!!
代わりに,「Additional」-「TImage」コンポーネントを貼り付けまひょ.
ぺたり.
えーと,名前は,「FFrontImg」にしまひょ.
それ以外のプロパティは特にいじる必要はないっすね.
画像データに関して言えば,最終的には,子ウィンドウには以下のようなデータを持たせました.
| 役目 | 名前 | クラス | 備考 |
| 表画面 | FFrontImg | TImage | 目に見える画像.さっき貼り付けたヤツ. |
| 画像データ本体 | FBackBmp | TBitmap | 最終的にこのデータを保存することになります. また,画像の編集はこのデータに対して行います. |
| 画像データバックアップ | FBackBackup | TBitmap | 一時的にFBackBmpをコピーするとこ.なにかと利用します. |
| クリップ画像 | FClipBmp | TBitmap | 画像の移動とか,ペーストの際に使用します. |
名前は実際のプログラムで使用したものです.(Ver0.20現在)
えーと,表画面はVCL(コンポーネント)だから,自動的に作られるからいいとして,他のTBitmapのクラスは,
プログラムで,生成&破棄しないといけませんな.
というわけで,子ウィンドウの,「OnCreate」イベントと「OnDestroy」イベントを作ってそこで,生成&破棄しましょ.
こんな感じで.
procedure TMDIChild.FormCreate(Sender: TObject);
begin
FBackBmp := TBitmap.Create ;
end;
procedure TMDIChild.FormDestroy(Sender: TObject);
begin
FBackBmp.Free ; // FBackBmp が nil の時だけデストラクタを呼んでくれます.
FBackBmp := nil ;
end;
とりあえず,子ウィンドウの下準備はこんなもんかにゃ? (゚ω゚)?
さて,メインフレームから子ウィンドウにアクセスするには!?
MDI子ウィンドウに関するデータとして…
・MDIChildCount
・MDIChildren
があるみたいっす.
■MDIChildCount
開いている子ウィンドウの数.わかりやすー.
子ウィンドウが1つもなけれは,MDIChildCount=0 になるわけやね.
■MDIChildren
子ウィンドウ本体.
あたかも,配列であるかのようにアクセスできます.
しかも,現在アクティブな子ウィンドウがインデクス0の要素になります.わーお.
するってぇと,アクティブな子ウィンドウにアクセスする構文はこんな感じよネェ.
if ( MDIChildCount > 0 ) then begin
with MDIChildren[0] as TMDIChild do begin
// ここで子ウィンドウのメソッド呼び出したりする.
end;
end;
うーん,簡単よねー.
コレがVC++とかだったらどうなるのかなー?
この辺ちょっと比較して書いてみたいにゃー…
さて,MDIの基礎(?)もマスターしたので,次回は,実際にドットを打ってみよー!!
<< Back to Diary...