На этом шаге мы рассмотрим изменение типа созданной геометрической фигуры.
Создав однажды геометрическую фигуру, можно изменить ее внешний вид, изменив значение ее стиля. При этом остальные параметры, например толщина и цвет линий, а также текст, останутся без изменений, если новый тип предполагает их наличие. Для изменения типа фигуры достаточно изменения типа фигуры достаточно изменить свойство AutoShapeType объекта, записав в него новое значение. Эффект будет таким же, как при создании нового объекта.
Последняя процедура следующего приложения меняет тип созданной ранее геометрической фигуры.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ComCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button6: TButton; ListBox1: TListBox; Label1: TLabel; Button3: TButton; Label2: TLabel; Edit1: TEdit; UpDown1: TUpDown; Memo1: TMemo; Label3: TLabel; Button4: TButton; Label4: TLabel; Edit2: TEdit; UpDown2: TUpDown; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; SP:Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание фигуры var left,top:Extended; begin left:=10; top:=11; if W.ActiveDocument.Shapes.Count>0 then begin if W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+ 2*(W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10)< W.ActiveDocument.PageSetup.PageWidth then begin left:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+ W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10; top :=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top; end else begin left:=10; top:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top+ W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Height+10.15; end; end; W.ActiveDocument.Shapes.AddShape(StrToInt(Edit1.Text),left, top, 200, 100, W.ActiveDocument.Range); end; procedure TForm1.Button2Click(Sender: TObject); //Создание нового документа begin W:=CreateOleObject('Word.Application'); W.Visible:=True; W.Documents.Add; end; procedure TForm1.Button6Click(Sender: TObject); //Выход begin W.Quit; Close; end; procedure TForm1.Button3Click(Sender: TObject); // Загружаем в ListBoxl имена объектов коллекции Shapes //из документа Word. var a: Integer; begin ListBox1.Items.Clear; for a:=1 to W.ActiveDocument.Shapes.Count do ListBox1.Items.Add(W.ActiveDocument.Shapes.Item(a).Name); end; procedure TForm1.ListBox1Click(Sender: TObject); // При активизации строки объекта ListBox1, используя имя объекта, // выделяем его из коллекции Shapes и записываем ссылку на этот объект //в переменную SP. begin W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]).Select; SP:=W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.Button4Click(Sender: TObject); //Добавление текста в выбранную фигуру begin SP.TextFrame.TextRange.Text:=Memo1.Text; end; procedure TForm1.Button5Click(Sender: TObject); //Изменение типа выбранной фигуры begin SP.AutoShapeType:=StrToInt(Edit2.Text); end; end.
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Текст, размещенный в полученной фигуре, может автоматически измениться, чтобы вписаться в размеры новой фигуры.
На следующем шаге мы рассмотрим изпользование внешних объектов.