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

前回は,Delphiの勉強をしたので,いよいよアプリ作りだー.

さて,イキナリですが,MDIで作ります.
1からつくるとメンドイので,「ファイル」-「新規作成」-「プロジェクト」-「MDIアプリケーション」で ぽちぽちっとな.

プロジェクト-MDI

うーん,これで,簡単にMDIアプリ作れるのはいいとして,どうやってプロジェクト名変えれるの?
わかんねー…
自動的に作られる「Mdiapp.dpr」ファイルの,
program Mdiapp ;
program ChipEditer ;
にしてぇ,ファイル名も「ChipEditer.dpr」に変更したらぁ,一応変更できたけどぉ…

もっと簡単な方法があったら(あるはず!!),教えてください.ホントに.


さて,今回はドット絵エディタなので,子ウィンドウ(ChildWin.pasのTMDIChildクラス)の「TMemo」コンポーネントは要りません.
即デリ!!
代わりに,「Additional」-「TImage」コンポーネントを貼り付けまひょ.

ぺたりぺたり.

えーと,名前は,「FFrontImg」にしまひょ.
それ以外のプロパティは特にいじる必要はないっすね.

画像データに関して言えば,最終的には,子ウィンドウには以下のようなデータを持たせました.

役目名前クラス備考
表画面FFrontImgTImage目に見える画像.さっき貼り付けたヤツ.
画像データ本体FBackBmpTBitmap最終的にこのデータを保存することになります.
また,画像の編集はこのデータに対して行います.
画像データバックアップFBackBackupTBitmap一時的にFBackBmpをコピーするとこ.なにかと利用します.
クリップ画像FClipBmpTBitmap画像の移動とか,ペーストの際に使用します.
名前は実際のプログラムで使用したものです.(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...