23.06.2006, 16:10 | #1 |
Участник
|
Как изменить заголовок окна предв.просмотра отчета
AXAPTA 2.5 SP3
Как можно изменить заголовок окна предварительного просмотра стандартного отчета (Report)? Попробовал использовать element.design().caption("Новый заголовок") Результат - нулевой. Т.е. само свойство Caption дизайна меняется. Но его изменение никак не влияет на собственно заголовок окна предварительного просмотра. Пока нашел единственное решение - перекрыть метод Caption собственно отчета. element.Caption() Но здесь проблема в том, что это метод выполняется ДО метода Init отчета. Следовательно, приходится практически повторять всю обработку метода Init, что не есть хорошо. Зачем это нужно. Я запускаю отчет в цикле. Т.е. пользователь одновременно видит несколько экземпляров одного и того же отчета. Разумеется, наполнение отчетов разное в зависимости от переданных параметров. Поскольку отчет автоматически масштабируется, понять что-либо из содержания - проблематично. Слишком мелко. Вот я и пытаюсь отобразить в заголовке окна значение некоего параметра, по которому можно будет отличить одну копию отчета от другой. AXAPTA 2.5 SP3 |
|
23.06.2006, 16:58 | #2 |
Участник
|
У меня Caption() вызывается и после вызова метода Init() - можно в Caption() возвращать строковое поле, значение которому присваивать в Init(). Может в 2.5 по другому?
__________________
Axapta v.3.0 sp5 kr2 |
|
23.06.2006, 17:19 | #3 |
Участник
|
Не помогло.
Да, Caption() вызывается и ДО, и ПОСЛЕ Init. Но вызов ПОСЛЕ уже никак не влияет на заголовок окна предварительного просмотра. ===== Нет. Ошибся. Вызова ПОСЛЕ Init уже нет. В этом и проблема... Последний раз редактировалось Владимир Максимов; 23.06.2006 в 17:27. |
|
23.06.2006, 17:58 | #4 |
Участник
|
В 3.0, значит, поменяли.
Такое предложение - при вызове Caption() возвращать из него уникальное значение, которое сохранять так же в поле. В Run() после Super() искать окно по этому заголовку и менять его (заголовок) Что-то типа этого X++: ClassDeclaration str Cap; public str caption(str _reportSpelling, str _reportName, str _designCaption, str _designName) { ; cap = "Уникальное значение" return cap; } public void run() { int hWnd; #WinApi ; super(); if (infolog.hWnd()) { hWnd = winapi::getWindow(infolog.hWnd(), #GW_CHILD); if (hWnd) hWnd = winapi::getWindow(hWnd, #GW_CHILD); while (hWnd) { if (winapi::getWindowText(hWnd) == cap) { winapi::setWindowText(hWnd, "Новое название отчета"); break; } hWnd = winapi::getWindow(hWnd, #GW_HWNDNEXT); } } }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: EVGL (3). |
23.06.2006, 19:50 | #5 |
Участник
|
Спасибо. Правда я сделал несколько попроще.
Поскольку в методе Caption() уже виден element.args(), то просто вынес чтение параметров в отдельный метод, который вызываю и из Caption() и из Init(), но только в случае, если эти параметры еще не получили значение (пустые) Не очень красиво, поскольку получается некий предварительный Init(), но работает, поскольку вызов отчета происходит из класса напрямую через classFactory.reportRunClass(args) |
|
29.06.2006, 14:09 | #6 |
Banned
|
Модуль цехового расписания с его специфически слабой архитектурой ставит не совсем нормальные задачи, например: если на экране осталось активным определенное окно, не передавать фокус окну очереди заданий. Для этого требуется определить, открыто ли окно.
Использовал для этого модифицированный код (с) AndyD, хочу поделиться: PHP код:
Последний раз редактировалось EVGL; 29.06.2006 в 14:13. |
|
03.07.2006, 15:34 | #7 |
Участник
|
Цитата:
Сообщение от EVGL
Модуль цехового расписания с его специфически слабой архитектурой ставит не совсем нормальные задачи, например: если на экране осталось активным определенное окно, не передавать фокус окну очереди заданий. Для этого требуется определить, открыто ли окно.
А чем это отличается от обычной модальности окна? Кстати, тот же AndyD когда-то уже выкладывал код для создания именно эффекта модальности, а не псевдо-, как в Аксапте |
|