Перехват события

Программирование на Visual Basic for Applications
Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Перехват события

Сообщение Евгений Д. » 03.03.2006 (Пт) 17:02

Коллеги, кто знает, можно ли как-то программно отследить изменение масштаба, т.е. при изменении ActiveWindow.Zoom вызывать свой обработчик?

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 04.03.2006 (Сб) 11:49

Я так думаю, что это событие перехватить не удастся, а в связи с этим вопрос - что Вы хотите сделать?

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 06.03.2006 (Пн) 12:08

если exel


модуль класса


Public WithEvents app As Application
Public Sub app_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)
MsgBox "ресайз"
End Sub


объявление объекта в модуле напр. эта книга


Dim a As New Class1
Private Sub Workbook_Open()
Set a.app = Application
End Sub

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 06.03.2006 (Пн) 12:28

Дело в том, что я программно строю XY-чарт и его различные тренды с отображением апроксимирующей формулы и значения степени приближения - R2 (DataLabel), которые я выравниваю по левому краю. Все классно до тех пор, пока пользователь не изменит масштаб отбражения листа :(. Сразу "ползет" выравнивание, причем - какие-то DataLabel сдвигаются влево, какие-то - вправо. Конечно можно написать монитор, запускающийся при активации листа с этим чартом (пока я ограничился единовременной правкой при автивации листа), но хотелось бы найти какое-то более интеллектуальное решение для купирования этого эффекта. К тому же аналогичная проблема встает при выводе на печать - даже выравненные DataLabel печатаются с нарушением вертикальности левого края. Такие дела.

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 06.03.2006 (Пн) 12:43

Комментарий по поводу Resize: к сожалению такое решение не проходит, т.к. реагирует только на изменение размеров окна, а не его масштаба.

QUICK
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 26.12.2005 (Пн) 10:33

Сообщение QUICK » 07.03.2006 (Вт) 0:38

Может быть извратиться - Запретить zoom, поместить в ячейку текущее его значение и потом отслеживать изменение данной ячейки и менять zoom? А, кстати, Resize самого чата при изменении zoom окна не происходит? Я имею в виду это не принимается за Resize?

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 07.03.2006 (Вт) 13:58

1. Если в ячейке будет содержаться значение, возвращаемое функцией:
Код: Выделить всё
Function GetZoom() as integer
           
             GetZoom = ActiveWindow.Zoom

End Function,
то не понятно, что заставит пересчитать содержимое этой ячейки при изменении Zoom'а.
2. События Resize чарта (как и Resize активного окна) не происходит при изменении Zoom'a, а у Window, к сожалению, нет порождаемых событий (по крайней мере в VBA)

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 07.03.2006 (Вт) 15:03

Решил проблему с нарушением выравнивания DataLabels при изменении Zoom'а, поместив их текст в прозрачный прямоугольник без рамки. При изменении масштаба прямоугольник не меняет заданного расположения, и, соответственно, содержащийся в нем текст не искажается.
Кривизна с выравниванием DataLabels по левому краю при изменении масштаба, по всей видимости, связана с некорректной обработкой шрифтов.
Спасибо всем, кто прнимал участие в обсуждении.


Вернуться в VBA

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

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

    TopList  
cron