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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.02.2011, 11:47   #1  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Хочу зеленый калькулятор, используя WinApi
Здравствуйте, уважаемые коллеги. Хочу покрасить фон открытых окон в Windows из Аксапты, используя WinApi. Перечитал здесь и в инете кучу всего. Везде советуют следующее :

В классе WinApi прописываем SetClassLong

X++:
client static int setClassLong(int hWnd, int offset, int newValue)
{
    DLL         _winApiDLL = new DLL(#UserDLL);
    DLLFunction _setClassLong = new DLLFunction(_winApiDLL, 'SetClassLongW');

    _setClassLong.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
    _setClassLong.returns(ExtTypes::DWord);

    return _setClassLong.call(hWnd, offset, newValue);
}
пишем джоб

X++:
static void GreenCalc(Args _args)
{
   #define.GCL_HBRBACKGROUND  (-10) 
   int hWnd;
   int brush,oldBrush;
   WinGDI WinGDI = new WinGDI(0);
   ;

   hWnd = winapi::findWindow('','Калькулятор');
   
   brush    = WinGDI.createSolidBrush(WinAPI::RGB2int(0,255,0));
   oldBrush = WinAPI::getClassLong(hWnd, #GCL_HBRBACKGROUND);

   WinAPI::setClassLong(hWnd, #GCL_HBRBACKGROUND, brush);
   WinAPI::invalidateRect(hWnd); 
   WinGDI.deleteObject(oldBrush);
}
открываем калькулятор, запускаем джоб и нифига. Может кто подскажет в чем беда?
AX2009, WinXP
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 03.02.2011 в 11:58.
Старый 03.02.2011, 11:55   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Pustik Посмотреть сообщение
WinAPI::invalidat*#**#**#**#**#*(hWnd);
Pustik, это сработал матофильтр.
Совершенно не представляю почему. Пришлите пожалуйста в личку название функции, которое вы хотите ввести. Поправим матофильтр.
__________________
полезное на axForum, github, vk, coub.
Старый 03.02.2011, 12:00   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Pustik Посмотреть сообщение
WinAPI::invalidateRect(hWnd); // - это i n v a l i d a t e R e c t , просто здесь
О-о!
Исправил. Извините
__________________
полезное на axForum, github, vk, coub.
Старый 03.02.2011, 12:27   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
потому что e rect считается нецензурным словом Гы.
Старый 03.02.2011, 14:01   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Скорее всего, setWindowLong выдает ACCESS DENIED - нельзя поменять некоторые параметры класса "извне", т.е. из другого процесса. Ведь у каждого - свой набор дескрипторов и созданной вами кисти нет в объектах ядра калькулятора. По всей видимости, из этих соображений и запрещено менять кисть в окне другого процесса.

PS. В WinApi есть функция DuplicateHandle, которая позволяет копировать хэндлы между процессами. Но она не поддерживает объекты WINGDI
__________________
Axapta v.3.0 sp5 kr2
Старый 03.02.2011, 14:33   #6  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Ох уж эти WinApi функции. Иногда, у меня от них начинает болеть голова.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 1 08.10.2009 17:36
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 0 28.10.2006 16:40
WinAPI. Ссылка (POINT) третьего уровня вложенности Владимир Максимов DAX: Программирование 2 06.02.2006 16:28
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31
!!!!!!!!!!!!Используя WinAPI::ShellExe() как передать ей нужный принтер как параметр Yan Dex DAX: Программирование 3 29.09.2003 20:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:45.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.