Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 17 июл 2018, 07:54

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 16:56 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Никто не делал чего-нибудь по типу Watch'а для ShapeSheet'а выбранной фигуры? Т. е. если выбирается другая фигура, то показываются её данные. Желательно так же обновление данных при изменении свойств финуры. Ну и совсем круто, если эта штука ещё и с редактированием :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 19:45 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
ну дело то не хитрое. просто при смене выбора вызывать shape.OpenSheetWindow
в таком случае все это выполняется:
Цитата:
Желательно так же обновление данных при изменении свойств финуры. Ну и совсем круто, если эта штука ещё и с редактированием


например так:
в ThisDocument пишешь:

Код:
Dim WithEvents app As Visio.Application

Sub start()
    Set app = Application
End Sub

Private Sub app_SelectionChanged(ByVal wnd As IVWindow)
    wnd.Selection(1).OpenSheetWindow
End Sub


запускаешь start. после этого щелкай по фигурам. окно shapesheet будет меняться само


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 19:54 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
просто при смене выбора вызывать shape.OpenSheetWindow

Нет, так мне не надо. Во-первых, так будут сильно множиться окна. Во-вторых, ShapeSheet длинный, в нём ещё искать придётся. Я хочу именно Watch - т. е. перечислил за чем наблидать, щёлкаешь фигуры и смотришь.
В общем пишу и мучаюсь, что забыл половину VB6 :(


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 19:59 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
если в настройках программы стоит "показывать шейпшит в одном окне", то окна не будут множиться.
насчет только того что надо - тогда надо химичить, делать свой инструмент. сделать можно, но стоит ли оно того...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 20:02 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
сделать можно, но стоит ли оно того...

Да оно вроде не сложно, почти сделал, кажется...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 20:04 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
на чем делаешь? на C# как надстройку?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 20:08 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
тут пользователь nbelyh когда-то говорил, что хотел что-то похожее делать. типа своего shapesheet с блэкджеком и.. ну ты понял :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 20:11 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
на чем делаешь? на C# как надстройку?

Неа, макрос с формой на VBA.

PS: Конкретно сейчас не могу понять, почему у списка нет свойства ItemData :( Написано же, что есть...
UPDATE: Не, похоже я что-то как-то не так делаю... Ладно, сделаю как сначала думал.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 20:21 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
Цитата:
почему у списка нет свойства ItemData

это только для Access


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 20:25 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
это только для Access

А в каком поле можно хранить любые дополнительные данные в VB6? Ладно, ну его. Уже без этого сделал.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 20:31 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
да хз. обычно поле tag есть у любого элемента списка. можно в нем


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 20:40 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Вроде работает :) Может, кто-нибудь тут его допилит?

Код:
Option Explicit

Dim WithEvents App As Visio.Application

Private Function FirstColStr(Str As String) As String
  Dim Str64 As String * 64
  Str64 = Str
  FirstColStr = Str64
End Function

Private Function GetFirstColStr(Str As String) As String
  GetFirstColStr = Trim$(Left$(Str, 64))
End Function

Private Sub App_SelectionChanged(ByVal Window As IVWindow)
  If ActiveWindow.Type = 1 Then
    Dim Shape As Shape, Sel As Selection, Q As Integer, Key As String, Formula As String, Val As String
   
    Set Sel = Window.Selection
    Sel.IterationMode = visSelModeSkipSuper
   
    If Sel.Count Then
      Set Shape = Sel.Item(1)
      Me.Caption = "ShapeSheet Watcher - " & Shape & " - " & Shape.ID
     
      For Q = 0 To LstRes.ListCount - 1
        On Error Resume Next
     
        Key = GetFirstColStr(LstRes.List(Q))
        Formula = Shape.Cells(Key).FormulaU
        Val = Shape.Cells(Key).Result("p")
        LstRes.List(Q) = FirstColStr(Key) & " " & IIf(Err.Number, Err.Description, Val & "p = " & Formula)
     
        On Error GoTo 0
      Next Q
    Else
      Me.Caption = "ShapeSheet Watcher"
    End If
  End If
End Sub

Private Sub UserForm_Initialize()
  Dim Keys() As String, Q As Integer

  CmdAdd.Caption = ChrW(&HFC)
  Set App = Application
  Keys = Split(ThisDocument.Description, " ")
 
  For Q = LBound(Keys) To UBound(Keys)
    LstRes.AddItem FirstColStr(Keys(Q))
  Next Q
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Dim Q As Integer
  ReDim Keys(0 To LstRes.ListCount - 1) As String
 
  For Q = 0 To LstRes.ListCount - 1
    Keys(Q) = GetFirstColStr(LstRes.List(Q))
  Next Q
 
  ThisDocument.Description = Join(Keys, " ")
End Sub

Private Sub CmdAdd_Click()
  Dim Str As String
  Str = Trim$(TxtCur.Text)
  If Len(Str) Then LstRes.AddItem FirstColStr(Str)
  TxtCur.SetFocus
End Sub

Private Sub LstRes_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 46 Then If Not LstRes.ListIndex Then LstRes.RemoveItem LstRes.ListIndex
End Sub

Private Sub TxtCur_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then CmdAdd_Click
End Sub

Private Sub LstRes_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 20:49 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
и скрин формы приложи чтоль


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2013, 21:38 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
и скрин формы приложи чтоль

Скрин смогу только завтра приложить.
В общем-то, там наверху текстовое поле TxtCur и рядом кнопка CmdAdd (шрифт кнопки Windings), а под ними широкий список LstRes. Ширина формы 1024 пикселя.
Кстати, как сделать изменяемый размер формы?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 02 сен 2013, 21:43 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
я делал через WinAPI так
SetWindowLong hw, GWL_STYLE, WS_CAPTION + WS_SIZEBOX
где hw - хендл окна, полученный так: hw = FindWindow(vbNullString, Me.Caption), где Me.Caption - имя формы.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 03 сен 2013, 17:22 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
и скрин формы приложи чтоль

Изображение

PS: Похоже, оно больше никому не надо :(


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 03 сен 2013, 17:31 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
надо, надо. спасибо за идею и реализацию!
может файл с примером приложишь?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 03 сен 2013, 17:33 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
может файл с примером приложишь?

C примером чего?
Весь код я выложил, форму нарисовать и самим не долго - всего 3 контрола бросить и дважды задать шрифт. И модальность отключить.
А пример с шейпами - не могу.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Watch для ShapeSheet'а активной фигуры
СообщениеДобавлено: 04 сен 2013, 10:05 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
такая просьба. было бы прикольно добавить такой функционал: при выделении нескольких шейпов, чтоб изменения вносились во все, а не в один. т.е. групповое редактирование
ну или я при случае допилю, если у тебя нет желания...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 04 сен 2013, 12:12 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
было бы прикольно добавить такой функционал: при выделении нескольких шейпов, чтоб изменения вносились во все, а не в один.

Пока они никуда не вносятся ;) Точнее, функциональности, позволяющей чего-нибудь изменить нет...

9rey писал(а):
ну или я при случае допилю, если у тебя нет желания...

Мне всё-таки работать надо... Я надеялся, что тут кто-нибудь что-нибудь допилит...
Та заготовлена процедура двойного клика по списку, но она пока пустая ;)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB