Страница 1 из 1

активность инструмента

Добавлено: 06 окт 2008, 15:53
Шаки
Подскажите пожалуйста, как в UIControl управлять активностью инструментов (UIToolControl),т.е. при каком-то событии делать инструмент не активным.
В справке нашла функцию "Private Function object_Enabled() As Boolean", но я как то криво с ней работаю, что она у меня не работает (сори за тавтологию) :(

Re: активность инструмента

Добавлено: 11 окт 2008, 21:45
Lforj
На самом деле, что бы на вопросы быстрее приходили ответы их надо ставить немного конкретнее. Не активным - в смысле «сереньким» или в смысле деактивировать инструмент (отщелкивать)?

Если делать «сереньким/не сереньким» =) это та функция, которую вы нашли

Код: Выделить всё

Private Function object_Enabled() As Boolean
Если «щелкнуто/отщелкнуто», то:

Код: Выделить всё

Private Function object_Deactivate() As Boolean
Есть определенные нюансы использования. Я так полагаю вам необходимо «делать инструмент не активным» для ваших макросов, о которых вы интересовались несколькими топиками ниже. Так вот в макросах, эффект «серения» не будет виден в режиме отладки (т.е. когда открыт VBA). Функции о которых я говорил, вызываются в момент, когда пользователь убирает фокус с инструмента (отщелкивает), или пытается его деактивировать. По умолчанию в теле функции изменяется свойства object_Enabled и object_Deactivate соответственно.

Код: Выделить всё

Private Function object_Deactivate() As Boolean
  object_Deactivate = True
End Function
Private Function object_Enabled() As Boolean
  object_Enabled = True
End Function
Для того что бы менять состояние инструментов в интересующий вас момент:
  • Объявить два флажка в пределах видимости класса
  • В теле функции свойствам object _Deactivate и object_Enabled присваивать состояние флажков (в макросах параметры этих функций доопереопределить нельзя, а свойства, которые они меняют нельзя изменять за пределами функций, для этого используем флажки)
  • В момент когда необходимо поменять состояние – меняем состояние флажка и вызываем соответствующую функцию

Код: Выделить всё

Public deactivateState as Boolean
Public enabledState as Boolean

‘бла-бла-бла

Private Function object_Deactivate() As Boolean
  object_Deactivate = deactivateState
End Function
Private Function object_Enabled() As Boolean
  object_Enabled = enabledState
End Function

‘бла-бла-бла

Private Sub MySub()
‘бла-бла-бла
if neobhodimo_deaktivirovat = true Then
  ‘если возникла необходимость снять фокус с инструмента
  deactivateState = True
  call object_Deactivate
End if
if neobhodimo_sdelat_serenkim = true Then
  ‘если возникла необходимость сделать инструмент «сереньким»
  enabledState = FALSE
  call object_Deactivate
End if
‘бла-бла-бла
End Sub
Я бы сделал так :)

Re: активность инструмента

Добавлено: 12 окт 2008, 15:11
Шаки
Спасибо :D

Re: активность инструмента

Добавлено: 13 окт 2008, 00:43
Lforj
Ну, что, получилось реализовать? =)

Re: активность инструмента

Добавлено: 16 окт 2008, 14:41
Шаки
Да всё получилось, я использовала твои инструкции, большое спасибо , Лёшичка!!!

Re: активность инструмента

Добавлено: 16 окт 2008, 20:04
Lforj
Ты знаешь, зайчик, незачто =)