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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2005, 18:00   #1  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
обертка к WinAPI PrintDlg
Господа может кто-то делал обертку для функции WinAPI PrintDlg

может поделитесь кодом
Старый 26.05.2005, 08:51   #2  
BVN is offline
BVN
Участник
 
88 / 13 (1) ++
Регистрация: 07.04.2005
Адрес: г. Королёв МО
А что ты с ней хочешь сотворить? Смысл?...
Старый 26.05.2005, 09:41   #3  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
2BVN получу указатель на контекст устройства, есть у меня такая мечта....

PS1 Я уважаю любознательных людей, но очень прошу не надо лишнего бла-бла-бла. Если не можете реально помочь, лучше не пишите.
Спасибо.
Старый 26.05.2005, 18:16   #4  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
неужели ни кто не инкапсулировал APIшные функции ???

PHP код:
#define.PD_RETURNDC (0x00000100)
#define.PD_COLLATE(0x00000010)

static container getPrintDlg(int   _hwnd)
{
    
#define.structSize(4*21)
    
Binary          struct        = new Binary(#structSize);

    
DLL         _DLL             = new DLL("Comdlg32");
    
DLLFunction _getPrintDlg = new DLLFunction(_DLL"PrintDlgExA");
    
_getPrintDlg.returns(ExtTypes:: DWord);
    
_getPrintDlg.arg(ExtTypes::Pointer);


    
struct.dWord (#offset0, #structSize ); //lStructSize = sizeof(PRINTDLGEX);
    
struct.dWord (#offset4, _hwnd );       //hwndOwner = hWnd;
    
struct.dWord (#offset8, 0 );           //hDevMode = NULL;
    
struct.dWord (#offset12, 0 );          //hDevNames = NULL;
    
struct.dWord (#offset16, 0 );          //hDC = NULL;
    
struct.dWord (#offset20, #PD_RETURNDC | #PD_COLLATE );//Flags = PD_RETURNDC | PD_COLLATE;
    
struct.dWord (#offset24, 0 );          //Flags2 = 0;
    
struct.dWord (#offset28, 0 );          //ExclusionFlags = 0;
    
struct.dWord (#offset32, 0 );          //nPageRanges = 0;
    
struct.dWord (#offset36, 10 );         //nMaxPageRanges = 10;
    
struct.dWord (#offset40, 0 );          //lpPageRanges = pPageRanges;
    
struct.dWord (#offset44, 0 );          //nMinPage = 1;
    
struct.dWord (#offset48, 1000 );       //nMaxPage = 1000;
    
struct.dWord (#offset52, 1 );          //nCopies = 1;
    
struct.dWord (#offset56, 0 );          //hInstance = 0;
    
struct.dWord (#offset60, 0 );          //lpPrintTemplateName = NULL;
    
struct.dWord (#offset64, 0 );          //lpCallback = NULL;
    
struct.dWord (#offset68, 0 );          //nPropertyPages = 0;
    
struct.dWord (#offset72, 0 );          //lphPropertyPages = NULL;
    
struct.dWord (#offset76, 1 );          //nStartPage = START_PAGE_GENERAL;
    
struct.dWord (#offset80, 0 );          //dwResultAction = 0;


    
if (_getPrintDlg.call(struct))
    {
        
info(int2str(struct.dWord (#offset8)));

    
}

    return 
conNull();


может свежий взгляд на код поможет... ошибки не возникает.. но окошко не всплывает и естественно возвращается нулевой дискриптор... может я где что не так определяю ???
Старый 27.05.2005, 10:55   #5  
lagr221374
Гость
 
n/a
А чего говорит CommDlgExtendedError функция (по MSDN она должна выдать код ошибки)?
Старый 27.05.2005, 11:10   #6  
BVN is offline
BVN
Участник
 
88 / 13 (1) ++
Регистрация: 07.04.2005
Адрес: г. Королёв МО
если вот так то работает
DLL _DLL = new DLL("Comdlg32");
DLLFunction _getPrintDlg = new DLLFunction(_DLL, "PrintDlgA");
_getPrintDlg.returns(ExtTypes:: DWord);
_getPrintDlg.arg(ExtTypes::Pointer);
struct.dWord (#offset0,66 ); //lStructSize = sizeof(PRINTDLGEX);
struct.dWord (#offset4, _hwnd );
Не знаю устроит ли это вас
Старый 27.05.2005, 11:18   #7  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Изначально опубликовано lagr221374
А чего говорит CommDlgExtendedError функция (по MSDN она должна выдать код ошибки)?
в том то и дело... что ошибки не возвращаются... нормально возвращает назад структуру.. но пустую потому что диалог непоявляется...
Старый 27.05.2005, 11:37   #8  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
Цитата:
Изначально опубликовано BVN
если вот так то работает
DLL _DLL = new DLL("Comdlg32");
DLLFunction _getPrintDlg = new DLLFunction(_DLL, "PrintDlgA");
_getPrintDlg.returns(ExtTypes:: DWord);
_getPrintDlg.arg(ExtTypes::Pointer);
struct.dWord (#offset0,66 ); //lStructSize = sizeof(PRINTDLGEX);
struct.dWord (#offset4, _hwnd );
Не знаю устроит ли это вас
2BVN Спасибо.. действительно заработало... судя по коду тормознул с длиной структуры...

PS Кстати извиняюсь за грубость... действительно напряжно выуживать из массы "умных высказываний" типа "зачем тебе нужно"... да "нафига так делать".. и т.п. действительно нужную инфу...

а в данной ситуации мне просто нужно узнать отступы принтера (не настройки листа, а реальный отступ принтера), что бы коректно расставить разрывы страниц при формировании многостраничного отчета в экселе... вот и вся задача...
Старый 27.05.2005, 12:01   #9  
BVN is offline
BVN
Участник
 
88 / 13 (1) ++
Регистрация: 07.04.2005
Адрес: г. Королёв МО
При использовании PrintDlgEx необходимо что бы выскочил диалог pPageRanges = (LPPRINTPAGERANGE) GlobalAlloc(GPTR,10 * sizeof(PRINTPAGERANGE)); Если его не определить то глухо.А на Аксапте это писать не очень А длинна структуры для PrintDlgEx у вас правильная -84, 66 это у PrintDlgA.
P.S. Просто люблю с API поковыряться. Сделал вертикальный вывод текста в ах , но мне не очень то нравиться как получилось
Старый 27.05.2005, 17:03   #10  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
тогда в продолжение разговора....

указатель контекста он мне вернул, но подсунуть этот дескриптор в функцию getDeviceCaps не удается... все время возвращаеться ноль... при любом флаге...

PHP код:
            #define.VERTSIZE(6)
            
HWND        deviceContext;

            
deviceContext WinAPI::getPrintDlg(0);
            
info(int2strWinAPI::getDeviceCaps(deviceContext,#VERTSIZE)));
            
winApi::deleteDC(deviceContext); 
Старый 27.05.2005, 17:46   #11  
BVN is offline
BVN
Участник
 
88 / 13 (1) ++
Регистрация: 07.04.2005
Адрес: г. Королёв МО
Ну на С++ , у меня получилось без проблем
GetDeviceCaps( pd.hDC, // device-context handle
HORZSIZE // index of capability to query
); На Аxapte тоже ---
int h;
h= struct.dWord (#offset16);
info(int2str(struct.dWord (#offset16)));
h= WinAPI::getDeviceCaps(h,4);
//4 -я просто число вогнал вместо HORZSIZE
Старый 30.05.2005, 10:55   #12  
simply2double is offline
simply2double
Участник
Аватар для simply2double
 
556 / 19 (2) ++
Регистрация: 08.09.2004
Адрес: alfa cen
ну вроде все получилось... спасибо...

единственно, в коде забыл про флажок написать, который заставляет указатель на контекст возвращать:

Цитата:
Изначально опубликовано BVN

#define.PD_RETURNDC (0x00000100)

DLL _DLL = new DLL("Comdlg32");
DLLFunction _getPrintDlg = new DLLFunction(_DLL, "PrintDlgA");
_getPrintDlg.returns(ExtTypes:: DWord);
_getPrintDlg.arg(ExtTypes::Pointer);
struct.dWord (#offset0,66 ); //lStructSize = sizeof(PRINTDLGEX);
struct.dWord (#offset4, _hwnd );
struct.dWord (#offset20, #PD_RETURNDC );


PS кстати...
Цитата:
Изначально опубликовано BVN
Сделал вертикальный вывод текста в ах , но мне не очень то нравиться как получилось
почему не нравится???
Старый 30.05.2005, 17:30   #13  
BVN is offline
BVN
Участник
 
88 / 13 (1) ++
Регистрация: 07.04.2005
Адрес: г. Королёв МО
Не нравится потому что слегка кривовато выходит. Я сделал свой класс по принципу WINAPI, и туда все что меня интересует ,чего нет ахе пишу. Вот дорихтую, тогда выложу.
:-)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta WinAPI::SewWindow... кто знает как? UNRW DAX: Программирование 2 26.09.2008 15:28
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::getLastError() DreamCreator DAX: Программирование 4 20.06.2005 10:03
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31

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

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

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