03.02.2006, 11:46 | #1 |
Administrator
|
Изменение масштаба отчета (программное)
Господа - подскажите кто знает (или скажите авторитетно что так невозможно ).
Возможно ли программно как-то повлиять на масштаб выводимого отчета (под отчетом понимается отчеты из узла \Reports\) ? Т.е. к примеру вывести отчет в масштабе по ширине страницы или 25% - в таком плане. Я вроде такого не находил - но может кто сталкивался. Вопрос именно про данную возможность. Как это обойти (нарисовать в Excel, прикрутить OLAP или Crystal) - это уже другой вопрос.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 03.02.2006 в 11:51. |
|
03.02.2006, 12:52 | #2 |
Moderator
|
Присоединяюсь к вопросу! Мне тоже интересно.
Сколь мне помнится (имхо), его вроде и ручками-то не сильно можно подправить... Помню только инфо-лог, констатирующий, что мой отчет был отмасштабирован типа "в 49 % от нормального размера"... |
|
03.02.2006, 13:00 | #3 |
Участник
|
Да нет, ручками то пожалуйста, правой кнопкой мыши или Alt-D, Alt-U.
Последний раз редактировалось KMV; 03.02.2006 в 13:26. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
03.02.2006, 13:18 | #4 |
Участник
|
Можно попробовать докопатся до параметров "ResolutionX" "ResolutionY". Сам не пробпвал но звучит как-то похоже на истину.
|
|
03.02.2006, 15:51 | #5 |
Moderator
|
To KMV: Спасибо за подсказку, освоил ручные операции, буду знать...
To ALL: ...НО, мне кажется, это не то, что надо sukhanchik-у. По-моему, речь идет о том, как например, если в Экселе у нас в режиме 100% на одну страницу помещается 8 колонок из 10, а 2 другие выводятся на следующий лист (справа)... И вот как раз эти "проценты" и варианты размещения на страницах (одной или двух) хочется контролировать кодом... Ну, т.е. чтобы было "как в Excel-e". Так? |
|
03.02.2006, 16:02 | #6 |
Участник
|
to Gustav
подобное недавно обсуждалось тут ни ручками, ни программно я не знаю, как это сделать. Похоже, что никак. |
|
|
За это сообщение автора поблагодарили: Gustav (1). |
03.02.2006, 21:03 | #7 |
Administrator
|
Для начала - спасибо всем ответившим.
2Gustav: не.. как в Excel - это не то. Тут я присоединяюсь к фразе George Nordic про количество шапок из одной овчины (из ветки, указанной KMV). Вопрос был именно про дублирование того контекстного меню, появляющегося при запуске отчета - или же задания из кода некого процента масштаба перед открытием отчета. 2KMV: Про клавиши Alt-D, Alt-U - я не знал - спасибо 2braathe: А что это за параметры? И где они обитают? Надеюсь не предлагается через WinAPI измерять текущее разрешение? Как мне тут сказали коллеги - возможность изменения масштаба появилась только в 3.0 - и поэтому никакого программного интерфейса чтобы к нему достучаться - нет. В принципе - это был больше теоретически-академический вопрос. Думал - что может кто знает .
__________________
Возможно сделать все. Вопрос времени |
|
04.02.2006, 08:00 | #8 |
Участник
|
Цитата:
Сообщение от sukhanchik
Как мне тут сказали коллеги - возможность изменения масштаба появилась только в 3.0 - и поэтому никакого программного интерфейса чтобы к нему достучаться - нет.
Но только кнопками. Контекстное меню на правой кнопке мыши действительно появилось только в 3.0 Добавил в FAQ про кнопки. |
|
11.05.2011, 11:01 | #9 |
MCITP
|
По сабжу (программное изменение масштаба стандартного отчёта) ни у кого нет никакой новой информации? Может в 2009 что-то поменялось и кому-то удалось совершить сие?
Хотя бы через WinAPI...
__________________
Zhirenkov Vitaly |
|
11.05.2011, 12:45 | #10 |
Участник
|
Не сочтите этот способ за извращение, но у меня такой пример сработал.
На мысль навело использование горячих клавиш управления масштабом отчета. Итак, создаем класс X++: class Class1 X++: static client void test() { thread thread = new thread(); ; thread.run(classnum(Class1), identifierstr(runThread)); } X++: static client void runThread(thread _thread) { ; System.Windows.Forms.SendKeys::SendWait("%D"); System.Windows.Forms.SendKeys::SendWait("%D"); System.Windows.Forms.SendKeys::SendWait("%D"); System.Windows.Forms.SendKeys::SendWait("%D"); System.Windows.Forms.SendKeys::SendWait("%D"); System.Windows.Forms.SendKeys::SendWait("%D"); } X++: public void run() { ; super(); Class1::test(); } Данная идея применима и к любым другим функциям Аксапта, где нет управления методами из кода x++, но есть управление с помощью Hot Keys. Естественно, работать будет лишь в Dax2009 и Ax4.0, наверное. Описание используемого метода NET тут - http://msdn.microsoft.com/ru-ru/libr....sendkeys.aspx |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2), mazzy (2), ZVV (2), Logger (5). |
11.05.2011, 14:41 | #11 |
MCITP
|
Если б была горячая клавиша "по ширине страницы", то это было бы круто... а так, баловство одно...
Или такая клавиша всё-таки есть? Кстати, ни в одной документации не могу найти описания этих Alt-D, Alt-U. , странно... Пробую что-то наваять через винАпи.. может выйдет
__________________
Zhirenkov Vitaly |
|
11.05.2011, 15:53 | #12 |
MCITP
|
Через винАпи получилось развернуть на всю страницу примерно так:
(На основе решения someOne через поток) X++: class ReportMaximizeHandler { } static client void maximize(Str _reportName) { thread thread = new thread(); ; thread.setInputParm([_reportName]); thread.run(classnum(ReportMaximizeHandler), identifierstr(runThread)); } #WinAPI static client void runThread(thread _thread) { Str _str; hwnd hwnd; int retVal; ; [_str] = _thread.getInputParm(); hwnd = WinAPI::findWindow("", _str + " - Report"); if (hwnd) { WinApi::bringWindowToTop(hwnd); WinApi::forceMaximizeWindow(hwnd); retVal = WinApi::postMessage(hwnd, 0x007B, hwnd, 0xFFFF); retVal = WinApi::postMessage(hwnd, #WM_KEYDOWN, 0x26, 0); retVal = WinApi::postMessage(hwnd, #WM_KEYUP, 0x26, 0); retVal = WinApi::postMessage(hwnd, #WM_KEYDOWN, 0x26, 0); retVal = WinApi::postMessage(hwnd, #WM_KEYUP, 0x26, 0); retVal = WinApi::postMessage(hwnd, #WM_KEYDOWN, 0x0D, 0); retVal = WinApi::postMessage(hwnd, #WM_KEYUP, 0x0D, 0); } } // Report.Run() public void run() { ; super(); ReportMaximizeHandler::maximize(this.design().caption()); } Не удалось красиво найти hwnd текущего сформированного отчёта. Только по имени. В принципе находит всегда последний, так что не сильно критично, но всё равно не красиво. Буду благодарен за помощь в этом направлении.
__________________
Zhirenkov Vitaly |
|
11.05.2011, 16:23 | #13 |
MCITP
|
Только между вызовами WinAPI рекомендую добавить небольшие sleep-ы... иначе будет падать периодически...
__________________
Zhirenkov Vitaly |
|