Author |
Topic |
|
zz 5
Russia
54 Posts |
Posted - 04/11/2006 : 22:29:16
|
Всем доброго вечера. Появилась такая проблема: необходимо автоматизивароть процесс создания диаграмм. Недавно появилась новая методология описания процессов. Описания там показаны в виде схемы. Так вот мне ее как раз и надо автоматизировать Во-первых, в Визио я не нашел соотвествующего элемента. В этой методологии основной элемент эллипс, разделенный попалам, где в верхней и нижней части текст. А в правом нижнем углу верхней части - порядковый номер элемента. Этот элемент я худо бедно создал, но редактировать сущая беда. Видимо, я может не самым лучшим образом это сделал. Вопрос не в этом. Не туда меня понесло. Вопрос вот в чем, допустим я создал этот элемент. Он характеризуется порядковым номером, текстом верхней и нижней части. Я хочу из стороннего окна (приложения либо окна Визио) давать пользователю вводить эти данные а по щелчку по кнопке добавлять этот элемент с введенными значениями на диаграмму. Сам программированием занимаюсь не первый год, поэтому вопрос будет чисто технический. Стоит копать в сторону макросов либо работать с Визио через технологию OLE (а он ее поддерживает ???). По-крайней мере с вордом проблем не было, там у меня получалось создавать таблицы, добавлять строки и т.п. Вот у меня и вопрос, что будет более эффективным ? По поводу макросов проблема заключается еще и в том, что с языком VBA я не знаком, хотя выучить не проблема. Буду признатен за любую помощь в решении моей проблемы, заранее спасибо. С Уважением, Игорь |
Edited by - zz 5 on 04/11/2006 22:29:58 |
|
Tumanov
Russia
1198 Posts |
Posted - 04/12/2006 : 18:51:46
|
Макросы проще тем, что, во-первых, полно примеров, во-вторых, есть возможность "записи" макроса по ручным действиям оператора. Последнее поначалу может быть очень полезно. В качестве шпаргалки удобнее всего скачать SDK Visio. Минимально необходимые примеры там есть. Прежде, чем писать макросы, надо посмотреть, может быть достаточно будет Custom Properties Window. Напрашивается следующее простейшее решение. Добавляете к своему шейпу три Custom Properties. В текстовые поля шейпа прописываете ссылки на эти ячейки. Для редактирования Custom Properties в Visio есть специальный Add-on "Custom Properties Window". Если это окошко открыто, то при селектировании шейпа его свойства будут отображаться в этом окне, а результаты редактирования в нем - немедленно отобразятся в тексте. |
|
|
zz 5
Russia
54 Posts |
Posted - 04/12/2006 : 21:53:26
|
quote: Originally posted by Tumanov
Макросы проще тем, что, во-первых, полно примеров, во-вторых, есть возможность "записи" макроса по ручным действиям оператора. Последнее поначалу может быть очень полезно. В качестве шпаргалки удобнее всего скачать SDK Visio. Минимально необходимые примеры там есть. Прежде, чем писать макросы, надо посмотреть, может быть достаточно будет Custom Properties Window. Напрашивается следующее простейшее решение. Добавляете к своему шейпу три Custom Properties. В текстовые поля шейпа прописываете ссылки на эти ячейки. Для редактирования Custom Properties в Visio есть специальный Add-on "Custom Properties Window". Если это окошко открыто, то при селектировании шейпа его свойства будут отображаться в этом окне, а результаты редактирования в нем - немедленно отобразятся в тексте.
Насчет Add-on, не знаю, пока у меня стоит задача только добавить фигуру, но на этом точно не остановится. Думаю, в дальнейшем, планируется создать какую-то простую схему в моей будущей программе, хотя бы простым перечислением, которую потом я намериваюсь экспортировать в Визио. Запись макросов мне очень помогла, когда я делал режим экспорта какой-то информации из БД в ворд. То есть я могу узнать, с помощью каких команд вызывается то или иное действие, которыми потом смогу без труда воспользоваться уже из своей программы. Ладно, здесь мне все более-менее ясно. Есть еще два вопроса по данной тематике:
1) Занимался ли кто-нибудь разработкой программ, которые бы работали с Визио, в частности в Дельфи ? Был ли у кого-то опыт данной работы и какой результат ?
2) Второй вопрос уже более конкретный. Как я писал выше, основным элементом диаграмм является эллипс, разделенный горизонтальной чертой на две части. И в верхней и в нижней части должен содержаться текст. Плюс должна быть нумерация этого элемента на диаграмме (в правом нижнем угла верхней половины). Т.е. одна фигура - три разных текста. На данный момент Визио я владею совсем немного, купил книжку, которую до конца так и не дашел, да и особого смысла в этом не вижу. Так вот я создать эту фигуру, которую потом буду кидать на форму. Сейчас я сделал так, основным элементом сделал прямоугольник. Округлил ему углы, чтобы он стал похожим на эллипс. Потом в него кинул еще два прямоугольника, у которых линии сделал нивидимыми. Ну и внизу еще добавил текст для нумерации. Если кому надо, могу скинуть на почту. Минусы: этот объект по прежнему остается как три отдельных объекта, просто накиданных друг на друга. Соотвественно, свойства у них у трех свои: текст, линии, цвет и т.п. А мне бы все-таки хотелось создать такой объект, который имел бы три свойства, т.е. идентифицирующих текст соотвествующих элементов и ничего более. Есть ли другой способ решения данной задачи или нет ? И если да, то в какую сторону мне копать ?
P.S. Чтобы было более понятно я разместил пример моего элемента. Это мой путь решении, но он мне не очень нравится, по причинам, которые я привел выше. http://webfile.ru/905738 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/12/2006 : 23:13:31
|
В Дельфи с Visio работать как-то не приходилось. Работал в основном из VB6 и из других офисных приложений (из Excel, например). Из Дельфи наверное удобнее всего будет работать через ActiveX Drawing Control. Компонент, дающий доступ к объектной модели Visio. Но привыкать к этой модели все-таки лучше на макросах - больше подсказок и вообще проще для начинающих. По поводу организации шейпа совет - возьмите похожий шейп и посмотрите, как его делали профессионалы. Инструменты для просмотра - окна Drawing Explorer и ShapeSheet. Одно показывает структуру шейпов (вложенность), а второе - формулы, управляющие поведением и отображением шейпа. Например, в трафарете Entity Relationship шейп Entity. Там два шейпа сгруппированы. Группа в свою очередь является шейпом. Для шейпа-группы нужно будет сделать пользовательские ячейки (для передачи данных). Смотрите Help на слова "Custom Properties". А входящие шейпы будут отображать данные из этих ячеек в виде своего текста. Каждый входящий шейп отображает данные из своей ячейки. Программно нужно будет только заносить данные в пользовательские ячейки группы. Далее они будут доставлены за счет формул ShapeSheet. Вам явно надо будет сгруппировать три шейпа. Возможно придется слегка связать их формулами, чтобы геометрия менялась синхронно (если размеры будут зависеть от объема введенного текста). |
|
|
zz 5
Russia
54 Posts |
Posted - 04/13/2006 : 22:10:20
|
Списобо за столь подробный ответ. Напоминает объектно-ориентированное программирование , когда мы создаем класс, определяем его свойства, обработчики которых совершают какие-то действия, в моем случае это заносят тескт в определенные ячейки. Интересно все это.
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
zz 5
Russia
54 Posts |
Posted - 04/13/2006 : 22:36:08
|
quote: Originally posted by Tumanov
Например, в трафарете Entity Relationship шейп Entity. Там два шейпа сгруппированы. Группа в свою очередь является шейпом. Для шейпа-группы нужно будет сделать пользовательские ячейки (для передачи данных). Смотрите Help на слова "Custom Properties". А входящие шейпы будут отображать данные из этих ячеек в виде своего текста. Каждый входящий шейп отображает данные из своей ячейки. Программно нужно будет только заносить данные в пользовательские ячейки группы. Далее они будут доставлены за счет формул ShapeSheet. Вам явно надо будет сгруппировать три шейпа. Возможно придется слегка связать их формулами, чтобы геометрия менялась синхронно (если размеры будут зависеть от объема введенного текста).
Геометрия пока для меня на втором плане. Про Custom Properties почитал, только не понял, в какой ячейки ряда для определенного мною свойства следует писать формулу или макрос. А в примере, ни на одном из шейпов не нашел определенных Cutom Properties, может я не то смотрю ? P.S. скачал небольшой учебничек по VBA, может кому нужен ?
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
Tumanov
Russia
1198 Posts |
|
zz 5
Russia
54 Posts |
Posted - 04/14/2006 : 21:18:59
|
quote: Originally posted by Tumanov
#207;#238;#241;#236;#238;#242;#240;#232;#242;#229;, #234;#224;#234; #243;#241;#242;#240;#238;#229;#237; #248;#229;#233;#239; #226; #239;#240;#232;#236;#229;#240;#247;#232;#234;#229; #237;#224; http://tumanov.info/ttt.zip
Списибо, вроде бы разобрался. Очень помогли ваши статьи на сайте, наверно, надо было мне с них начинать. Вот вопрос: в ячейки, в которых мы пишем формулы, например, подстановки можно написать только формулу или возможно использование макросов для более сложных вычислений ?
И второе, в вашем примере, для любой фигуры группы в ячейке, определяющей заполнение ее написано, например, =Sheet.5!Prop.Row_2. Так вот вопросец, Sheet.5 - это ведь родительская фигура ? А нет ли более универсального способа получения имени родительской фигуры, так как я ведь не могу знать точно, каким будет имя фигуры на диаграмме (например, когда их несколько на схеме). И что значит символ "!" в вышеприведенной строчке ? Дальше, окончание понятно.
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/14/2006 : 23:46:51
|
В ячейки макросы писать нельзя. Формулы можно писать довольно сложные, можно использовать специальные функции Visio для ShapeSheet. Можно даже вызывать макросы из ячеек, но написаны и размещены они должны быть в VBA.
=Sheet.5!Prop.Row_2. Visio сохраняет эту связку, несмотря на то, что имя меняется :) Сдублируйте шейп из примера и посмотрите имена в новом шейпе. Имя будет другое, но ссылка будет работать нормально. Символ "!" отделяет имя шейпа от имени ячейки. Это разделитель. |
|
|
zz 5
Russia
54 Posts |
Posted - 04/15/2006 : 00:41:21
|
quote: Originally posted by Tumanov
#194; #255;#247;#229;#233;#234;#232; #236;#224;#234;#240;#238;#241;#251; #239;#232;#241;#224;#242;#252; #237;#229;#235;#252;#231;#255;. #212;#238;#240;#236;#243;#235;#251; #236;#238;#230;#237;#238; #239;#232;#241;#224;#242;#252; #228;#238;#226;#238;#235;#252;#237;#238; #241;#235;#238;#230;#237;#251;#229;, #236;#238;#230;#237;#238; #232;#241;#239;#238;#235;#252;#231;#238;#226;#224;#242;#252; #241;#239;#229;#246;#232;#224;#235;#252;#237;#251;#229; #244;#243;#237;#234;#246;#232;#232; Visio #228;#235;#255; ShapeSheet. #204;#238;#230;#237;#238; #228;#224;#230;#229; #226;#251;#231;#251;#226;#224;#242;#252; #236;#224;#234;#240;#238;#241;#251; #232;#231; #255;#247;#229;#229;#234;, #237;#238; #237;#224;#239;#232;#241;#224;#237;#251; #232; #240;#224;#231;#236;#229;#249;#229;#237;#251; #238;#237;#232; #228;#238;#235;#230;#237;#251; #225;#251;#242;#252; #226; VBA.
=Sheet.5!Prop.Row_2. Visio #241;#238;#245;#240;#224;#237;#255;#229;#242; #253;#242;#243; #241;#226;#255;#231;#234;#243;, #237;#229;#241;#236;#238;#242;#240;#255; #237;#224; #242;#238;, #247;#242;#238; #232;#236;#255; #236;#229;#237;#255;#229;#242;#241;#255; :) #209;#228;#243;#225;#235;#232;#240;#243;#233;#242;#229; #248;#229;#233;#239; #232;#231; #239;#240;#232;#236;#229;#240;#224; #232; #239;#238;#241;#236;#238;#242;#240;#232;#242;#229; #232;#236;#229;#237;#224; #226; #237;#238;#226;#238;#236; #248;#229;#233;#239;#229;. #200;#236;#255; #225;#243;#228;#229;#242; #228;#240;#243;#227;#238;#229;, #237;#238; #241;#241;#251;#235;#234;#224; #225;#243;#228;#229;#242; #240;#224;#225;#238;#242;#224;#242;#252; #237;#238;#240;#236;#224;#235;#252;#237;#238;. #209;#232;#236;#226;#238;#235; "!" #238;#242;#228;#229;#235;#255;#229;#242; #232;#236;#255; #248;#229;#233;#239;#224; #238;#242; #232;#236;#229;#237;#232; #255;#247;#229;#233;#234;#232;. #221;#242;#238; #240;#224;#231;#228;#229;#235;#232;#242;#229;#235;#252;.
Все понял, вроде разобрался. Научился присваивать текст из Custom Properties, делать синхронное измение размеров группы и позиции. Как же все оказывается просто . Два вечера поразбирался, зато я теперь понял, какой инструмент у меня в руках . Есть еще один момент, а именно Connection Points. Допустим я создал смарт-шейп из квадрата. Теперь добавляю ему пару точек соединения по каждой стороне. Можно ли их позиционировать, чтобы они всегда были по центру соотвествующей стороны, например, при изменении размеров шейпа ? И зачем нужна процедура guard ? И последнее, скачал с вашего сайта примерчик создания ToolBar. Вот и я хочу сделать нечто подобное. Насколько сложный процесс создания ? Пока глянул немного, видно, что создает тулбар макрос. Его возьму за образец.
З.Ы. что-то больно все просто получается, даже неинтересно немного З.Ы.Ы. хочу выразить Геннадию Туманову огромную благодарность за ценнейшие советы
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
zz 5
Russia
54 Posts |
Posted - 04/15/2006 : 00:42:23
|
воо, опять связка Опера-Форум глючит, о чем уже написал в соотвесвующей теме
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/15/2006 : 09:32:55
|
Поведение Connection Point описывается секцией Connection Points в Shape Sheet. Если создать Connection Point и заглянуть в эту секцию, то увидим формулы для координат, например x = Width*1 y = Height*0.5 То есть по умолчанию точка позиционируется относительно высоты и ширины шейпа. При увеличении высоты координата Y увеличится, но точка все равно останется посредине. Ваше желание выполняется по умолчанию :) Хотя можно вписать и другие формулы, тогда поведение будет другим... Guard защищает формулу от изменения действиями пользователя в окне рисунка. В Help тренируются на формуле в ячейке Width =GUARD(TEXTWIDTH(TheText) + 0.5 in) При формуле Width =TEXTWIDTH(TheText) + 0.5 in ширина шейпа меняется в зависимости от введенного текста. Но попробуйте сжать шейп мышкой - и формулы как не бывало... А вот при формуле Width =GUARD(TEXTWIDTH(TheText) + 0.5 in) мышкой размер шейпа уже не изменишь, только текстом. |
|
|
zz 5
Russia
54 Posts |
Posted - 04/15/2006 : 21:55:51
|
quote: Originally posted by Tumanov
Поведение Connection Point описывается секцией Connection Points в Shape Sheet. Если создать Connection Point и заглянуть в эту секцию, то увидим формулы для координат, например x = Width*1 y = Height*0.5 То есть по умолчанию точка позиционируется относительно высоты и ширины шейпа. При увеличении высоты координата Y увеличится, но точка все равно останется посредине. Ваше желание выполняется по умолчанию :) Хотя можно вписать и другие формулы, тогда поведение будет другим... Guard защищает формулу от изменения действиями пользователя в окне рисунка. В Help тренируются на формуле в ячейке Width =GUARD(TEXTWIDTH(TheText) + 0.5 in) При формуле Width =TEXTWIDTH(TheText) + 0.5 in ширина шейпа меняется в зависимости от введенного текста. Но попробуйте сжать шейп мышкой - и формулы как не бывало... А вот при формуле Width =GUARD(TEXTWIDTH(TheText) + 0.5 in) мышкой размер шейпа уже не изменишь, только текстом.
В этом я уже разобрался, только непонятно как они идентифицируются ? В смысле, допустим, у квадрата были пять точек, я еще пяток накинул, а как узнать, какой Row какой точке соотвествует ?
Приступил к реализации своего ToolBar в Visio. Сталкнулся с двумя пока с двумя трудностями: 1) Как добраться из макроса до секции Custom Properties шейпа ?Конструкция вида "Sheet.8!Prop.Row_1" уже не канает. Т.е. по кнопки ToolBar у меня вызывается форма, там пользователь заполняет два текстовых поля, потом жмет ОК, Drop-ется новый шейп, а ему я хочу присвоить Custom Properties введенные значения. 2) При создании ToolBar определил пока всего лишь две кнопки. Проблема в том, что не могу подцепить процедуры к ним. На примере, который скачал с сайта, все работает, а когда начал переносить макросы с документа в Stencil, кнопки добавляются, а обработчики не цепляются, т.е. кнопки тулбара остаются недоступными. На всякий случай выложил свой stencil здеся http://webfile.ru/909687.
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он ! |
|
|
|
Topic |
|
|
|