AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.02.2006, 08:00   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik
Как мне тут сказали коллеги - возможность изменения масштаба появилась только в 3.0 - и поэтому никакого программного интерфейса чтобы к нему достучаться - нет.
Изменение масштаба было очень давно.
Но только кнопками. Контекстное меню на правой кнопке мыши действительно появилось только в 3.0

Добавил в FAQ про кнопки.
__________________
полезное на axForum, github, vk, coub.
Старый 11.05.2011, 11:01   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
?
По сабжу (программное изменение масштаба стандартного отчёта) ни у кого нет никакой новой информации? Может в 2009 что-то поменялось и кому-то удалось совершить сие?

Хотя бы через WinAPI...
__________________
Zhirenkov Vitaly
Старый 11.05.2011, 12:45   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Не сочтите этот способ за извращение, но у меня такой пример сработал.

На мысль навело использование горячих клавиш управления масштабом отчета.

Итак, создаем класс
X++:
class Class1
и методы
X++:
static client void test()
{
    thread thread = new thread();
    ;

    thread.run(classnum(Class1), identifierstr(runThread));
}
Именно этот метод генерирует нажатия HotKeys Alt + D
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");
}
Далее, в самом отчете, например в методе run или Print перекрываем метод

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   #4  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Если б была горячая клавиша "по ширине страницы", то это было бы круто... а так, баловство одно...
Или такая клавиша всё-таки есть?
Кстати, ни в одной документации не могу найти описания этих Alt-D, Alt-U. , странно...

Пробую что-то наваять через винАпи.. может выйдет
__________________
Zhirenkov Vitaly
Старый 11.05.2011, 15:53   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Через винАпи получилось развернуть на всю страницу примерно так:
(На основе решения 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   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Только между вызовами WinAPI рекомендую добавить небольшие sleep-ы... иначе будет падать периодически...
__________________
Zhirenkov Vitaly
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программное изменение "Счет на" в заказе Antant DAX: Программирование 12 02.02.2009 10:49
Динамическое изменение query для отчета Peppi DAX: Программирование 1 25.11.2008 06:59
изменение стандартного диалогового окна отчета алька DAX: Программирование 8 15.04.2007 00:55
Изменение размера отчёта больше А4 Whity DAX: Программирование 8 12.12.2006 14:42
Изменение отчета счет-фактура. Подскажите плз .... vasiliy DAX: Программирование 3 28.12.2004 10:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:18.