キャンバスを子プロシージャに渡すには?

解決


studio-take  2011-03-01 08:17:36  No: 40123

メタファイルを作りたいのですが、ひとつのプロシージャ内で処理する方法はわかったんですけど、詳細を細かく設定する文が多すぎて間違いが起きやすいので、子プロシージャに処理をさせたいと思っています。
子プロシージャに何を渡せばいいのかわかりません。
教えて頂けないでしょうか?
///////////////////////////////////////////
//親文
MergeMF := TMetaFile.Create;
with TMetafileCanvas.Create(MergeMF, 0) do
try
  //記述文

finally
  MergeMF.Free;
end;
//////////////////////////////////////////
//子プロシージャ
//[iTitle]とか"所属課リスト"ってところを引数で処理して再利用したいのです。
ItemT := Round(ItemList[iTitle].mmTop * DotY);
ItemB := Round((ItemList[iTitle].mmTop + ItemList[iTitle].mmHeight) * DotY);
ItemL := Round(ItemList[iTitle].mmLeft * DotX);
ItemR := Round((ItemList[iTitle].mmLeft + ItemList[iTitle].mmWidth) * DotX);
FieldRect := Rect(ItemL,ItemT,ItemR,ItemB);
Pen.Style := ItemList[iTitle].PenStyle;
Pen.Color := ItemList[iTitle].PenColor;
Pen.Width := ItemList[iTitle].PenWidth;
Brush.Style := ItemList[iTitle].BrushStyle;
Brush.Color := ItemList[iTitle].BrushColor;
case ItemList[iTitle].Shape of
  stRectAngle:Rectangle(FieldRect);
  stEllipse:Ellipse(FieldRect);
        stRoundRect:RoundRect(ItemL,ItemT,ItemR,ItemB,ItemList[iTitle].CornerRound,ItemList[iTitle].CornerRound);
else
  Brush.Style := bsClear;
end;
/文字の印字
Font.Name := ItemList[iTitle].FontName;
Font.Style:= ItemList[iTitle].FontStyle;
Font.Color:= ItemList[iTitle].FontColor;
Font.Size := ItemList[iTitle].FontSize;
//ShowMessage('iCode');
ExportText := '所属課リスト';
case ItemList[iTitle].Alignment of
        0:DrawTextEX(Handle,PChar(ExportText),Length(PChar(ExportText)),FieldRect,DT_SINGLELINE + DT_VCENTER + DT_LEFT,Nil);
        1:DrawTextEX(Handle,PChar(ExportText),Length(PChar(ExportText)),FieldRect,DT_SINGLELINE + DT_VCENTER + DT_CENTER,Nil);
        2:DrawTextEX(Handle,PChar(ExportText),Length(PChar(ExportText)),FieldRect,DT_SINGLELINE + DT_VCENTER + DT_RIGHT,Nil);
      end;


TS  2011-03-02 01:55:55  No: 40124

proceder Form1.test00(..);
var MCanvas:TMetafileCanvas;
    ..
begin
  ..
  MCanvas:= TMetafileCanvas.Create(MergeMF, 0);
  try
    test01(MCanvas,iTitle,listSt);
  ..
end;

proceder Form1.test01(MCanvas:TMetafileCanvas;iTitle,listSt:String);
begin
  ..
  with MCanvas do
    begin
      ..
      ExportText := listSt;
      ..
    end;
  ..
end;
 
で動きますかね。


studio-take  2011-03-02 07:02:09  No: 40125

ありがとうございました。
うまく動きました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加