27.09.2007, 09:17 | #1 |
Участник
|
Как сделать Image.loadFile по протоколу HTTP
В данный момент печатаем сертификаты, хранящиеся в локальной сети примерно таким образом:
в дата методе объекта BitMap в дизайне отчета такой код (всякие проверки пропущены): X++: sertImage = new Image(); sertImage.loadFile(fileImage); return sertImage.getData(); http://yyy.xxx.ru/Sertificate/files/12345.bmp Понятно, что loadFile уже не применить. Есть ли какие-либо способы загрузить в BitMap картинку по протоколу HTTP? |
|
27.09.2007, 09:31 | #2 |
Участник
|
А может проще хранить в базе данных?
|
|
27.09.2007, 09:38 | #3 |
Участник
|
Увы, не проще. Есть Акса в центральном офисе и крупных филиалах, а в небольших филиалах вообще УПП используется. Кроме того, клиенты, зайдя на сайт должны иметь возможность распечатать недостающие сертификаты, а хранить в разных местах уже не хочется (синхронизировать в нескольких местах сертификаты 15 фабрик, причем выписываемых на каждую партию жуткая проблема)
|
|
27.09.2007, 10:39 | #4 |
Гость
|
закачайте файл (класс WinInet), а затем как обычно
|
|
27.09.2007, 10:54 | #5 |
Участник
|
|
|
27.09.2007, 11:30 | #6 |
Участник
|
Переделывать надо, чтобы сохранять в файл, а не преобразовывать в строку.
PS. Добавьте такой метод в класс WinInet X++: #winapi int internetSaveFile(int hdl, str _fileName) { Binary _buffer = new Binary(2048); Binary _bytesRead = new Binary(4); int cnt = 0; boolean ret; DLLFunction fileCreate; DLLFunction writeFile; DLL dll = new Dll(@"KERNEL32.DLL"); int hFile; ; if (_fileName) { fileCreate = new DLLFunction(dll, @"CreateFileA"); fileCreate.returns(ExtTypes::DWord); fileCreate.arg(ExtTypes::String, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord); writeFile = new DllFunction(dll, @"WriteFile"); writeFile.arg(ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord); writeFile.returns(ExtTypes::DWord); hFile = fileCreate.call(_fileName, #GENERIC_WRITE, 0, 0, #CREATE_ALWAYS, 0, 0); while (hFile != #INVALID_HANDLE_VALUE) { ret = _internetReadFile.call(hdl,_buffer,2000,_bytesRead); if (ret && _bytesRead.dWord(0)) { cnt += _bytesRead.dWord(0); writeFile.call(hFile, _buffer, _bytesRead.dWord(0), _bytesRead, 0); } else break; } if (hFile != #INVALID_HANDLE_VALUE) winapi::closeHandle(hFile); } return cnt; } X++: static void internetSaveFile(Args _args) { WinInet winInet; int hdl; ; winInet = new WinInet(); hdl = winInet.internetOpenUrl("http://www.axforum.info/forums/customavatars/avatar4154_1.gif"); info (strfmt("%1 байт записано", winInet.internetSaveFile(hdl, "c:\\temp\\avatar4154_1.gif"))); }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 27.09.2007 в 12:05. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2), ziva (2). |
Теги |
wininet, законченный пример, файл, загрузка |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|