Изменение CheckBox в Word через Delphi

26.04.2011
Иногда бывает так, что через программу надо не только редактировать/добавлять текст в MS Word. Но и посредством CheckBox'ов отмечать какие либо пункты. Об этом мы и поговорим.

Подготовка


Порывшись в Google я не нашёл ничего интересного по этому поводу, кроме одного алгоритма, который предлагал каждый раз перебирать все объекты которые есть в документе и проверять - является ли он тем, который нам нужен. А мой способ немного другой. Допустим что у нас есть уже готовый документ, в нём есть пять CheckBox'ов и первое что мы сделаем - добавим закладки (Вставка-Закладка), выбираем нужный CheckBox и добавляем закладку с именем "Флажок1" и т.д., что бы в итоге у каждого CheckBox'a была своя закладка с порядковым номером.

Переход к закладке


Первым делом сделаем небольшую процедуру, которая будет перемещать курсор в Word'е между закладками. В качестве входного параметра будем получать имя закладки, к которой надо перейти.
procedure TForm1.WordGotoBookmark(Bookmark: string);

var
What: OLEVariant;
Which: OLEVariant;
Count: OLEVariant;
Name: OLEVariant;
begin
What := wdGoToBookmark;
Which := unAssigned;
Count := unAssigned;
Name := Bookmark;
WordApplication1.Selection.GoTo_(What, Which, Count, Name);
end;


Отмечаем


Итак, подготовительные работы готовы и надеюсь, как подключиться к Word вы знаете и этот фрагмент кода писать не будем, а перейдём к небольшому циклу, который будет отмечать все наши CheckBox.
for i := 1 to 5 do

begin
WordGotoBookmark('Флажок' + i);
v1 := WordApplication1.Selection.InlineShapes.Item(1).OLEFormat.Object_;
v1.Value := true;
end;

Здесь i естественно будет типа Byte, а v1 типа OleVariant. i перебираем от 1 до 5, т.к. у нас 5 закладок на 5 CheckBox и соответственно надо 5 итерации чтобы все их отметить. В третьей строчке производится непосредственно переход к закладке с цифрой i на конце.
В четвёртой выбираем объект с индексом 1, т.к. в каждой закладке у нас только один CheckBox и других объектов там нет и как следствие индекс у нас всегда равен 1. Если же закладка у вас на диапазон в котором несколько объектов, то обращаемся к ним надо начиная с левого: Item(1), Item(2) и т.д.
А в пятой мы работаем с свойствами выбранного объекта, в данном случае это CheckBox и его свойство Value, которое как раз отвечает за то, отмечен он или нет.
P.S. Ещё, я бы посоветовал ставить закладки на диапозон включающий в себя CheckBox и символ перед ним, на работу программы это не повлияет, но работать с ними будет удобнее.