All Forums
 Категория Visio
 Форум Вопросы и ответы
 Текст в шейпе
Author Previous Topic Topic Next Topic  

mers

Russia
159 Posts

Posted - 05/06/2005 :  10:28:20
Здравствуйте!
Можно ли программно изменить местоположение текста в шейпе?
т.е что бы он был не посередине, а стоял где-нить сбоку.
заранее спасибо :)

Edited by - mers on 05/06/2005 10:35:06

Digitall

Russia
389 Posts

Posted - 05/06/2005 :  10:39:24  Visit Digitall's Homepage
quote:
Originally posted by mers

Здравствуйте!
Можно ли программно изменить местоположение текста в шейпе?
т.е что бы он был не посередине, а стоял где-нить сбоку.
заранее спасибо :)


Приведу строчки из примера Туманова:

Sub tty()
ActivePage.Shapes(1).Cells("Para.HorzAlign") = 1 'выравнивание по середине
ActivePage.Shapes(1).Cells("Para.HorzAlign") = 2 'выравнивание справа
ActivePage.Shapes(1).Cells("Para.HorzAlign") = 0 'выравнивание слева
End Sub
Go to Top of Page

mers

Russia
159 Posts

Posted - 05/06/2005 :  10:48:40
нет, вы немного не поняли или я криво спросил
выравнивание.. это все понятно.
можно ли сделать так чтобы текст, который можно написать в шейпе был за пределами шейпа?
ну например стоял снизу шейпа... вроде как подпись?

Edited by - mers on 05/06/2005 10:56:41
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 05/06/2005 :  10:58:39  Visit Digitall's Homepage
quote:
Originally posted by mers

нет, вы немного не поняли или я криво спросил
выравнивание.. это все понятно.
можно ли сделать так чтобы текст, который можно написать в шейпе был за пределами шейпа?
ну например стоял снизу шейпа... вроде как подпись?



Sub Text_position()
Dim shpObj As Visio.Shape
Set pagsObj = ThisDocument.Pages
Set pagObj = pagsObj.Item(1)
Set selectObj = ActiveWindow.Selection
Set shpObj = ActiveWindow.Selection.Item(1)
Set celObj1 = shpObj.Cells("TxtPinX") 'назначаем ячейку
celObj1.Formula = "Width*0,5" 'сдвигаем по горизонтали
Set celObj1 = shpObj.Cells("TxtPinY") 'назначаем ячейку
celObj1.Formula = "Height*-0,5" 'сдвигаем по вертикали
End Sub

Можно и короче и изящнее, но это уже не ко мне...
Go to Top of Page

mers

Russia
159 Posts

Posted - 05/06/2005 :  11:57:35
т.е при таком подходе, насколько я понимаю, мы сдвигаем шейп в сторону, а текст остается на месте?

а где-нить в шейп шите нету прямого указание на местоположение текста?
Go to Top of Page

brace

Russia
358 Posts

Posted - 05/06/2005 :  12:08:28
Подсказка.

Что Вы делаете в тхт файле чтобы сдвинуть весь текст вниз ???
Go to Top of Page

mers

Russia
159 Posts

Posted - 05/06/2005 :  12:21:15
:) это конечно некоторый выход.. но хотелось бы вот чего:
вытаскиваю шейп с трафарета появляется окно: "Введите имя объекта", вводим имя, рядом с шейпом появляется текст названия объекта. Требования к тексту: при перетаскивании шейпа, текст перетаскивается тоже; выделяем шейп, выделяется только шейп, имя остается на месте; поворачиваем шейп, имя не поварачивается, остается на месте.

Сейчас, делаю это так: вытаскиваю шейп, ввожу имя, рисую рядом прямоугольник, в него вписываю имя, у прямоугольника делаю нулевые границы (он не виден), группирую эти шейп и текст, смещаю цетр полученной группы в центр шейпа.

но при таком подходе не получается нужных результатов.
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 05/06/2005 :  12:26:29  Visit Digitall's Homepage
quote:
Originally posted by mers

т.е при таком подходе, насколько я понимаю, мы сдвигаем шейп в сторону, а текст остается на месте?

а где-нить в шейп шите нету прямого указание на местоположение текста?


Мы сдвигаем текстовый блок относительно фигуры, а если более точно, относительно её нижнего левого угла. Если вас смутили формулы в которых участвуют Width и Heigth, то это относительные величины размеров самой фигуры. Вы можете указать и абсолютные величины. Но повторюсь, в моем примере мы сдвигаем текстовый блок относительно фигуры, а не наоборот, т.к. ячейки TxtPinX и TxtPinY отвечают как раз за расположение текстового блока фигуры.
Go to Top of Page

mers

Russia
159 Posts

Posted - 05/06/2005 :  12:29:09
атлична.. :)
огромное спасибо
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 05/06/2005 :  12:47:45  Visit Digitall's Homepage
quote:
Originally posted by mers

:) это конечно некоторый выход.. но хотелось бы вот чего:
вытаскиваю шейп с трафарета появляется окно: "Введите имя объекта", вводим имя, рядом с шейпом появляется текст названия объекта. Требования к тексту: при перетаскивании шейпа, текст перетаскивается тоже; выделяем шейп, выделяется только шейп, имя остается на месте; поворачиваем шейп, имя не поварачивается, остается на месте.

Сейчас, делаю это так: вытаскиваю шейп, ввожу имя, рисую рядом прямоугольник, в него вписываю имя, у прямоугольника делаю нулевые границы (он не виден), группирую эти шейп и текст, смещаю цетр полученной группы в центр шейпа.

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


Здесь необходимо разделить эту задачу на несколько более простых:
1) Вытаскиваю шейп с трафарета появляется окно: "Введите имя объекта", вводим имя, рядом с шейпом появляется текст названия объекта.
2) Требования к тексту: при перетаскивании шейпа, текст перетаскивается тоже;
3) Выделяем шейп, выделяется только шейп, имя остается на месте;
4) Поворачиваем шейп, имя не поварачивается, остается на месте.

Все это решаемо, но не одной единственной формулой.
1) Это настройка вызова окна заполнения Custom Properties.
За это отвечает ячейка EventDrop. В нее надо внести =Docmd(1312)
2) Это простое нормальное поведение фигуры.
3) За это отвечает ячейка EventDblClick. Если внести в нее 0, то двойным нажатием мы только выделим фигуру, т.е. без редактирования текста.
4) Здесь можно просто внести в ячейку TxtAngle =-Angle
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 05/06/2005 :  12:49:54  Visit Digitall's Homepage
quote:
Originally posted by Digitall

quote:
Originally posted by mers

:) это конечно некоторый выход.. но хотелось бы вот чего:
вытаскиваю шейп с трафарета появляется окно: "Введите имя объекта", вводим имя, рядом с шейпом появляется текст названия объекта. Требования к тексту: при перетаскивании шейпа, текст перетаскивается тоже; выделяем шейп, выделяется только шейп, имя остается на месте; поворачиваем шейп, имя не поварачивается, остается на месте.

Сейчас, делаю это так: вытаскиваю шейп, ввожу имя, рисую рядом прямоугольник, в него вписываю имя, у прямоугольника делаю нулевые границы (он не виден), группирую эти шейп и текст, смещаю цетр полученной группы в центр шейпа.

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


Здесь необходимо разделить эту задачу на несколько более простых:
1) Вытаскиваю шейп с трафарета появляется окно: "Введите имя объекта", вводим имя, рядом с шейпом появляется текст названия объекта.
2) Требования к тексту: при перетаскивании шейпа, текст перетаскивается тоже;
3) Выделяем шейп, выделяется только шейп, имя остается на месте;
4) Поворачиваем шейп, имя не поварачивается, остается на месте.

Все это решаемо, но не одной единственной формулой.
1) Это настройка вызова окна заполнения Custom Properties.
За это отвечает ячейка EventDrop. В нее надо внести =Docmd(1312)
2) Это простое нормальное поведение фигуры.
3) За это отвечает ячейка EventDblClick. Если внести в нее 0, то двойным нажатием мы только выделим фигуру, т.е. без редактирования текста.
4) Здесь можно просто внести в ячейку TxtAngle =-Angle



Соответственно дальше лишь все это сделать с помощью VB. Либо используя мой пример(просто меняя название ячейки), либо с помощью записи макроса.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)