На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67418336
9686
Hosts 3608925
1962
Visitors 53570881
9351

127


Главная / Поддержка / Форумы / Макро

Форум «Макро»

Версия для печати Версия для печати

Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация


Тема: «Множество расчетов » в форуме: Макро   Просмотров: 14537
 
Владимир Неуймин
Администратор
 
Всего сообщений: 268
Дата регистрации: 13.03.2007
Создано: 03.10.2007 10:00:23
 
 
Цитата
При задании макросом - более 1000 расчетов УР - в протокол заносится огромное кол-во записей - программа Растр тормозит


Ниже приведена рекомендуемая универсальная "обертка" для макросов, особенно выполняющих множество расчетов.

Код
r=setlocale("en-us") '  установить разделитель точка для операций ввода-вывода
Rastr.LockEvent=True ' блокировка изменения информации в открытых окнах
Rastr.LogEnable=False ' блокировка вывода в протокол
' Текст макроса
'------------------------­---
'

'
'------------------------­---
Rastr.LogEnable=True
Rastr.LockEvent=False
Rastr.SendChangeData 0,"","",0  ' обновить содержимое открытых окон
 
Профиль
Наверх
Юрий Федоров
Посетитель
 
Всего сообщений: 39
Дата регистрации: 07.09.2007
Создано: 23.04.2008 19:42:55
 
 
Хороший пример оптимизации кода.
Посредством макроса все работает. Но в среде программирования (CBuilder) попытка заблокировать вывод сообщений в протокол Rastr'а вызывает ошибку 'TRastr::LogEnable is not accessible'-дескать свойство недоступно.
Та же реакция и на LockEvent, но на это хотя бы можно предположить, что формы принадлежат оболочке, а не COM-объекту.
А что с протоколом....Ваши соображения?
 
Профиль
Наверх
Владимир Неуймин
Администратор
 
Всего сообщений: 268
Дата регистрации: 13.03.2007
Создано: 24.04.2008 12:45:34
 
 
К сожалению, CBuilder мы не пользуемся.
Но LogEnable и LockEvent обычные свойства COM объекта Rastr и должны быть доступны в любом случае. - Ошибка на компиляции ? или в ходе выполнения? Если на компиляции, то может враппер свойства, как то по другому называет = например PutLogEnable ( так VC делает) Да и на выполнение если ошибка - тоже врапппер надо копать. возможно он это свойство как ReadOnly представил. На VC помимо враппера досупны еще и raw функции - возможно для билдера они тоже доступны

С оболочкой связана только SendChangeData да ито вызову метода ничего не мешает ( правда и пользы от него нет)
 
Профиль
Наверх
Юрий Федоров
Посетитель
 
Всего сообщений: 39
Дата регистрации: 07.09.2007
Создано: 25.04.2008 13:26:05
 
 
Спасибо за подсказку. Вы правы: присмотревшись внимательно, понял, что свойства LogEnable и LockEvent действительно не доступны. Зато доступны аналогичные методы с приставками get_ и set_
 
Профиль
Наверх
Иван Трофимович
Постоянный посетитель
 
Всего сообщений: 76
Дата регистрации: 12.04.2008
Создано: 26.04.2008 16:17:10
 
 
Использую пример из первого поста, но...
Цитата
Rastr.SendChangeData 1,"","",0 ' обновить содержимое открытых окон

вот этот код у меня почему то не работает Печально
После завершения расчетов окна не обновляются. чтобы продолжить работу приходиться закрывать и переоткрывать вручную все окна. в чем дело может быть ?
 
Профиль
Наверх
Юрий Федоров
Посетитель
 
Всего сообщений: 39
Дата регистрации: 07.09.2007
Создано: 01.05.2008 19:34:24
 
 
Верно, есть такое С улыбкой Дело, наверное, во входном параметре метода.
См. стр. 159 и 162 Rastr.manual
SendChangeData hint,tabl,col,row
первый параметр hint может принимать значения:
HINTR_CHANGE_ALL=0,
HINTR_CHANGE_COL=1,
HINTR_CHANGE_ROW=2,
HINTR_CHANGE_DATA=3,
HINTR_ADD_ROW=4,
HINTR_DELETE_ROW=5,
HINTR_INS_ROW=6,
HINTR_CHANGE_TABL=7,
Чтобы обновить все, задавайте hint равным 0. При этом tabl и row (текстовые параметры) пустые, а row(числовой параметр) нулевой.
Итого имеем:
Rastr.SendChangeData 0,"","",0
У меня это работает.
Хотите обновлять выборочно (таблицу, строку, столбец), меняйте первый параметр и задавайте осмысленно следующие.
Например, для обновления только таблицы Узлов:
Rastr.SendChangeData 7,"node","",0
ну, и т.д и т.п.
 
Профиль
Наверх
Иван Трофимович
Постоянный посетитель
 
Всего сообщений: 76
Дата регистрации: 12.04.2008
Создано: 02.05.2008 15:39:05
 
 
спасибо. теперь работает как надо. первый пост обновить бы... С улыбкой
 
Профиль
Наверх
Владимир Неуймин
Администратор
 
Всего сообщений: 268
Дата регистрации: 13.03.2007
Создано: 04.05.2008 15:00:05
 
 
Спасибо, обновил
Кстати вызов
Rastr.SendChangeData 0,"","",0
полностью перезагружает содержимое окон и используется после загрузки файла, а вызов
Rastr.SendChangeData 0,"","",1
позволяет ускорить процедуру обновления когда не менялась ключевая информация и нет вставки удаления, например после расчета режима
 
Профиль
Наверх
Иван Трофимович
Постоянный посетитель
 
Всего сообщений: 76
Дата регистрации: 12.04.2008
Создано: 24.03.2009 22:02:54
 
 
к слову об оптимизации. для VBA в целом рекомендую такой код
Код
' В начале процедуры пишем
   Dim scrup As Boolean
   scrup = Application.ScreenUpdatin­g
   Application.ScreenUpdatin­g = False

<Тело процедуры>

' В конце процедуры пишем
   Application.ScreenUpdatin­g = scrup

таким образом обновление таблиц/экрана можно не просто выключить в подпрограмме, а оставить в конце таким же как было. при разбиении макроса на подпрограммы это очень удобно. можно ли аналогично сделать в растре ? пробовал LogEnabled команду - растр не узнает
 
Профиль
Наверх



Читают тему
гостей: 1, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019