Delphi Programming / Object Pascal
[掲載 2009年05月12日] [更新 2013年11月28日] ワード操作フォームEx |
ワード操作フォームEx 参考コード類
表・図・テキストボックスの番号や名前 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE2 + Word 2010 |
図の名前は作成順に付けられます.変更出来ません.開発時にはこの名前を知らないと図に対して操作ができません.以下は文書内の図の番号と名前を順番に取得して表示します. |
procedure TplWordFormEx2.Button1Click(Sender: TObject);
var
AShape : Twdf2000Shape;
i : Integer;
iOle : OleVariant;
strText : String;
begin
for i := 1 to wdfWordDoc.Shapes.Count do begin
iOle := i;
AShape := wdfWordDoc.Shapes.Item(iOle);
//type_がmsoPictureとワードアートだけを検出
if (AShape.type_ = msoPicture) or (AShape.type_ = msoTextEffect) then begin
AShape.Select(EmptyParam);
strText := '番号: ' + IntToStr(i) + ' 名前: ' + AShape.Name;
MessageBox(Handle, PChar(StrText), '情報', MB_ICONINFORMATION);
end;
end;
end;
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
AShape : Twdf2000Shape;
i : Integer;
iOle : OleVariant;
strText : String;
begin
//Shapeオブジェクトがない場合は中止
if wdfWordDoc.Shapes.Count < 1 then exit;
//選択中のShapeオブジェクトを検索していく
//インラインShapeが選択中だとエラー
try
for i := 1 to wdfWordApp.Selection.ShapeRange.Count do begin
iOle := i;
AShape := wdfWordApp.Selection.ShapeRange.Item(iOle);
//type_がmsoPictureとワードアートだけを検出
if (AShape.type_ = msoPicture) or (AShape.type_ = msoTextEffect) then begin
strText := '番号: ' + IntToStr(i) + ' 名前: ' + AShape.Name;
MessageBox(Handle, PChar(StrText), '情報', MB_ICONINFORMATION);
end;
end;
except
end;
end;
同じく文書中の図の番号だけを取得するサンプルです.
ただし,以下のコードはインラインシェイプ (InlineShape) の場合です.InlineShape は,位置を固定した図,画像のことです.マウスで掴んで文書内の他の場所に移動できません. |
procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
AShape : Word2000.InlineShape;
i : Integer;
strText : String;
begin
for i := 1 to wdfWordDoc.InlineShapes.Count do begin
AShape := wdfWordDoc.InlineShapes.Item(i);
AShape.Select;
strText := '番号: ' + IntToStr(i) + ' タイプ: ' + IntToStr(AShape.type_);
MessageBox(Handle, PChar(StrText), '情報', MB_ICONINFORMATION);
end;
end;
同じくインラインシェイプですが,選択中の図の番号を取得して表示します. |
procedure TplWordFormEx2.Button4Click(Sender: TObject);
var
AShape : Word2000.InlineShape;
i : Integer;
strText : String;
begin
//選択中のインラインシェイプを検索
for i := 1 to wdfWordApp.Selection.InlineShapes.Count do begin
AShape := wdfWordApp.Selection.InlineShapes.Item(i);
strText := '番号: ' + IntToStr(i) + ' タイプ: ' + IntToStr(AShape.type_);
MessageBox(Handle, PChar(StrText), '情報', MB_ICONINFORMATION);
end;
end;
テキストボックスの番号と名前も作成順に付けられます.変更出来ません.開発時にはこの番号または名前を知らないと操作ができません.
次のコードは,そのテキストボックスの番号と名前を取得してテキストボックス内に描画します.このコードはグループ化したテキストボックスには利用できません. |
procedure TplWordFormEx2.Button1Click(Sender: TObject);
var
AShape : Twdf2000Shape;
i : Integer;
iOle : OleVariant;
begin
for i := 1 to wdfWordDoc.Shapes.Count do begin
iOle := i;
AShape := wdfWordDoc.Shapes.Item(iOle);
AShape.Select(EmptyParam);
try
AShape.TextFrame.TextRange.Font.Size := 20;
AShape.TextFrame.TextRange.Text := VarToStr(i) + sLineBreak + AShape.Name;
except
end;
end;
end;
同じくテキストボックスのサンプルですが,選択中のテキストボックスだけの番号と名前を取得して,それをそのテキストボックスに表示します.
上のサンプルと同じく,グループ化したテキストボックスには利用できません. |
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
AShape : Twdf2000Shape;
i : Integer;
iOle : OleVariant;
strText : String;
begin
//Shapeオブジェクトがない場合は中止
if wdfWordDoc.Shapes.Count < 1 then exit;
//選択中のShapeオブジェクトを検索していく
//インラインShapeが選択中だとエラー
try
for i := 1 to wdfWordApp.Selection.ShapeRange.Count do begin
iOle := i;
AShape := wdfWordApp.Selection.ShapeRange.Item(iOle);
//type_がmsoTextBoxだけを検出
if (AShape.type_ = msoTextBox) then begin
strText := '番号: ' + IntToStr(i) + ' 名前: ' + AShape.Name;
AShape.TextFrame.TextRange.Font.Size := 20;
AShape.TextFrame.TextRange.Text := VarToStr(i) + sLineBreak + AShape.Name;
end;
end;
except
end;
end;
表の番号は作成順に付けられます.変更出来ません.開発時にはこの番号を知らないと表に対する操作ができません.
次のコードは,文書内の表の表番号を取得して,その表のセルにその番号を表示します. |
procedure TplWordFormEx2.Button1Click(Sender: TObject);
var
pTable : OleVariant;
pRow : OleVariant;
pCol : OleVariant;
i : Integer;
StrText : String;
begin
pRow := 1;;
pCol := 1;
//表の番号も行と列の数値も1から始まることに注意
for i := 1 to wdfWordDoc.Tables.Count do begin
pTable := i;
StrText := IntToStr(i) + '番目の表';
wdfWordDoc.Tables.Item(pTable).Cell(pRow,pCol).Range.Text := StrText;
end;
end;
Shape オブジェクトの ConvertToShape メソッドを使用すると,以下のように InlineShape を Shape に変換できます.
逆の変換は ConvertToInlineShape を使用します. |
procedure TplWordFormEx2.Button5Click(Sender: TObject);
var
AShape : Word2000.InlineShape;
i : Integer;
begin
try
for i := 1 to wdfWordDoc.InlineShapes.Count do begin
AShape := wdfWordDoc.InlineShapes.Item(i);
AShape.ConvertToShape;
end;
except
end;
end;
|