Delphi Programming / Object Pascal
[掲載 2009年05月27日] [更新 2013年12月18日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
オートシェイプの描画 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
シートにオートシェイプを描画するサンプルです.FillFormat,ShadowFormat 等のオブジェクトを使用します.半透明は均一な色の図形および線にだけに対して有効なプロパティです.位置とサイズはポイント数で指定します.
オートシェイプは,エクセルのバージョンによって,同じコードでもデフォルトの色や線の太さ等に違いがあるようです.Excel 2000 当時に作成したものを Excel 2010 でテストしたのですが,同じ様にするのに苦労しました. |
|
図1
実行前のシート |
半透明の楕円の描画例です.Fill プロパティを FillFormat オブジェクト型でキャストしています. |
|
図2
実行結果 |
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
AShape : Txlf2000Shape;
begin
//位置とサイズの指定はポイント
AShape := xlfExcelSheet.Shapes.AddShape(msoShapeOval, 40, 20, 100, 100);
//枠線の色
(AShape.Line as LineFormat).ForeColor.RGB := RGB(0,150,0);
//塗潰しの色と透明度
(AShape.Fill as FillFormat).ForeColor.RGB := RGB(0,150,0);
(AShape.Fill as FillFormat).Transparency := 0.5;
end;
OleVariant 型を使用したオートシェイプの描画 |
実行結果は上のコードと同じですが,Shape オブジェクトを OleVariant 型にして操作します.
こうすると型キャストが必要ありません. |
[備考]
Fill プロパティは,上のコードのように,FillFormat オブジェクトのことです. |
procedure TplExcelFormEx1.Button2Click(Sender: TObject);
var
AShape : OleVariant;
begin
//位置とサイズの指定はポイント
AShape := xlfExcelSheet.Shapes.AddShape(msoShapeOval, 40, 20, 100, 100);
//枠線の色
AShape.Line.ForeColor.RGB := RGB(0, 150, 0);
//塗潰しの色と透明度
AShape.Fill.ForeColor.RGB := RGB(0, 150, 0);
AShape.Fill.Transparency := 0.5;
end;
|
図3
実行結果 |
procedure TplExcelFormEx1.Button3Click(Sender: TObject);
var
AShape : OleVariant;
begin
AShape := xlfExcelSheet.Shapes.AddShape(msoShapeRectangle, 50, 20, 72, 72);
AShape.Name := 'Grad Square';
AShape.Fill.ForeColor.RGB := RGB(200, 200, 200);
AShape.Line.Weight := 1;
AShape.Fill.OneColorGradient(msoGradientHorizontal, 1, 1);
end;
|
図4
実行結果 |
procedure TplExcelFormEx1.Button4Click(Sender: TObject);
var
AShape : OleVariant;
begin
AShape := xlfExcelSheet.Shapes.AddShape(msoShapeRectangle, 50, 10, 80, 120);
AShape.Fill.ForeColor.RGB := RGB(250, 250, 250);
AShape.Line.Weight := 1;
AShape.Line.ForeColor.RGB := RGB(200, 200, 200);
AShape.Shadow.OffsetX := 5;
AShape.Shadow.OffsetY := -3;
AShape.Shadow.Transparency := 0.7;
AShape.Shadow.Visible := msoTrue;
end;
|