- Сообщения
 - 798
 
- Реакции
 - 3
 
Чтобы макросы работали моментально -
перед началом работы вставляем
	
	
	
		
после завершения -
	
	
	
		
Я эти блоки вынес в отдельные процедуры и у меня ВСЕ макросы даже с тысячей объектов работают за секунду или меньше
Обратите внимание:
				
			перед началом работы вставляем
		Код: 
	
	dim cs as object ' это для принудительной перерисовки в конце работы
   ActiveDocument.BeginCommandGroup "Описание действия для Undo"
   Optimization = True
   EventsEnabled = False
   ActiveDocument.SaveSettings
   ActiveDocument.PreserveSelection = False
	после завершения -
		Код: 
	
	   ActiveDocument.PreserveSelection = true
   ActiveDocument.RestoreSettings
   EventsEnabled = True
   Optimization = False
   Application.Refresh
   Set cs = CorelDRAW.CorelScript   ' это - принудительная перерисовка экрана
   cs.RedrawScreen                          ' это - принудительная перерисовка экрана
   ActiveWindow.Refresh ' можно взамен использовать это (если это будет обновлять статус строку в CorelDraw, что у меня происходит не всегда)
   ActiveDocument.EndCommandGroup
	Я эти блоки вынес в отдельные процедуры и у меня ВСЕ макросы даже с тысячей объектов работают за секунду или меньше
Обратите внимание:
- Строка ActiveDocument.PreserveSelection = False значительно ускоряет обработку большого количества объектов, т.к. она не сохраняет оригинальную селекцию, НО если нужно более одного цикла обработки объектов или нужно в конце работы восстановить пользовательское выделение объектов, то надо вручную его запомнить: dim origSel as new shaperange: set origSel=activeSelectionRange ...ДЕЙСТВИЯ МАКРОСА.....origSel.CreateSelection
 - Не используйте beginCommandGroup/endCommandGroup во время написания макроса, только когда он у уже отлажен. Если происходит неучтенная макросом ошибка, неустранимая на лету в отладчике, то сломается механизм отмены в CorelDraw и придется сохранять документ под новым именем и перезапускать CorelDraw.
 - Тот же подход должен быть и к EventsEnabled = False, она отключает обработку событий (в частности тех, по которым работают другие макросы)
 - Тот же подход должен быть и к Optimization = True, который отключает прорисовку экрана в CorelDraw во время работы макроса.