Ворд. Картинки. Макрос.

Программирование на Visual Basic for Applications
Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Ворд. Картинки. Макрос.

Сообщение Amed » 17.09.2006 (Вс) 13:00

http://bbs.vbstreets.ru/viewtopic.php?t=22376

Подумалось написать макрос, который будет тихонечко висеть на панели инструментов и при запуске тихонечко обновлять картинку.
Проще всего получилось так:

Код: Выделить всё
Sub Refresh()
'
' Refresh Макрос
' Макрос записан 16.09.2006
'
With ActiveDocument.Shapes
    If .Count > 0 Then .Item(.Count).IncrementLeft 0
End With
End Sub


* Если хоть одна картинка есть, смещаем ее влево на 0. При этом документ перерисовывается.

Не слишком хорошо здесь то, что для запуска макроса приходится тянуться мышкой к панели инструментов. Назначать сочетание клавиш не хочется. Есть идеи?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.09.2006 (Вс) 14:00

Вообще в Ворде не силен, но может так:

в модуль ThisDocument:

Код: Выделить всё
Private Sub Document_Close()
    StopRefresh
End Sub

Private Sub Document_Open()
    StartRefresh
End Sub


в стандартный модуль:

Код: Выделить всё
Dim NextRefresh As Date

Sub StartRefresh()
  NextRefresh = Now + TimeValue("00:00:05")
  Application.ScreenRefresh
  Application.OnTime NextRefresh, "StartRefresh"
End Sub

Sub StopRefresh()
    Application.OnTime NextRefresh, ""
End Sub
Привет,
KL

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 18.09.2006 (Пн) 8:24

Жесть... Заставим Word каждые 5 секунд обновляться... А документ тем временем спокойно заверстаем в Notepad :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 18.09.2006 (Пн) 8:50

Так можно сделать, но:
а) это криво по задумке
б) по теории вероятности каждый раз, когда мне попадется в тексте картинка, мне придется ждать около 3 секунд, чтобы она перерисовалась (по закону Мерфи - 5 секунд :)), а за это время я и сам дотянусь до меню.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 18.09.2006 (Пн) 14:20

To RayShade и Amed

Вы что серьезно? Кроме 5 секунд больше прицепиться некчему? Если руки есть дотянутся до меню - слабо 5 исправить на нужное. Я уж не говорю о том, чтобы самому добавить If ActiveDocument.Shapes.Count Then...:

Код: Выделить всё
Sub StartRefresh()
  NextRefresh = Now + TimeValue("00:00:05")
  If ActiveDocument.Shapes.Count Then Application.ScreenRefresh
  Application.OnTime NextRefresh, "StartRefresh"
End Sub


здесь конечно одними руками не обойтись :shock:

а) это криво по задумке


Давай так - кривее, чем твоя задумка быть уже не может. Так что, что ни предложи - все будет улучшением ;-)
Привет,
KL

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 18.09.2006 (Пн) 14:44

KL, это метод из той же оперы, что и отлов нажатий клавиш через GetAsyncKeyState в таймере.
5 секунд, 4, 3- значения не имеют.

Что закипятился-то? :)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 18.09.2006 (Пн) 16:33

Э-э, можно я вставлю свои 5 копеек и скажу, что повторить симптом, указанный Amed'ом мне не удалось? :)

Пробовал, правда, всего с одной картинкой, но при прокрутке с ней все было нормально. У меня Word 2003, версию пишет 11.5604.5606.
Быть... или не быть. Вот. В чём вопрос?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 18.09.2006 (Пн) 18:46

Amed писал(а):KLЧто закипятился-то? :)
Я не кипячусь, а полемизирую и пытаюсь быть экспрессивным хе-хе!!!

Надо было мне сразу посмотреть на ссылку с корнями проблемы :-)
Предлагаю решать проблему более "прямыми" средствами:

1) актуализировать дривер граф. карты (основная причина)
2) в меню Сервис-Параметры..., закладка Вид - поставить галку напротив опции Рисунки и убрать галку у опции Пустые рамки рисунков (возможная побочная причина)
3) Если предыдущее не возымеет эффекта, то правый клик на Рабочем столе, Свойства, закладка Параметры, кнопка Дополнительно, закладка Диагностика - играем с Аппаратным ускорением.
Привет,
KL

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 19.09.2006 (Вт) 17:55

uhm, у меня тот же ворд :)

KL, держи бублик, спасибо.
Предыдущее-таки не возымело действия, а возымел действие пункт №3 :)
Отключил ускорение DX и DD, и все стало работать. Я и забыл, что пару-тройку лет назад подобная проблема возникла в одном трехмерном пакете - постоянно глючила и пропадала сетка (grid). Отключал ускорение - сетка появлялась, но все начинало дико тормозить.

Кстати KL, ты как раз вовремя подсказал, - я уже написал add-in, обновляющий картинки по scroll'ению страницы :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.09.2006 (Пт) 7:38

Upd: сменил драйвера на самые-самые последние - не понадобилось даже отключать ускорение.

Мораль: не пеняй на зеркало.


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот и гости: 17

    TopList