Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WordArt в Delphi 7, вставка WordArt в Delphi 7 и мспользован 
:(
    Опции темы
Winprogrammer
Дата 3.1.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



Доброго времени суток!

Есть проблем. Мне нужно в приложение вставить обьект WordArt и научиться работать с ним. Это срочно.

Заранее спасибо.
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Albinos_x
Дата 3.1.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Код
...
var FBold,FItalic:OleVariant;
...
FBold:=-1;
FItalic:=0;
WordDocument1.Shapes.AddTextEffect(msoTextEffect9, 'Hello!!!', 'Arial', 30, FBold, FItalic, 281.25, 120.75, EmptyParam);
...


1 параметр - msoTextEffect1 ..  msoTextEffect30 константы объявлены в OfficeXP = (0 .. 29) стиль WordArt, плюс к этому есть ещё эффект msoTextEffectMixed = -2 

2 параметр - текст WordArt
3 параметр - шрифт
4 параметр - размер шрифта
5 параметр - стиль шрифта - жирный (0 - не жирный, -1 - жирный)
6 параметр - стиль шрифта - курсив (0 - не курсив, -1 - курсив)
7 и 8 параметры - положение слева и сверху соответственно
9 параметр - Anchor - я так понимаю положение в тексте

возвращает функция объект типа Shape


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Winprogrammer
Дата 3.1.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



Цитата(Albinos_x @ 3.1.2007,  12:15)
Код
...
var FBold,FItalic:OleVariant;
...
FBold:=-1;
FItalic:=0;
WordDocument1.Shapes.AddTextEffect(msoTextEffect9, 'Hello!!!', 'Arial', 30, FBold, FItalic, 281.25, 120.75, EmptyParam);
...


1 параметр - msoTextEffect1 ..  msoTextEffect30 константы объявлены в OfficeXP = (0 .. 29) стиль WordArt, плюс к этому есть ещё эффект msoTextEffectMixed = -2 

2 параметр - текст WordArt
3 параметр - шрифт
4 параметр - размер шрифта
5 параметр - стиль шрифта - жирный (0 - не жирный, -1 - жирный)
6 параметр - стиль шрифта - курсив (0 - не курсив, -1 - курсив)
7 и 8 параметры - положение слева и сверху соответственно
9 параметр - Anchor - я так понимаю положение в тексте

возвращает функция объект типа Shape

Так-то оно всё хорошо. Но как прочитать этот Shape? Как мне перерисовать всё с этого Shape' а к себе на канву???
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Albinos_x
Дата 3.1.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



цитирую из своеё статьи:
Цитата

Получение рисунка из документа

Рисунок можно не только заносить, но и получать из Word. Вставленные в Word формулы, также являются рисунками. Покажу пример получение рисунка со свойством обтекания текста – в тексте:
var c, i:Integer;
    OlF:OLEFormat;
…
WordDocument1.Content.Select;
// количество рисунков
c:=WordDocument1.Range.InlineShapes.Count;
Caption:=inttostr(‘количество рисунков - ’+c);
for i:=1 to c do
   begin
   WordDocument1.Range.InlineShapes.Item(i).Range.CopyAsPicture;
// для примера сделано только для 2-х рисунков
// рисунок 1
   if i=1 then
      Image1.Picture.Assign(Clipboard);
   Application.ProcessMessages;
// рисунок 2
   if i=2 then
      Image2.Picture.Assign(Clipboard);
// здесь записываем в memo1 тип и формат объекта
   OlF:=WordApplication1.Selection.InlineShapes.Item(i).OLEFormat;
      s:='';
   s:=Inttostr(WordApplication1.Selection.InlineShapes.Item(i).type_);
   if WordApplication1.Selection.InlineShapes.Item(i).OLEFormat<>nil then
      begin
      s:=s+' = ' +OlF.ClassType;
      end;
   memo1.Lines.add(s);
….

Для вставленной формулы тип объекта = 1, OLEFormat = Equation.3
Для вставленной картинки тип объекта = 3 , OLEFormat = nil

Для обращения к нужному объекту, например CheckBox1 нужно действовать по аналогии. Только ClassType для него будет равен 'Forms.CheckBox.1' (к первому например)... а далее всё просто... находим нужный элемент и обращаемся к нужному свойству:

...
procedure TForm1.Button1Click(Sender: TObject);
var c, i:Integer;
      F:OleVariant;
begin
if not OpenDialog1.Execute then exit;
f:=OpenDialog1.FileName   ;
WordApplication1.ConnectKind:=ckNewInstance;
WordApplication1.AutoQuit:=false;
WordApplication1.Visible:=true;
WordApplication1.AutoConnect:=true;
WordDocument1.ConnectTo(WordApplication1.Documents.Open(f, EmptyParam, 
                                                                 EmptyParam, EmptyParam, EmptyParam,
                                                                 EmptyParam,EmptyParam,EmptyParam,
                                                  EmptyParam, EmptyParam, EmptyParam,EmptyParam, 
                                                                EmptyParam,EmptyParam,EmptyParam));
Application.ProcessMessages;
WordDocument1.Content.Select;
c:=WordDocument1.Range.InlineShapes.Count;
Caption:=inttostr©;
for i:=1 to c do
   begin
   if WordApplication1.Selection.InlineShapes.Item(i).OLEFormat<>nil then
      begin
      if OlF.ClassType='Forms.CheckBox.1' then
         begin
         f:=WordApplication1.Selection.InlineShapes.Item(i).OLEFormat.Object_;
         F.Value:=True;
         end;
      end;
   end;
end;
...



WordArt - Для вставленной картинки тип объекта = 3

Добавлено @ 14:47 
последнии версии статьи
можно скачать здесь
здесь
или здесь


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 3.1.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



или подождать пока выйдет DRKB 3.0... smile 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Winprogrammer
Дата 4.1.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



Цитата(Albinos_x @ 3.1.2007,  14:35)
цитирую из своеё статьи:
Цитата

Получение рисунка из документа

Рисунок можно не только заносить, но и получать из Word. Вставленные в Word формулы, также являются рисунками. Покажу пример получение рисунка со свойством обтекания текста – в тексте:
var c, i:Integer;
    OlF:OLEFormat;
…
WordDocument1.Content.Select;
// количество рисунков
c:=WordDocument1.Range.InlineShapes.Count;
Caption:=inttostr(‘количество рисунков - ’+c);
for i:=1 to c do
   begin
   WordDocument1.Range.InlineShapes.Item(i).Range.CopyAsPicture;
// для примера сделано только для 2-х рисунков
// рисунок 1
   if i=1 then
      Image1.Picture.Assign(Clipboard);
   Application.ProcessMessages;
// рисунок 2
   if i=2 then
      Image2.Picture.Assign(Clipboard);
// здесь записываем в memo1 тип и формат объекта
   OlF:=WordApplication1.Selection.InlineShapes.Item(i).OLEFormat;
      s:='';
   s:=Inttostr(WordApplication1.Selection.InlineShapes.Item(i).type_);
   if WordApplication1.Selection.InlineShapes.Item(i).OLEFormat<>nil then
      begin
      s:=s+' = ' +OlF.ClassType;
      end;
   memo1.Lines.add(s);
….

Для вставленной формулы тип объекта = 1, OLEFormat = Equation.3
Для вставленной картинки тип объекта = 3 , OLEFormat = nil

Для обращения к нужному объекту, например CheckBox1 нужно действовать по аналогии. Только ClassType для него будет равен 'Forms.CheckBox.1' (к первому например)... а далее всё просто... находим нужный элемент и обращаемся к нужному свойству:

...
procedure TForm1.Button1Click(Sender: TObject);
var c, i:Integer;
      F:OleVariant;
begin
if not OpenDialog1.Execute then exit;
f:=OpenDialog1.FileName   ;
WordApplication1.ConnectKind:=ckNewInstance;
WordApplication1.AutoQuit:=false;
WordApplication1.Visible:=true;
WordApplication1.AutoConnect:=true;
WordDocument1.ConnectTo(WordApplication1.Documents.Open(f, EmptyParam, 
                                                                 EmptyParam, EmptyParam, EmptyParam,
                                                                 EmptyParam,EmptyParam,EmptyParam,
                                                  EmptyParam, EmptyParam, EmptyParam,EmptyParam, 
                                                                EmptyParam,EmptyParam,EmptyParam));
Application.ProcessMessages;
WordDocument1.Content.Select;
c:=WordDocument1.Range.InlineShapes.Count;
Caption:=inttostr©;
for i:=1 to c do
   begin
   if WordApplication1.Selection.InlineShapes.Item(i).OLEFormat<>nil then
      begin
      if OlF.ClassType='Forms.CheckBox.1' then
         begin
         f:=WordApplication1.Selection.InlineShapes.Item(i).OLEFormat.Object_;
         F.Value:=True;
         end;
      end;
   end;
end;
...



WordArt - Для вставленной картинки тип объекта = 3

Добавлено @ 14:47 
последнии версии статьи
можно скачать здесь
здесь
или здесь

Благодарю за помощь.

Еще один вопросик. Как показать таблицу выбора нужного обьекта WordArt и узнать какой обьект выбрал пользователь?
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Albinos_x
Дата 4.1.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата(Winprogrammer @  4.1.2007,  11:54 Найти цитируемый пост)
узнать какой обьект выбрал пользователь

Код

ccc:=WordApplication1.Selection.InlineShapes.Item(i).TextEffect.PresetTextEffect


Ccc:Integer; - в неё будет возвращаться тип :
Цитата(Albinos_x @  3.1.2007,  12:15 Найти цитируемый пост)
msoTextEffect1 ..  msoTextEffect30 константы объявлены в OfficeXP = (0 .. 29)


Цитата(Winprogrammer @  4.1.2007,  11:54 Найти цитируемый пост)
Как показать таблицу выбора нужного обьекта WordArt

попробуй покапаться в диалогах...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Winprogrammer
Дата 5.1.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



Цитата(Albinos_x @ 4.1.2007,  18:12)
попробуй покапаться в диалогах...

В диалогах не нашел. Може это ActiveX компонент Ворды и к нему нужен другой, особый подход?
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Albinos_x
Дата 9.1.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



может... но каков подход не знаю...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Winprogrammer
Дата 9.1.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



Цитата(Albinos_x @ 9.1.2007,  20:29)
может... но каков подход не знаю...

А как тогда? Ну очень хочется юзать WordArt в своей проге?????????
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0990 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.