Страницы: 1
RSS
Библиотека контролов
 
Подскажите в какой библиотеке хранятся контролы, которые мы вставляем на лист через вкладку Разработчик (не Active X). Если библиотека - MSForms, то кто знает как привязать событие, к примеру MouseMove, для внедренной на лист кнопки?
 
а почему не Active X?
Учимся сами и помогаем другим...
 
Потому что в Object Browser-е не могу найти Active X с полным перечнем свойств и методов, как скажем в MSForms
 
Правой кнопкой над элементом ActiveX - Свойства. Не это разве нужно?
Учимся сами и помогаем другим...
 
Нет, не это нужно. Мы можем повесить событие на контролы в рамках формы, используя например следующее: Public WithEvents evnt As MSForms.Image. Ищу возможность сделать тоже самое только для контролов, внедренных на листе Excel.
 
Ищу возможность сделать тоже самое только для контролов, внедренных на листе Excel

Код
Set MyClass.evnt = ActiveSheet.Shapes("Image1").OLEFormat.Object.Object
 
garriott, уж что-что, а события отслеживать на контролах из ActiveX гораздо проще. Да и набор побольше...
 
Цитата
Казанский пишет:
Set MyClass.evnt = ActiveSheet.Shapes("Image1").OLEFormat.Object.Object

Казанский, не получается использовать данную строку. См прикрепленный файл.
 
Картинка должна быть не просто вставленной из файла картинкой, а элементом управления ActiveX - "Image". Переключитесь на Sheet2 и обратно на Sheet1, чтобы сработало событие Worksheet_Activate, и получайте:
 
А обычной картинке, как любому шейпу, можно назначить макрос (правый клик - Назначить макрос), который при клике будет смещать ее. Макрос может быть общим для всех шейпов в книге:
Код
Sub MoveMeDown()
With ActiveSheet.Shapes(Application.Caller)
    .Top = .Top + 10
End With
End Sub
 
Цитата
Казанский пишет:
Картинка должна быть не просто вставленной из файла картинкой, а элементом управления ActiveX - "Image". Переключитесь на Sheet2 и обратно на Sheet1, чтобы сработало событие Worksheet_Activate, и получайте:

Спасибо за ответ, Казанский, с ActiveX - это понятно, но не подходит. У ActiveX элементов нет точек присоединения, см скриншот. Поэтому в начале темы я написал, что не интересует ActiveX. Использование .OnAction тоже не подойдет, картинка не должна превращатся в "кнопку", запускающюю макрос.
 
Казанский, большое спасибо за пример!
Я даже не догадывался, что можно таким простым способом, без WinAPI (как в примере от ZVI),
отслеживать движение мыша над ней.
(как-то в голову не приходило, что можно вставлять картинки в контейнер Image)

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

PS: Вот только при сохранении файла (в формате XLS из Excel 2010), Excel почему-то говорит, что картинка в Image станет нередактируемой
Почему - так и не понял. Впрочем, фиг с ним, - главное, что все работает без грузящих систему таймеров для отслеживания мыша.
 
А у меня как раз на основании примера от ZVI   :)
 
Sergei_A, в данном примере при наведении мыши на картинку или шейп TypeName(obj) все равно остается "Range", если навести на статус бар, значение TypeName(obj) станет Nothing. Вобщем не отлавливается картинка..... MS Excel 2007
 
garriott, возьмите обычную картинку, над ней разместите прозрачный ActiveX Image (BackStyle=0, BorderStyle=0), в процедуре обработки события перемещайте оба объекта.
 
Цитата
EducatedFool пишет:
Я даже не догадывался, что можно таким простым способом, без WinAPI (как в примере от ZVI),
отслеживать движение мыша над ней
Делаем приложения драг-н-дроп? )

Запостите в интересное, чтобы не потерять.

еще http://msdn.microsoft.com/en-us/library/office/aa220909(v=office.11).aspx
Изменено: nerv - 28.02.2013 13:37:59
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Цитата
Казанский пишет:
возьмите обычную картинку, над ней разместите прозрачный ActiveX Image (BackStyle=0, BorderStyle=0), в процедуре обработки события перемещайте оба объекта
чисто теоретически, это техника позволит отслеживать перемещение мыши на всем листе: ActiveX Image - помещаем в левый верхний угол, растягиваем его ширину и высоту на весь лист
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
В продолжение темы - наводим мышь на картинку
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Интересное решение, решил отметиться чтобы тему не терять.  ;)
Спасибо
 
Цитата
R Dmitry пишет:
Интересное решение
да, Казанский, вообще генератор идей  :)

изменил у себя параметры убегания. Теперь от мыши бегает, а не набегает :) Кстати, обрабатывает 9 зон объекта.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Цитата
nerv пишет:
Цитата
R Dmitry пишет:
Интересное решение
да,  Казанский,  вообще генератор идей  :)

изменил у себя параметры убегания. Теперь от мыши бегает, а не набегает :) Кстати, обрабатывает 9 зон объекта.

nerv, отличное решение!
 
Цитата
garriott пишет:
Sergei_A, в данном примере при наведении мыши на картинку или шейп TypeName(obj) все равно остается "Range", если навести на статус бар, значение TypeName(obj) станет Nothing. Вобщем не отлавливается картинка..... MS Excel 2007

Попробовал данный пример на Excel 2010 - все работает. В Excel 2007 TypeName(obj)="Picture" как будто не существует.
Страницы: 1
Читают тему
Наверх