Author |
Topic |
|
mormax
Russia
18 Posts |
Posted - 03/30/2004 : 12:03:16
|
Как программно добавить конекшен поинт шейпу? Например: рисуем Set Rect = ActivePage.DrawRectangle(2, 1, 5,3) Нужно добавить конекшен поинт в точке(5,2). |
|
Tumanov
Russia
1198 Posts |
Posted - 03/30/2004 : 17:30:26
|
Чтобы самому ответить на этот вопрос нужно сделать следующее: 1. Нарисовать прямоугольник 2. Открыть и посмотреть его шейп-лист 3. Добавить руками Connection Point 4. Посмотреть, как изменился шейп-лист
После этого уже станет ясно, что программно (чтобы сделать то же самое) нужно: 1. Добавить к шейпу секцию Conenction Points 2. Вставить в нее одну строку 3. Задать в этой строке значения X и Y.
Еще можно с помощью SectionExists проверить, вдруг эта секция уже существует Вставляется секция и строка с константами visSectionConnectionPts и visRowConnectionPts, типа shpObj.AddSection visSectionConnectionPts shpObj.AddRow visSectionConnectionPts, visRowConnectionPts, 0
Если это строка первая, то ячейки адресуются как Connections.X1 и Connections.Y1. Например Set conYCellObj = shpObj.Cells("Connections.Y1")
|
|
|
mormax
Russia
18 Posts |
Posted - 03/31/2004 : 09:47:38
|
Спасибо! Все заработало. |
|
|
yurant
4 Posts |
Posted - 12/16/2005 : 12:40:29
|
А как задать координаты относительно shape у добавляемой section?
UPDATE: Сделал
v.ActiveDocument.SnapSettings:='&H20'; v.ActivePage.DrawRectangle(3,3,5,4); v.ActivePage.DrawRectangle(7,6,9,7);
v.ActivePage.Shapes(1).AddSection(7); v.ActivePage.Shapes(1).AddRow(7,0,153); v.ActivePage.Shapes(1).Section(7).Row(0).Cell(0):=2; v.ActivePage.Shapes(1).Section(7).Row(0).Cell(1):=0.5; v.ActivePage.Shapes(2).AddSection(7); v.ActivePage.Shapes(2).AddRow(7,0,153); v.ActivePage.Shapes(2).Section(7).Row(0).Cell(0):=0; v.ActivePage.Shapes(2).Section(7).Row(0).Cell(1):=0.5;
Если после этого применить
v.ActiveWindow.SelectAll; v.ActiveWindow.Selection.ConnectShapes;
то появившийся коннектор все равно не крепится к поинтам. Он одним концом цепляется за нужную точку (середина правого ребра 1го прямоугольника), а второй конец идет не в конн.поинт, а в середину нижнего ребра второго п-ка. Подскажите, в чем дело?
UPDATE: Могу даже переформулировать вопрос: как сделать так, чтобы прямоугольники соединялись всегда одинаково: коннектор выходит из правого ребра и входит в левое? |
Edited by - yurant on 12/19/2005 10:10:06 |
|
|
brace
Russia
358 Posts |
Posted - 12/19/2005 : 14:00:58
|
перетащи на рисунок два Rectangle - каждый имеет 5 шт. Connection Points - затем соедини их посредством шейпа Dynamic connector концы которого должны покраснеть (приклеится) перед этим включи на запись Macro Макра запишет код программы соединения этот код можно просмотреть и если подойдет использовать.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 12/19/2005 : 21:05:05
|
quote: Могу даже переформулировать вопрос: как сделать так, чтобы прямоугольники соединялись всегда одинаково: коннектор выходит из правого ребра и входит в левое?
Если Вы точно знаете позицию, куда нужно подключить коннектор, то можно просто пользоваться методом GlueToPos. И Connection Points самому создавать не надо. Вот такой код Set celBeginX = shpConnector.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX) Set celEndX = shpConnector.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX) celBeginX.GlueToPos ActivePage.Shapes(2), 1, 0.5 celEndX.GlueToPos ActivePage.Shapes(3), 0, 0.5 приклеит коннектор из середины правого ребра в середину левого |
|
|
yurant
4 Posts |
Posted - 12/20/2005 : 08:20:01
|
quote: Originally posted by brace
перетащи на рисунок два Rectangle - каждый имеет 5 шт. Connection Points - затем соедини их посредством шейпа Dynamic connector концы которого должны покраснеть (приклеится) перед этим включи на запись Macro Макра запишет код программы соединения этот код можно просмотреть и если подойдет использовать.
Дело в том, что когда я программно из Delphi перетаскиваю прямоугольники ( v.ActivePage.DrawRectangle() ), они не имеют connection points :( Может быть что-то можно сделать, чтобы прямоугольник сразу был с поинтами?
quote: Originally posted by brace
Если Вы точно знаете позицию, куда нужно подключить коннектор, то можно просто пользоваться методом GlueToPos. И Connection Points самому создавать не надо. Вот такой код Set celBeginX = shpConnector.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX) Set celEndX = shpConnector.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX) celBeginX.GlueToPos ActivePage.Shapes(2), 1, 0.5 celEndX.GlueToPos ActivePage.Shapes(3), 0, 0.5 приклеит коннектор из середины правого ребра в середину левого
Спасибо, работает. Остался только один вопрос : как переместить центральную точку коннектора? Когда я делаю v.ActivePage.Drop(v.ConnectorToolDataObject,4,4), центр, вроде, должен задаваться, но после GlueToPos он опять смещается. Если это НЕ специфика Delphi, напишите, пожалуйста, почему так происходит. Ещё раз спасибо. |
Edited by - yurant on 12/20/2005 14:56:23 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 12/20/2005 : 18:23:00
|
Коннектор - это не просто линия. У него свои мозги, которые все пересчитывают после любого изменения. Эта часть пользователю недоступна. Delphi здесь ни при чем. |
|
|
|
Topic |
|
|
|