ReportListener | |
---|---|
Перминов Игорь Автор Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
Ребята приведите здесь пример, как работать с ReportListener.
Понял, что это зашибатая штука, но как все это дало заставить работать, непонимаю. Только не пишите читай то-то. Читаю, но все равно не понимаю! (Наверно тупой такой). ------------------ Без коментариев.. |
Re: ReportListener | |
---|---|
amaximum Сообщений: 131 Откуда: Новороссийск, Красндарский край Дата регистрации: 26.04.2001 |
Раскорй исходники ReportOutput и ReportPreview. Лично я сделал уже вывод в HTML с использованием CSS и предварительный промотр. Будет время - выложу в решения... Хотелось бы знать, реализовал кто нибудь экспорт в другие форматы?
|
Понемногу начинаю разбираться | |
---|---|
Перминов Игорь Автор Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
[i][small][color=Gray]Отредактировано (23.06.04 11:52) ------------------ Без коментариев.. |
Re: ReportListener | |
---|---|
Sega Сообщений: 511 Откуда: Ярославль Дата регистрации: 27.12.2000 |
Обязательно выкладывай в решения. Мне этот механизм тоже не понятен, а вкусностей в нем много.
|
Re: ReportListener | |
---|---|
Перминов Игорь Автор Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
Для ReportPreview (туповатый код взятый из примера, скорее всего можно сделать и что-то свое):
------------------ Без коментариев.. |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
А мне все больше ReportListener нравится - перегоны куда угодно можно делать.
Правда не совсем понятно как расталкивать данные по передаваемым координатам ну это со временем решится. А так можно на ходу менять размеры, стили, имена шрифтов чего собственно мне от отчетов и надо было. А перегон в HTML становится простым. (если б я только прилично знал синтаксис разметки самого HTML ) |
Re: ReportListener | |
---|---|
Перминов Игорь Автор Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
Блин! Приведи здесь пример, ну очень интересно!
------------------ Без коментариев.. |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
ox=CreateObject([hooktext])
ox.ListenerType = 1 && we want to see the results in a Preview REPORT FORM XXX OBJECT OX Define Class HookText As ReportListener Procedure EvaluateContents(nFRXRecno, oObjProperties) As Boolean If Mod(Recno(),2)=0 oObjProperties.FontSize=12 Else oObjProperties.FontSize=10 Endif oObjProperties.RELOAD = .T. this.AdjustObjectSize(nFRXRecno, oObjProperties) Endproc Enddefine |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Во блин ! Еще Круче - можно отчеты сбрасывать сразу в картинки !
Поддерживаемые форматы Цитата: Пример сброса в JPEG
|
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Во- ! сейчас только чуть не обделелася от счастья !
Если в предыдушем примере заменить метод OutputPage на
То получаем многостраничный TIFF который мой старый ACDSee показывает только первую станицу а Imaging for Windows - нормально показывает все ! Итого 4 цветных страницы 320 кб. |
Re: ReportListener | |
---|---|
Равиль Сообщений: 6555 Откуда: Уфа Дата регистрации: 01.08.2003 |
piva, привет :
Цитата:Вот пробую твои примеры - какие-то затыки, разбираться в лом. Состряпай пожалуйста 100% работающий пример - хочется посопереживать ;) ------------------ Тяжело согнать курсором муху с монитора ... |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
2Равиль
А я с чего показывал пример ? Проверил - забросил Ну вот и камушек в огород - при отправке в формат EMF - получаю файлы с чистм листом - остальное работает тут подумалось - может у меня вьювер плохо показывает. CorelDraw сейчас нету. Кто проверит ? |
Re: ReportListener | |
---|---|
Равиль Сообщений: 6555 Откуда: Уфа Дата регистрации: 01.08.2003 |
piva, спасибо, все путем и в EMF:
eDevice='c:\'+Transform(nPageNo,'@L 999')+'.emf' nDeviceType=100 ps Это очень кстати, а ведь мы хотели этого: forum.foxclub.ru [i][small][color=Gray]Отредактировано (23.06.04 15:24) ------------------ Тяжело согнать курсором муху с монитора ... |
Re: ReportListener | |
---|---|
amaximum Сообщений: 131 Откуда: Новороссийск, Красндарский край Дата регистрации: 26.04.2001 |
Не могу пока выложить решение в архиве:-(( не пускают.... Вот код из classbrowser:
************************************************** *-- Class: html_listener (c:\projects\vfp9_preview\html_listener.vcx) *-- ParentClass: reportlistener *-- BaseClass: reportlistener *-- Time Stamp: 06/18/04 03:09:01 PM * #INCLUDE "c:\projects\vfp9_preview\vfp9_preview.h" * DEFINE CLASS html_listener AS reportlistener Height = 23 Width = 23 FRXDataSession = -1 PROTECTED noutfile noutfile = -1 PROTECTED npagewidth npagewidth = 0 PROTECTED npageheight npageheight = 0 PROTECTED nscreendpi nscreendpi = 0 Name = "html_listener" PROTECTED ldebug PROTECTED coutfile PROTECTED PROCEDURE getbandname lparameters nBandObjCode do case case nBandObjCode = FRX_OBJCOD_TITLE return 'FRX_OBJCOD_TITLE' case nBandObjCode = FRX_OBJCOD_PAGEHEADER return 'FRX_OBJCOD_PAGEHEADER' case nBandObjCode = FRX_OBJCOD_COLHEADER return 'FRX_OBJCOD_COLHEADER' case nBandObjCode = FRX_OBJCOD_GROUPHEADER return 'FRX_OBJCOD_GROUPHEADER' case nBandObjCode = FRX_OBJCOD_DETAIL return 'FRX_OBJCOD_DETAIL' case nBandObjCode = FRX_OBJCOD_GROUPFOOTER return 'FRX_OBJCOD_GROUPFOOTER' case nBandObjCode = FRX_OBJCOD_COLFOOTER return 'FRX_OBJCOD_COLFOOTER' case nBandObjCode = FRX_OBJCOD_PAGEFOOTER return 'FRX_OBJCOD_PAGEFOOTER' case nBandObjCode = FRX_OBJCOD_SUMMARY return 'FRX_OBJCOD_SUMMARY' case nBandObjCode = FRX_OBJCOD_DETAILHEADER return 'FRX_OBJCOD_DETAILHEADER' case nBandObjCode = FRX_OBJCOD_DETAILFOOTER return 'FRX_OBJCOD_DETAILFOOTER' otherwise return '' endcase ENDPROC PROTECTED PROCEDURE getfontstyle lparameters nFontStyle local cStyle cStyle = '' * extended styles if nFontStyle = FRX_FONTSTYLE_UNDERLINED cStyle = 'U' nFontStyle = nFontStyle - FRX_FONTSTYLE_UNDERLINED endif if nFontStyle = FRX_FONTSTYLE_STRIKETHROUGH cStyle = cStyle + 'S' nFontStyle = nFontStyle - FRX_FONTSTYLE_STRIKETHROUGH endif * standart styles do case case nFontStyle = FRX_FONTSTYLE_NORMAL cStyle = cStyle + 'N' case nFontStyle = FRX_FONTSTYLE_BOLD cStyle = cStyle + 'B' case nFontStyle = FRX_FONTSTYLE_ITALIC cStyle = cStyle + 'I' case nFontStyle = FRX_FONTSTYLE_BOLD + FRX_FONTSTYLE_ITALIC cStyle = cStyle + 'BI' endcase return cStyle ENDPROC PROTECTED PROCEDURE rgbtohex lparameters nReg, nGreen, nBlue return [#] + right(transform(max(nReg, 0), [@0]), 2) + ; right(transform(max(nGreen, 0), [@0]), 2) + right(transform(max(nBlue, 0), [@0]), 2) ENDPROC PROTECTED PROCEDURE getcontinuationtype lparameters nObjectContinuationType do case case nObjectContinuationType = LISTENER_CONTINUATION_NONE return 'LISTENER_CONTINUATION_NONE' case nObjectContinuationType = LISTENER_CONTINUATION_START return 'LISTENER_CONTINUATION_START' case nObjectContinuationType = LISTENER_CONTINUATION_MIDDLE return 'LISTENER_CONTINUATION_MIDDLE' case nObjectContinuationType = LISTENER_CONTINUATION_END return 'LISTENER_CONTINUATION_END' otherwise return '' endcase ENDPROC PROCEDURE BeforeReport This.nPageHeight = This.nScreenDPI * This.GetPageHeight() / 960 This.nPageWidth = This.nScreenDPI * This.GetPageWidth() / 960 This.cOutFile = forceext(This.CommandClauses.File, 'htm') This.nOutFile = fcreate(This.cOutFile) local cHtml cHtml = [<html><head><META http-equiv="Content-Type" content="text/html">] + ; [<title>] + This.cOutFile + [</title></head><body>] fputs(This.nOutFile, cHtml) ENDPROC PROCEDURE AfterReport fputs(This.nOutFile, [</body></html>]) fclose(This.nOutFile) if file(This.cOutFile) local oLink as HyperLink oLink = newobject('HyperLink') oLink.NavigateTo(This.cOutFile) endif ENDPROC PROCEDURE Render LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage local vTemp, cText, cPreSpan, cPostSpan, cFillHex, cForeHex, cPreFont, cPostFont, cFontStyle, ; cPreStyle, cPostStyle, cHtml if This.lDebug vTemp = [<!-- nLeft:] + transform(nLeft) + [, nTop:] + transform(nTop) + [, nWidth:] + ; transform(nWidth) + [, nHeight:] + transform(nHeight) + [, ContinuationType:] + ; This.GetContinuationType(nObjectContinuationType) + [, cContents:] + cContentsToBeRendered + [ -->] fputs(This.nOutFile, vTemp) endif cText = strconv(cContentsToBeRendered, STRCONV_UNICODE_UTF8) if empty(cText) return endif * html special chars cText = strtran(cText, [&], [&]) && first! cText = strtran(cText, [ ], [ ]) cText = strtran(cText, [<], [<]) cText = strtran(cText, [>], [>]) * dpi2pix nLeft = round(This.nScreenDPI * nLeft / 960, 0) nTop = round(This.nScreenDPI * nTop / 960, 0) nWidth = round(This.nScreenDPI * nWidth / 960, 0) nHeight = round(This.nScreenDPI * nHeight / 960, 0) set datasession to This.FRXDataSession go nFRXRecno in frx * css style for span to output if _pageno > 1 nTop = This.nPageHeight * (_pageno - 1) + nTop endif if frx.fillred = -1 and frx.fillgreen = -1 and frx.fillblue = -1 cFillHex = [#FFFFFF] && white else cFillHex = This.RgbToHex(frx.fillred, frx.fillgreen, frx.fillblue) endif cPreSpan = [<span style="position:absolute;left:] + transform(nLeft) + [px;top:] + transform(nTop) + [px;] + ; [background-color:] + cFillHex + [">] cPostSpan = [</span>] * font attrib cForeHex = This.RgbToHex(frx.penred, frx.pengreen, frx.penblue) cPreFont = [<font face="] + frx.FontFace + [" fontsize=] + transform(frx.FontSize) + [ color=] + cForeHex + [>] cPostFont = [</font>] * set html font style cFontStyle = This.GetFontStyle(frx.FontStyle) store '' to cPreStyle, cPostStyle if at('B', cFontStyle) > 0 cPreStyle = [<b>] cPostStyle = [</b>] endif if at('I', cFontStyle) > 0 cPreStyle = cPreStyle + [<i>] cPostStyle = [</i>] + cPostStyle endif if at('U', cFontStyle) > 0 cPreStyle = cPreStyle + [<u>] cPostStyle = [</u>] + cPostStyle endif if at('S', cFontStyle) > 0 cPreStyle = cPreStyle + [<s>] cPostStyle = [</s>] + cPostStyle endif * write to file cHtml = cPreSpan + cPreFont + cPreStyle + cText + cPostStyle + cPostFont + cPostSpan fputs(This.nOutFile, cHtml) set datasession to This.CurrentDataSession ENDPROC PROCEDURE AfterBand LPARAMETERS nBandObjCode, nFRXRecno local cBand set datasession to This.FRXDataSession go nFRXRecno in frx cBand = This.GetBandName(nBandObjCode) if This.lDebug fputs(This.nOutFile, '<!-- AfterBand:' + cBand + ' -->') endif if atc('pagefooter', cBand) > 0 * fputs(This.nOutFile, '<hr color = black>') endif set datasession to This.CurrentDataSession ENDPROC PROCEDURE BeforeBand LPARAMETERS nBandObjCode, nFRXRecno set datasession to This.FRXDataSession go nFRXRecno in frx if This.lDebug fputs(This.nOutFile, '<!-- BeforeBand:' + This.GetBandName(nBandObjCode) + ' -->') endif set datasession to This.CurrentDataSession ENDPROC PROCEDURE Destroy fclose(This.nOutFile) ENDPROC PROCEDURE Init declare integer GetDeviceCaps in WIN32API integer HDC, integer item declare integer GetDC in WIN32API integer hWnd local hdc, lnScreenDPI hdc = GetDC(0) lnScreenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX ) This.nScreenDPI = lnScreenDPI This.lDebug = version(2) = 2 ENDPROC ENDDEFINE * *-- EndDefine: html_listener ************************************************** |
Re: ReportListener | |
---|---|
Piva_AS_Guest |
2Равиль - привет от PIVA
Ты чем смотришь EMF а то у меня ACDSee показывает пустой лист ЗЫ Это я с другого компика |
Re: ReportListener | |
---|---|
Равиль Сообщений: 6555 Откуда: Уфа Дата регистрации: 01.08.2003 |
Привет, файл emf я открывал стандартной смотрелкой проводника XP.
------------------ Тяжело согнать курсором муху с монитора ... |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Что-то у меня не так - поставил corel8 (ну что было под рукой) - не видит он ничего. Внутри файла EMF все нормально - вижу что там мои данные - а на просмотроеть нечем.
Ну да бог с ним. Если кому-то отсылать отчеты или хранить твердые копии - то вполне за глаза хватает JPG и TIFF (особенно меня убило то что 320кб TIFF файл RAR утрамбовал в 5 кил - я аж глазам не поверил ) К вопросу про HTML экспорт - я даже про absolute position в HTML никода не слышал ) Зато получается чертовски классно |
Re: ReportListener | |
---|---|
vfox Сообщений: 761 Откуда: Moscow Дата регистрации: 30.11.2005 |
Скажите пожалуйста, уважаемый PIVA!
А как с помощью метода OutputPage класса ReportListener вывести требуемую страницу отчета на принтер? Что-то я не могу это никак проделать! Что надо подставлять в качесте eDevice и nDeviceType? С уважением, Алексей |
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Щас сразу и не скажу - переход на 9-ку отложился и пока мне не до нее - но если вспомню - скажу
|
Re: ReportListener | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
откопал тут старый код
|
© 2000-2024 Fox Club  |