Форум » GUI » Пример экспорта Tsbrowse в разные форматы (Tsb_Export)... » Ответить

Пример экспорта Tsbrowse в разные форматы (Tsb_Export)...

Andrey: Всем привет. Что то у меня цвета с таблицы Tsbrowse не такими экспортируются в XML. Т.е. что-то в библиотеке hbxlsxml цвета по другому получаются... В Tsb2xml.prg цвет задаю так:[pre2] nColor := oBrw:aColumns[nCol]:nClrBack If hb_isBlock( nColor ) nColor := Eval(nColor, oBrw:nAt, nCol, oBrw ) end // в aColors храним массивы ( строка, столбец. стиль ) Aadd( aColors, {nLine, nCol, "S" + hb_ntoc(nColor, 16)} )[/pre2] Может неправильно делаю ?

Ответов - 75, стр: 1 2 3 4 All

Haz: Andrey пишет: hb_ntoc(nColor, 16) Возможно такое преобразование не корректно. Надо на конкретном цвете проверить

Andrey: Haz пишет: Возможно такое преобразование не корректно. Вот как выглядит это на экране: Пример сегодня на почту отправлю к тебе.

SergKis: Andrey пишет: hb_ntoc(nColor, 16) Что делает эта функция ? Есть hb_NToColor( n )


Pasha: Андрей, я время от времени запускаю этот пример на win10 с тем самым бешеным экселем 2016, который вываливается когда хочет: Date: 14.07.2018 Time: 13:23:03 Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998) Called from WIN_OLEAUTO:_SIZE(0) Date: 14.07.2018 Time: 13:24:32 Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998) Called from WIN_OLEAUTO:_SIZE(0) Date: 14.07.2018 Time: 15:46:15 Error WINOLE/1009 No exported method: FONT (DOS Error -2147418111) Called from WIN_OLEAUTO:FONT(0) .. Date: 14.07.2018 Time: 16:35:37 Error WINOLE/1008 No exported variable: BOLD (DOS Error -2147418111) Called from WIN_OLEAUTO:_BOLD(0) Date: 14.07.2018 Time: 20:32:45 Error WINOLE/1007 Argument error: FONT (DOS Error -2147418111) Called from WIN_OLEAUTO:FONT(0) Date: 15.07.2018 Time: 08:31:07 Error WINOLE/1006 Argument error: _NUMBERFORMAT (DOS Error -2147418111) Called from WIN_OLEAUTO:_NUMBERFORMAT(0) Date: 15.07.2018 Time: 08:31:21 Error WINOLE/1009 No exported method: CELLS (DOS Error -2147418111) Called from WIN_OLEAUTO:CELLS(0) Date: 16.07.2018 Time: 20:51:07 Time from start: 0 days 0 hours 0 mins 20 secs Error WINOLE/1009 No exported method: FONT (DOS Error -2147418111) Called from WIN_OLEAUTO:FONT(0) и так далее Вчера ночью win10 вдруг возбудился и захотел обновиться до версии 1803. Я не возражал. Сейчас запускаю пример, и (о чудо !) бешеный эксель утихомирился и стал работать как надо. Может дело не в экселе, а в чудо-операционке виндоуз ?

Dima: Pasha пишет: Может дело не в экселе, а в чудо-операционке виндоуз ? Как говорил HAS , дело в правильном БИЛДЕ самого оффиса , не все они работают одинаково

Haz: Andrey пишет: Пример сегодня на почту отправлю к тебе. не надо мне на почту замени там где цвет преобразуется в hex строку вместо ntoc(n. 16 ) на n2hex(n, 16) [pre2]Func N2HEX(n, b) local c := ntoc(n, b) return right(c,2) + substr( c, 3, 2 ) + Left(c,2)[/pre2]

Haz: SergKis пишет: hb_ntoc(nColor, 16) Что делает эта функция ? Есть hb_NToColor( n ) очепятка, не hb_ntoc(nColor, 16) , а просто ntoc( nColor, 16 ) . работает так же как hb_ntoHex( n ) к примеру цвет nColor := RGB(159,191,236) ntoc( nColor, 16 ) выдаст "ECBF9F" как и hb_ntoHex (nColor ), но этому цвету соответствует "9FBFEC" - то есть крайние байты надо поменять. Мож еть что готовое , я не искал и сделал тупо через самописную N2HEX для этого случая PS hb_NToColor( n ) у меня выдает непонятно что

Andrey: Pasha пишет: Может дело не в экселе, а в чудо-операционке виндоуз ? Отличная новость. Будем знать теперь что влияет на программы. Ниже версии 1803 - не использовать !

Andrey: Haz пишет: замени там где цвет преобразуется в hex строку вместо ntoc(n. 16 ) на n2hex(n, 16) Заменил. Цвета стали похожими. СПАСИБО ! Код был твой, я там мало что исправил...

Haz: Andrey пишет: Код был твой, я там мало что исправил... мой код , я и исправил

Pasha: Andrey пишет: Отличная новость. Будем знать теперь что влияет на программы. Ниже версии 1803 - не использовать ! Я бы не стал торопиться. И с 1709 экспорт в Excel временами работал, а потом вдруг начинал глючить. Подождем

ММК: Dima пишет: Как говорил HAS , дело в правильном БИЛДЕ самого оффиса , не все они работают одинаково Офисы разные , сборки офисов разные, инсталяции разные, системы разные , сборки систем разные, драйвера, машины и т.д. Но дело в том , что не работает пример. Вот с ним и надо разбираться :))

Pasha: ММК пишет: Но дело в том , что не работает пример. Вот с ним и надо разбираться :)) Не работает не только этот пример, но и все средства взаимодействия с экселем в моих программах. То есть не работает механизм работы с экселем через ole. Я как-то с таким уже сталкивался, наверное все-таки это было в начале 16-го. Тогда я ничего не понял. А вот теперь счастье такое привалило: этот механизм не работает у меня на домашнем компе. Вернее, то работает, то не работает. Сейчас вот работает. Я по прежнему ничего не понимаю, но хоть наблюдаю за пациентом, меряю температуру, так сказать. Кстати, есть подозрение, что это связано с активацией офиса. Она время от времени слетает, и.. По хорошему на взаимодействие через ole это не должно влиять, но кто знает, что там в кишках у них

Andrey: Всем привет ! Пример закончил, однако вылезла одна неприятность. После экспорта (модуль Tsb4xlsOle.prg или метод ExcelOle), пытаюсь поставить внизу колонки формулу суммы колонки. Для целых чисел сумма создаётся, для дробной суммы пишет 0. Вот так это выглядит: Хотя тип колонки перед экспортом в Экселе указываю что колонка числовая. Что делать/добавить/исправить нужно ?

Haz: Andrey пишет: Хотя тип колонки перед экспортом в Экселе указываю что колонка числовая. у тебя в Excel десятичный разделитель это точка ? что то мне подсказывает что должна быть запятая , а ты упорно кормишь excel точкой. Excel давится и воспринимает это как строку и потом ты его просишь эти строки сложить математически

Andrey: Haz пишет: Excel давится и воспринимает это как строку Понял. Спасибо ! Буду копать формат. Я у тебя нашёл - oBrw:aColumns[9]:XML_Format := "0.00_ ;[Red]\-0.00\ "

Haz: Andrey пишет: уду копать формат. Я у тебя нашёл - oBrw:aColumns[9]:XML_Format := "0.00_ ;[Red]\-0.00\ " Не трать время копай лучше ExcelOle , где примерно так uData := Str( uData ) в харбур в качестве разделителя точка и точка будет в полученной строке. Все твои примеры выгрузки через олю дробные числа пишут как строку

Dima: Haz пишет: у тебя в Excel десятичный разделитель это точка Мне думается по началу нужно считать системный разделитель , после проверить какой разделитель использует Excel и уже его и тулить

Andrey: Да я уже оказывается уже делал такое... Блин, памяти нет вообще. Вот делал в примере DBF_to_XLS_03.7z : [pre2] nDecPole := FieldDec( FIELDNUM( cPole ) ) // для формата числа .... ELSEIF FIELDTYPE( cPole ) == "N" IF nDecPole == 0 // значит целое число oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0' ) // числовая ячейка ELSE oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0,00' ) // числовая ячейка ENDIF ....[/pre2] Пошёл исправлять.

Haz: Andrey пишет: Пошёл исправлять Ты не понял о чем я и Дима. Далеко не уходи в исправлениях т. к. формат ячейки тут не причём.

Andrey: Haz пишет: копай лучше ExcelOle , где примерно так uData := Str( uData ) Да, я там уже исправил. Т.е. у себя в модуле. А исходник h_tbrowse.prg - не трогал. Haz пишет: Далеко не уходи в исправлениях т. к. формат ячейки тут не причём. Ну если не задавать формата, то получиться фигня: , т.е. потом самому юзеру придётся формат ставить на колонку. А если задать формат, то всё нормально получается, с разделителем на 2 знака. Я понимаю что может быть другой разделитель, т.е. как в Экселе заданы установки. И сумма колонки теперь считается ! Спасибо за подсказки !

Dima: Andrey пишет: Я понимаю что может быть другой разделитель, т.е. как в Экселе заданы установки. Ну так делай сразу правильно и не через

Haz: Andrey пишет: Ну если не задавать формата Ты с темы не соскакивай вопрос был почему не считает, ответ - потому что строки суммировать эксель не умеет. И формат тут по любому не причём. Как сделать красиво вопроса не было Что касается формата, есть еще разделители групп разрядов и как любят все финансисты - отрицательные числа в скобках и без минуса. Так что и красота у каждого своя

Dima: Подсказка: ищи по форуму GET_SDECIMAL Павел выкладывал а остальные 2 параметра сможешь считать из объекта Excel

Andrey: Спасибо ВАМ !!!

Andrey: Всём привет ! В новой версии МиниГуи 18.07 смотрите пример SAMPLES\Advanced\Tsb_Export В примере: 1) Экспорт Tsbrowse в Word/Excel/OO Calc, форматы файлов: xls/xml/doc/dbf/csv по дефолту - вывод только видимых колонок, но можно задать и свой вывод колонок. 2) Таблица может быть многостроковой (MULTILINE on) и экспорт на лист так же многостроковый. 3) Показ различных видов раскраски таблицы 4) Использование GRADIENTFILL для кнопок на форме 5) Можно загрузить/сохранить Tsbrowse из/в внешнего файла (TSB_NEW_FILE_EXTERN) 6) Величину строк в таблице и кол-во колонок можно задавать в CreateDatos() 7) Время экспорта в тот или иной формат можно посмотреть в _MsgLog.txt Кто сможет сделать для этого примера ещё один экспорт в PDF ? Т.е. нужно на основе Tsb4xlsOle.prg сделать экспорт в PDF. Будет вообще отличный и законченный пример экспорта для МиниГуи.

Andrey: Всем привет. Кто знает, как картинку разместить на листе Экселя ? Какие команды нужно использовать ?

Dima: oRange:=oSheet:Range(osheet:cells(2,1),osheet:cells(2,1)) oExcel:ActiveSheet:Shapes:AddPicture(GetTempFolder()+"\logo.png",.F., .T., oRange:Left, oRange:Top, 78,59)

Andrey: Спасибо Dima !

Andrey: Ну и засада - вывести картинку на лист Экселя. Беру размеры картинки через hb_GetImageSize( cDiskFile ), получаю размеры в пикселах (128х128). Вывожу на лист Экселя - картинка раза в 2 больше оригинала. Беру картинку через буфер обмена и видна БОЛЬШАЯ разница при выводе картинки. Покопал в инете, нашёл интересные данные: Эта хрень, очевидно, меряется в микрософтах. 1000 микрософтов = 1 миллисофт, 1000 миллисофтов = 1 софт. Эталонный экземпляр 1 софта хранится в Парижской Палате Мер и Софтов. В пиксели переводится по формуле 4 пикселя = 3 микрософта. Интересна историческая подоплека появления такой единицы. Когда выбирался размер пикселя, ответственный за это Уильям Ворота (Сиэтл, США), выбрал пиксель равным 1/1024 ширины своей задницы. Когда дело дошло до выбора единицы измерений для свойств .Top и .Left у формы в Экселе, Уильям вспомнил о той своей концепции, и принял за единицу 1/1024 ширины своего зада. Однако он забыл учесть, что ввиду большого коммерческого успеха предыдущих продуктов его фирмы задница Уильяма стала шире на 33.3%. Так получилась новая единица измерения - микрософт.... На счет выбора единици измерений, points это еще не конец спектакля - в том же Access разработчикам очень полюбились твипы (Твип - это 1/1440 дюйма). Вообщем, больше единиц измерений, хороших и разных, даешь..... наверное такой плакат висит в комнате у программистов майкрософта.... Придётся наверное писать свою функцию для Экселя, стандартная функция Экселя - oExcel:ActiveWindow:PointsToScreenPixelsY(128) какую то фигню выдаёт...

Dima: Andrey Ты читал вообще какие параметры ? https://msdn.microsoft.com/en-us/vba/excel-vba/articles/shapes-addpicture-method-excel

Andrey: Dima пишет: Ты читал вообще какие параметры ? Это не читал, читал на могучем: https://msdn.microsoft.com/ru-ru/vba/excel-vba/articles/shapes-addpicture-method-excel Не то, не срабатывает -1 !

Dima: Andrey Можно еще пробнуть oExcel:ActiveSheet:Pictures:Insert

Andrey: Вот Александр сделал для этого функции 2: [pre2] aXY := hb_GetImageSize( cDiskFile ) aImage := { cDiskFile, aXY[1], aXY[2] } oRange:=oSheet:Range(osheet:cells(1,1),osheet:cells(1,1)) oExcel:ActiveSheet:Shapes:AddPicture(aImage[1],0, -1, oRange:Left, oRange:Top, ; PixelToPointX(aImage[2]),PixelToPointY(aImage[3])) ..... /////////////////////////////////////////////////////////////////////////////////////////// Function PixelToPointX(iPixels) Local lngDPI, rPixelToPoint lngDPI = GetDPIX() rPixelToPoint = (iPixels / lngDPI) * 72 Return rPixelToPoint /////////////////////////////////////////////////////////////////////////////////////////// Function PixelToPointY(iPixels) Local lngDPI, rPixelToPoint lngDPI = GetDPIY() rPixelToPoint = (iPixels / lngDPI) * 72 Return rPixelToPoint #pragma BEGINDUMP #include <windows.h> HB_FUNC( GETDPIX ) { HDC hDC = GetDC( GetDesktopWindow() ); hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSX) ); return; } HB_FUNC( GETDPIY ) { HDC hDC = GetDC( GetDesktopWindow() ); hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSY) ); return; } #pragma ENDDUMP[/pre2]

nick_mi: Вот получил ошибку при попытке экспорта Export to OLE-EXCEL 1 (XLS files) Export to OLE-EXCEL 2 (XLS files) в обеих случаях Excel нормально стартовал и выводил данные Application: C:\MiniGUI\SAMPLES\Advanced\Tsb_Export\demo.exe Date: 10.08.2018 Time: 14:24:06 Time from start: 0 days 0 hours 0 mins 11 secs Error BASE/1132 Bound error: array access Called from TSBROWSE:DRAWSUPER(3769) in module: h_tbrowse.prg Called from TSBROWSE:PAINT(9235) in module: h_tbrowse.prg Called from TSBROWSE:DISPLAY(2447) in module: h_tbrowse.prg Called from TOEXCEL2(951) in module: demo.prg Called from (b)TABLEEXPORT(740) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(0) Called from EVENTS(0) Called from INKEYGUI(0) Called from TABLEEXPORT(765) in module: demo.prg Called from (b)MAIN(152) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(0) Called from EVENTS(0) Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(0) Called from MAIN(190) in module: demo.prg ----------------------------- System Information ------------------------------ Workstation name...: 195-7104 Active user name...: user Available memory...: 774 MB Current disk.......: C Current directory..: MiniGUI\SAMPLES\Advanced\Tsb_Export Free disk space....: 20933 MB Operating system...: Windows XP 5.1 SP3 MiniGUI version....: Harbour MiniGUI Extended Edition 18.07 (32-bit) Harbour version....: Harbour 3.2.0dev (r1806032230) Harbour built on...: Jun 25 2018 21:32:00 C/C++ compiler.....: Borland C++ 5.5.1 (32-bit) Multi Threading....: NO Current Work Area..: 1 -------------------------- Environmental Information -------------------------- SET ALTERNATE......: OFF SET ALTFILE........: SET AUTOPEN........: ON SET AUTORDER.......: 0 SET AUTOSHARE......: 0 SET CENTURY........: ON SET COUNT..........: 0 SET DATE FORMAT....: DD.MM.YYYY SET DBFLOCKSCHEME..: 0 SET DEBUG..........: OFF SET DECIMALS.......: 4 SET DEFAULT........: SET DEFEXTENSIONS..: ON SET DELETED........: OFF SET DELIMCHARS.....: :: SET DELIMETERS.....: OFF SET DIRCASE........: 0 SET DIRSEPARATOR...: \ SET EOL............: 13 SET EPOCH..........: 2000 SET ERRORLOG.......: C:\MiniGUI\SAMPLES\Advanced\Tsb_Export\ErrorLog.htm SET EXACT..........: ON SET EXCLUSIVE......: ON SET EXTRA..........: OFF SET EXTRAFILE......: SET FILECASE.......: 0 SET FIXED..........: OFF SET FORCEOPT.......: OFF SET HARDCOMMIT.....: ON SET IDLEREPEAT.....: ON SET LANGUAGE.......: en SET MARGIN.........: 0 SET MBLOCKSIZE.....: 64 SET MFILEEXT.......: SET OPTIMIZE.......: ON SET PATH...........: SET PRINTER........: OFF SET PRINTFILE......: LPT1 SET SOFTSEEK.......: OFF SET TRIMFILENAME...: .F. SET UNIQUE.........: OFF -------------------------- Detailed Work Area Items --------------------------- --------------------- Internal Error Handling Information --------------------- Subsystem Call ....: BASE System Code .......: 1132 Default Status ....: .F. Description .......: Bound error Operation .........: array access Involved File .....: Dos Error Code ....: 0 +++++++++++++++++++++++++ Available Memory Variables ++++++++++++++++++++++++++

gfilatov2002: nick_mi пишет: получил ошибку при попытке экспорта Благодарю за ссобщение. Поправил исходник библиотеки TsBrowse для следующей сборки

Andrey: nick_mi пишет: Вот получил ошибку при попытке экспорта А другой экспорт "New: Export to Ole-Excel 1 (xls)" - работает ?

nick_mi: Да! Все остальные части нормально отработали

Andrey: Всем привет ! А можно как то убрать белые края на иконках в Tsbrowse ? Если картинка квадратная, то красиво получается, а если нет то вот так получается:

Andrey: Сделал добавление в пример (версия 9.7 - отправлена Григорию). Вывод картинки и подзаголовка для модулей Tsb4DocOle.prg и Tsb4xlsOle.prg Забыл ранее написать в чем разница эскпорт-ов: 1) Модуль - h_tbrowse.prg в библиотеке MiniGUI\SOURCE\TsBrowse и Tsb2xlsOleExtern.prg 2) Модуль - Tsb2doc.prg Экспорт через буфер обмена. При маленьких таблицах работает отлично, на больших таблицах НЕЛЬЗЯ делать другую работу, пока таблица не создастся. Юзера вечно открывают другие документы и начинают copy/paste использовать. В результате в таблице пишется фигня всякая.... И вообще, очень нестабилен это метод. 3) Модуль - Tsb4xlsOle.prg Экспорт через создание таблицы через массив ! Самый быстрый метод ! Большое спасибо за него, Pasha ! Таблица пишется блоками и их количество можно менять: [pre2]#define LINE_WRITE 100 // Количество строк для записи блоками [/pre2] 4) Модуль - Tsb4DocOle.prg Экспорт через метод Word'a создание таблицы. [pre2]oPar:Range:ConvertToTable(WordSeparatorBox,nRowDbf,nColDbf)[/pre2]

Andrey: Собрал проект Tsb_Export под MSVC 2017 64bit ! О чудо, на игровом компе, где раньше вылетало (меню "New: Export to Ole-Excel 1 (xls)"), теперь не вылетает ! Слава MSVC 2017. Правда на меню "New: Export to Ole-Excel 2 (xls)" вылетает, что то с фонтами. Разница в размере между 32бит и 64бит на 400Кб больше ехе-ник весит.

Andrey: Добавил следующее меню - "Export to C# Dll Ole-Excel (xls)" ! Создание массивов таблицы и передача их в C# - ExcelOleLib.dll сам проект ExcelOleLib.dll на C# (преобразование из массива и заполнение через OLE эксельной таблицы). Вызов из харбора dll-ки на C# выглядит так:[pre2] aParam := { cFile, oBrw:nLen, aImage, aTTitle, aTTitle2, aTSuperHd, aTHeading, aTFooting, aTTitle3, aTCellType } oCLR := CLR_RUNTIME():New("v4.0.30319") // clrdyn.dll - работа с Common Language Runtime // (загрузка и выполнение C# сборок) oAsm := oCLR:LoadAssembly("ExcelOleLib") // вызов ExcelOleLib.dll на C# oExcel := oAsm:CreateInstance("Library.Runner") //oAsm:CallStatic("Library.Debug", "PrintArray", aParam ) // отладка oExcel:Call("SetSettings", aParam) // передача параметров в ExcelOleLib.dll на C# oExcel:Call("AddData", aTCell) // передача массива всех ячеек таблицы //oAsm:CallStatic("Library.Debug", "PrintArray", aTCell) // отладка hExcelHandle := oExcel:Call("ShowAndGetHwnd") // возврат хендла окна экселя[/pre2] На игровом компе не вылетает. Большая просьба протестировать на ваших компах. Сами ехе-ники собраны на 2-х компиляторах: https://cloud.mail.ru/public/2QaA/52ay65T9T Для работы с C# необходимы: clrdyn.dll и ExcelOleLib.dll смотреть - http://clipper.borda.ru/?1-7-0-00000046-000-0-1-1540654515 Сами исходники отправлены Григорию.

Andrey: Вот пример аналог Tsb_Export написанный на C# - https://cloud.mail.ru/public/2wYs/pJMfZSrtD Демонстрация грида на C# - 239 Кб. Исходники здесь - https://github.com/NoTimeForHero/TSBExport_CSharp/archive/master.zip Обратите внимание на очень интересное поведение грида при растягивании окна ! Автоматом добавляются для всех колонок таблицы в той же пропорции что и была до растягивания. Код на C# всего вот такой: Как бы сделать ТАК ЖЕ и для Tsb_Export ?

Haz: Andrey пишет: Как бы сделать ТАК ЖЕ Так же и делай, по тому же алгоритму. Есть же метод SetColSize(). Возможно не совсем плавная прорисов ка получится, но это другая история

SergKis: Haz пишет Так же и делай, по тому же алгоритму. Можно задавать ВСЕ контролы в % к клиентской области и колонки тсб в % к ширине тсб. Тогда не нужно сохранять OldWidth, всегда расчет от тек. width и %. Фонты размеры так же наложить с учетом %. Иногда исп. для форм. размеров 2-х окон (совместное использование) и контролов на них в % от desktop (c noresize)

Haz: SergKis пишет: Можно задавать ВСЕ контролы в % Согласен, тогда на разных мониторах будет приемлемо смотреться Но ... Андрей хотел сделать ТАК ЖЕ и для этого в TS все есть, просто бери и делай

Andrey: Вот ещё один тестовый проект - считывание DBF и передача его в Грид C# на DevExpress. http://clipper.borda.ru/?1-7-0-00000046-000-0-1-1543420166 Пост N: 6129

Andrey: Возвращаюсь к изменению ширин колонок Tsbrowse на окне. Если сделать так: [pre2] ON MAXIMIZE ( ResizeTable(oBrw) ) ; ON SIZE ( ResizeTable(oBrw) ) ;[/pre2] То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) ! Что не очень красиво. В C# есть свойства для окна: Form_ResizeBegin(...) и Form_ResizeEnd(...) Из-за этого там плавная перерисовка таблицы. Можно ли как то в МиниГуи сделать похоже ? Или как то клик мышки отловить, нажата она или отпустили её ?

SergKis: Andrey пишет То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) ! Может надо перевести пример на дискретные приращения размеров (масштаб +\- 10 %) к текущим значениям (кнопки zoom +\-) Нажимай на окне примера кнопки Maximize, Normalize - приемлемо отображает, если тсб в светлых тонах, так совсем нормально

Haz: Andrey пишет: Или как то клик мышки отловить, нажата она или отпустили её ? в h_events.prg есть два события WM_LBUTTONDOWN и WM_LBUTTONUP можешь вставить в них установку флага , а в процедуре ResizeTable этот флаг анализировать

SergKis: Haz пишет в h_events.prg есть два события Ловить их надо скорее в блоке кода тсб :bEvents := {|oBrw, nMsg, nWParam, nLParam| ... }

Andrey: Haz пишет: в h_events.prg есть два события WM_LBUTTONDOWN и WM_LBUTTONUP можешь вставить в них установку флага , а в процедуре ResizeTable этот флаг анализировать Если я вставлю, то код точно работать не будет ! Да и это только у меня будет, а в других версиях потом не будет. Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?

SergKis: Andrey пишет Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ? Код общий чего надо вставлять ? resize мне, к примеру совсем не нужен для работы с данными базы и клиента это вполне устраивает. Все размеры идут от фонта _HMG_DefaultFont... устанавливаются извне. Если понадобится обработчик для ловли сообщений, то сделать вполне можно :bEvents := {|oBrw, nMsg, nWParam, nLParam| MyEvents(oBrw, nMsg, nWParam, nLParam) } FUNC MyEvents(oBrw, nMsg, nWParam, nLParam) If nMsg == WM_LBUTTONDOWN ... ElseIf nMsg == WM_LBUTTONUP ... EndIf Return 0 // если выполнение главной Events(...) продолжать или Return 1 // если выполнение главной Events(...) НЕ продолжать, все уже сделано

Andrey: SergKis пишет: Код общий чего надо вставлять ? Да я не про то подумал. SergKis пишет: resize мне, к примеру совсем не нужен для работы с данными базы и клиента это вполне устраивает. Все размеры идут от фонта _HMG_DefaultFont... устанавливаются извне. Согласен, но хочется сделать изменяемое окно. Или хотя бы попробовать сделать. Т.е. типа такого ? [pre2]STATIC FUNCTION ResizeTable(oBrw) ... oBrw:bEvents := {|oBrw, nMsg, nWParam, nLParam| MyEvents(oBrw, nMsg, nWParam, nLParam) } ....[/pre2]

Haz: SergKis пишет: Ловить их надо скорее в блоке кода тсб Не проверял, но есть сомнения что это сработает когда таскаем за угол парент окна. Проверил по быстрому , клики естественно ловятся только на TSB, парент окно на котором TSB - хоть обкликайся. Значит клики при таскании парента за угол так не поймать

Haz: Andrey пишет: Если я вставлю, то код точно работать не будет ! Да и это только у меня будет, а в других версиях потом не будет. Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ? На деле все просто если хотя бы заглянуть в исходник . А в нем при нажатии кнопки устанавливаются переменные [pre2] _HMG_MouseRow := HIWORD( lParam ) _HMG_MouseCol := LOWORD( lParam ) _HMG_MouseState := 1, 2, 3 - зависит от какую кнопку давим [/pre2] При отпускании [pre2] _HMG_MouseState := 0 [/pre2] Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState

Andrey: Haz пишет: Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState Понял. СПАСИБО !

Andrey: Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0. Как тогда делать ? [pre2]STATIC FUNCTION ResizeTable(oBrw) nMouseState := _HMG_MouseState nMouseRow := _HMG_MouseRow nMouseCol := _HMG_MouseCol ? "nMouseState=", nMouseState, nMouseRow, nMouseCol ....[/pre2] nMouseState= 0 410 1252 nMouseState= 0 410 1252 nMouseState= 0 410 1252

Haz: Andrey пишет: Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0. Как тогда делать ? Искать косяки , спецом проверил при нажатии и отпускании переменная меняется Проверял так DEFINE TIMER Timer_MTest OF Form_1 INTERVAL 100 ACTION {|| SetProperty( "Form_1", "TITLE", hb_NTOC( M->_HMG_MouseState ) ) }

Haz: Andrey пишет: Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0. При таскании за угол - не меняется (НОЛЬ) тогда искать другое решение

Haz: Haz пишет: При таскании за угол - не меняется (НОЛЬ) тогда искать другое решение Ловится через WAPI_GETKEYSTATE()

SergKis: Haz пишет Значит клики при таскании парента за угол так не поймать Да это так, но и в др. местах не очень ловится Ловится через WAPI_GETKEYSTATE() Не ловится, как и через _HMG_MouseState Добавил [pre2] STATIC _App_OnEvent_ := .F. ... SET EVENTS FUNCTION TO App_OnEvents ... DEFINE WINDOW test ; ... ON INIT ( OnInitTest(oBrw,cParam), This.Topmost := .F., ; _App_OnEvent_ := .T. ) ... DEFINE TIMER Timer_MTest INTERVAL 100 ACTION iif( !_App_OnEvent_, , ; _LogFile(.T., 'Timer: _HMG_MouseState', _HMG_MouseState, WAPI_GETKEYSTATE()) ) END WINDOW CENTER WINDOW test ACTIVATE WINDOW test ... #define WM_SIZING 532 #define WM_NCPAINT 133 FUNC App_OnEvents( hWnd, nMsg, wParam, lParam ) LOCAL nRes := 0 If _App_OnEvent_ switch nMsg case WM_LBUTTONDOWN ? procname(), WM_LBUTTONDOWN, 'WM_LBUTTONDOWN', WAPI_GETKEYSTATE(), '_HMG_MouseState', _HMG_MouseState exit case WM_LBUTTONUP ? procname(), WM_LBUTTONUP, 'WM_LBUTTONUP', WAPI_GETKEYSTATE(), '_HMG_MouseState', _HMG_MouseState exit case WM_SIZE ? procname(), WM_SIZE, 'WM_SIZE', WAPI_GETKEYSTATE(), '_HMG_MouseState', _HMG_MouseState exit case WM_SIZING ? procname(), WM_SIZING, 'WM_SIZING', WAPI_GETKEYSTATE(), '_HMG_MouseState', _HMG_MouseState exit case WM_NCPAINT ? procname(), WM_NCPAINT, 'WM_NCPAINT', WAPI_GETKEYSTATE(), '_HMG_MouseState', _HMG_MouseState exit end EndIf RETURN Events( hWnd, nMsg, wParam, lParam ) ... STATIC FUNCTION ResizeTable(oBrw) LOCAL cForm := oBrw:cParentWnd LOCAL nMaxWidth, nMaxHeight, nPBarWidth, nCol, oCol LOCAl nW, nS, nN, nK ? procname() nMaxWidth := This.ClientWidth nMaxHeight := This.ClientHeight ... Получил в _MsgLog.txt Start - Tsb_export987bcc.exe Number of records in the table: 1005 Windows 8.1 6.3 Harbour MiniGUI Extended Edition 18.10 (32-bit) . Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 APP_ONEVENTS 532 WM_SIZING 0 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT 0 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE 0 _HMG_MouseState 0 RESIZETABLE Timer: _HMG_MouseState 0 0 APP_ONEVENTS 532 WM_SIZING 0 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT 0 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE 0 _HMG_MouseState 0 RESIZETABLE Timer: _HMG_MouseState 0 0 APP_ONEVENTS 532 WM_SIZING 0 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT 0 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE 0 _HMG_MouseState 0 RESIZETABLE Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 Timer: _HMG_MouseState 0 0 [/pre2] т.е. не поймали нажатие WM_LBUTTONDOWN, WM_LBUTTONUP, т.к. ловится нажатия над окном, но не при resize

Haz: SergKis пишет: Не ловится, Ловится ! У WAPI_GETKEYSTATE() есть параметр WAPI_GETKEYSTATE( VK_LBUTTON ) при попытке ресайза парент окна за угол возвращает значение по модулю больше 1 при нажатой кнопке и 0/1 при отпускании

SergKis: Haz пишет У WAPI_GETKEYSTATE() есть параметр Добавил в примере параметр, теперь вывод выглядит примерно так: ? procname(), ..., 'VK_LBUTTON', WAPI_GETKEYSTATE(VK_LBUTTON), '_HMG_MouseState', _HMG_MouseState получил файл [pre2] Start - Tsb_export987bcc.exe Number of records in the table: 1005 Windows 8.1 6.3 Harbour MiniGUI Extended Edition 18.10 (32-bit) . Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 Timer: _HMG_MouseState 0 VK_LBUTTON 0 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 APP_ONEVENTS 532 WM_SIZING VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 133 WM_NCPAINT VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 5 WM_SIZE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 Timer: _HMG_MouseState 0 VK_LBUTTON -127 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 Timer: _HMG_MouseState 0 VK_LBUTTON 1 [/pre2] т.е. во всех событиях, кроме timer значение -127 и надо переносить перерисовку на on timer ?

Haz: SergKis пишет: и надо переносить перерисовку на on timer ? Нет , в процедуре по On Resize если -127 то не рисуем бровс, а ждем когда отпустят кнопку . Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется ЗЫ таймер я испорльзовал для простоты и наглядности

Haz: Haz пишет: Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется Получается с началом ON RESIZE запускаем сторожа ( через поток или через таймер ) и в нем ждем когда кнопка освободится. Потом перерисовываем бровс в новых размерах. Все реализуемо, но мне оно тоже не надо )))

SergKis: SergKis пишет т.е. во всех событиях, кроме timer значение -127 Еще -128 появляется, точно не понял от чего, но похоже чередуются с -127, но может и не так Haz пишет Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется Потому и переносить прорисовку надо на куда то и timer активировать. Мудрено как то. По мне лучше zoom +\- 10% к ширине окна добавлять и плясать перерисовкой контролов

Haz: SergKis пишет: Еще -128 появляется, точно не понял от чего, но похоже чередуются с -127, но может и не так Haz пишет Именно так , сам не пойму почему Чередуется -127/-128 и 0/1 SergKis пишет: Мудрено как то Да, ну если кто-то захочет маньячить в потоке или на таймере - то реализуемо.

SkyNET: Haz пишет: Получается с началом ON RESIZE запускаем сторожа ( через поток или через таймер ) и в нем ждем когда кнопка освободится. Потом перерисовываем бровс в новых размерах. Зачем так сложно, когда в WinApi есть готовые WM_ENTERSIZEMOVE/WM_EXITSIZEMOVE? Они же, кстати, и используются в C# под капотом у Form->ResizeBegin/ResizeEnd. Andrey пишет: Как бы сделать ТАК ЖЕ и для Tsb_Export ? Через свою функцию-обработчик сообщений: [pre] PROCEDURE Main() SET EVENTS FUNCTION TO MYEVENTS DEFINE WINDOW Form_1 ; // ........... CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 FUNCTION MyEvents ( hWnd, nMsg, wParam, lParam ) DO CASE CASE nMsg == WM_ENTERSIZEMOVE Form1_ResizeBegin() CASE nMsg == WM_EXITSIZEMOVE Form1_ResizeEnd() OTHERWISE Events ( hWnd, nMsg, wParam, lParam ) ENDCASE RETURN Events ( hWnd, nMsg, wParam, lParam ) [/pre] Было бы хорошо, если эти события добавили в MiniGUI к Window, чтобы можно было просто задавать ON SIZE_BEGIN / SIZE_END.

SergKis: SkyNET пишет Через свою функцию-обработчик сообщений: ... Было бы хорошо, если эти события добавили в MiniGUI к Window, чтобы можно было просто задавать ON SIZE_BEGIN / SIZE_END. Тогда все, действительно, получается хорошо. [pre2] Добавка в пример (timer убран) #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 FUNC App_OnEvents( hWnd, nMsg, wParam, lParam ) If _App_OnEvent_ switch nMsg case WM_ENTERSIZEMOVE ? procname(), WM_ENTERSIZEMOVE, 'WM_ENTERSIZEMOVE' exit case WM_EXITSIZEMOVE ? procname(), WM_EXITSIZEMOVE , 'WM_EXITSIZEMOVE' exit end EndIf RETURN Events( hWnd, nMsg, wParam, lParam ) дает результат Start - Tsb_export987bcc.exe Number of records in the table: 1005 Windows 8.1 6.3 Harbour MiniGUI Extended Edition 18.10 (32-bit) . APP_ONEVENTS 561 WM_ENTERSIZEMOVE RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 0 APP_ONEVENTS 562 WM_EXITSIZEMOVE APP_ONEVENTS 561 WM_ENTERSIZEMOVE RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 0 APP_ONEVENTS 562 WM_EXITSIZEMOVE [/pre2]

Andrey: Вышла новая версия примера Tsb_Export(9.88). Реализована плавное увеличение окон и автоматическое увеличение/уменьшение таблицы. Спасибо большое Григорию и Сергею за помощь ! Большая просьба протестировать на ваших компах следующее меню - "Export to C# Dll Ole-Excel (xls)" ! И результаты пожалуйста напишите здесь. У меня даже на игровом компе не вылетает. Григорий пишет, что у него на 7-ке вылетает. Сами ехе-ники собраны на 2-х компиляторах: https://cloud.mail.ru/public/C2ae/pkQkZh9kY В системе должен быть установлен Microsoft.NET Framework версии 4.0.3 и выше. Заранее благодарю за помощь.

Andrey: hbxlsxml + tsbrowse и картинка ? А как можно вывести картинку для таблицы, пример SAMPLES\Advanced\Tsb_Export - для меню "Export to Excel 2 (xml-files)" Смотрел либу, вроде нет методов вывода картинки...

Haz: Andrey пишет: Смотрел либу, вроде нет методов вывода картинки Давно не смотрел исходник, но там вроде и правда не было. Поступаю так: создаю XML, затем открываю через ole и дорисовываю .

Andrey: Haz пишет: Поступаю так: создаю XML, затем открываю через ole и дорисовываю . Понял. Спасибо !

Andrey: Версия МиниГуи 20.08 (Update 3) Есть пример SAMPLES\Advanced\Tsb_Export_2\demo.exe Беру оттуда Tsb7xlsOle.prg, Tsb7xml.prg, TsbCell.prg в новый проект. В новом проекте вылет из-за TsbCell - не заполняется формат oCol:cPicture в функции myGetTsbCell(oBrw) Т.е. в примере в модуле TsbCell.prg ставлю отладку [pre2] ? aRet ; ?v aRet[/pre2] выводит правильно, типа: [pre2]{0, 15794175, 1879708121, 0d20200331, "D", "99.99.99", "DCALC", "Center"}[/pre2] А в новом проекте выводит так: [pre2]{0, 15794175, 1611272175, 0d20200920, "D", NIL, "DEVENT", "Center"}[/pre2] все выводы формата oCol:cPicture - NIL Как такое возможно используя один и тот же исходник ? Что нужно исправить/добавить в новом проекте для ТСБ ?



полная версия страницы