Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 5723
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.18 14:49. Заголовок: Haz пишет: PS Кто т..
Haz пишет: цитата: | PS Кто тут увидел шаманов |
| Да ты шаман ! Можешь у других спросить... Больше тебя и никто и не написал как делать ! Заодно и подскажи как для шапки таблицы такое же сделать ? А то тоже получается всегда в одну строчку !
|
|
|
Haz
|
| |
Пост N: 1179
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.18 14:52. Заголовок: Кому была интересна выгрузка в Excel через XML
Пересобрал библиотеку hbxlsxml.lib под BCC ( в родной с русским есть глюк) и дополнил свой пример Tsb_cursor выгрузкой в Excel по правой кнопке мышь. Это просто пример, как альтернатива BIFF или OLE Цветная раскраска и формулы поддерживается от автора библиотеки. по ссылке готовый пример, исходник примера и библиотека. исходники самой библы в искать харбуре click here
|
|
|
Haz
|
| |
Пост N: 1180
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.18 14:55. Заголовок: Andrey пишет: Заодн..
Andrey пишет: цитата: | Заодно и подскажи как для шапки таблицы такое же сделать ? А то тоже получается всегда в одну строчку ! |
| можно перед записью строки заголовков задать высоту по заголовку, а потом перед записью данных задать высоту данных
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5724
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.18 18:08. Заголовок: Haz пишет: по ссылк..
Haz пишет: цитата: | по ссылке готовый пример, исходник примера и библиотека. исходники самой библы в искать харбуре |
| Пример понятен. Наверное всё таки тестовый пример нужно отдельно для этого делать, с разными типами полей. Или прикрутить этот новый экспорт в пример MiniGUI\SAMPLES\Advanced\Tsb_array_3 Желательно ещё бы сразу в примере задать многострочный Tsbrowse для экспорта. Суперхидер и подвал так же необходим в экспорте. А цвета наверное нужно как то задавать отдельным параметром в ЭКСПОРТ, тира 0-черно/белый, 1-цвет передать с Tsbrowse, 2-задать свои отдельные цвета. Это как предложение по цвету.
|
|
|
Haz
|
| |
Пост N: 1181
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.18 19:38. Заголовок: Andrey пишет: прик..
Andrey пишет: цитата: | прикрутить этот новый экспорт в пример MiniGUI\SAMPLES\Advanced\Tsb_array_3 |
| Я продемонстрировал сам механизм использования xmlxls. По которому можно примерно оценить скорость выгрузки 1000 строк и простейшее оформление. Конечно в этом механизме есть и форматы ячеек и формулы и использование цвета, объединения, задавать шрифты и пр. Конечно не все, но многое в нем есть. Сам по себе экспорт бровса в оригинальном виде в Excel, это как полуфабрикат. Выгрузка документа должна быть законченной, включая оформление. Под офомлением я понимаю вид документа, а не слответствие листа в Excel внешнему виду бровса. Оформление должно включать все реквизиты документа, а не только табличку. Сейчас лучшее оформление можно получить через OLE, но скорость оставляет желать лучшего. Понятно что можно выкинуть в олю массив, а потом наряжать лист, так и это не быстро. Наводить красоту можно и через тот же BIFF, но нет библиотеки, а в кодах по спецификации BIFF можно потеряться. В этом плане xmlxls это компромис с хорошей скоростью и возможностью рисовать почти как хочешь. Я на нем сделал несколько отчётов и могу сказать, что это именно альтернатива OLE для рисования на листе Excel. Теперь что касается выгрузки именно бровса в Excel. Встраивать сам класс в исходники TSBROWS скорее всго не рационально т. к. бровс потребует библиотеку xmlxls для сборки. А вот отдельный пример экспорта бровса сделать конечно можно. Подвалы, суперхидеры, шрифты и цвета, это все решаемо. Но делать из какого либо примера винегрет, тоже не вариант. Так что только отдельный и небольшой, чтоб было понятно что где.
|
|
|
Dima
|
| |
Пост N: 6727
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.02.18 23:00. Заголовок: Haz пишет: Встраива..
Haz пишет: цитата: | Встраивать сам класс в исходники TSBROWS скорее всго не рационально т. к. бровс потребует библиотеку xmlxls для сборки. |
| +1
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5725
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.02.18 14:39. Заголовок: Haz пишет: Но делат..
Haz пишет: цитата: | Но делать из какого либо примера винегрет, тоже не вариант. Так что только отдельный и небольшой, чтоб было понятно что где. |
| Хорошо, я тогда сделаю пример таблицы для этого. А там далее уже поможешь... Возвращаюсь к вопросу: Haz пишет: цитата: | можно перед записью строки заголовков задать высоту по заголовку, а потом перед записью данных задать высоту данных |
| Можно для Григория (чтобы он добавил в библиотеку) дать код для этого ?
|
|
|
Haz
|
| |
Пост N: 1182
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.02.18 21:52. Заголовок: Andrey пишет: Хорош..
Andrey пишет: цитата: | Хорошо, я тогда сделаю пример таблицы для этого. А там далее уже поможешь... |
|
договорились
|
|
|
Haz
|
| |
Пост N: 1183
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.02.18 21:57. Заголовок: Haz пишет: Можно дл..
Haz пишет: цитата: | Можно для Григория (чтобы он добавил в библиотеку) дать код для этого ? |
| Да можно конечно. Тем более, что это и так понятно по коду Excel2 куда что вставлять. Вопрос, а надо ли из простого экспорта, городить копию бровса?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5726
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.02.18 11:00. Заголовок: Haz пишет: Вопрос, ..
Haz пишет: цитата: | Вопрос, а надо ли из простого экспорта, городить копию бровса? |
| Нет не надо, надо только 2 позиции: 1) Просто если шапка таблицы (а это часто бывает) состоит из нескольких строк, то при экспорте надо учитывать высоту шапки. 2) Если данные таблицы 2-3 строки, то при экспорте тоже учитываем высоту данных таблицы. У меня несколько таблиц есть с такими параметрами, да я думаю и другие порадуются более корректному экспорту.
|
|
|
Haz
|
| |
Пост N: 1184
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.02.18 12:11. Заголовок: Andrey пишет: Нет н..
Andrey пишет: цитата: | Нет не надо, надо только 2 позиции: |
| В :Excel2() после этого FWrite( nHandle, BiffRec( 66, GetACP() ) ) FWrite( nHandle, BiffRec( 12 ) ) FWrite( nHandle, BiffRec( 13 ) ) Следующую строку убираем ( если кто то ужк успел ее суда добавить ) // FWrite( nHandle, BiffRec( 37 , ::nHeightCell * 15) ) После этого ... If ! Empty( cTitle ) cTitle := StrTran( cTitle, CRLF, Chr( 10 ) ) nAlign := If( Chr( 10 ) $ cTitle, 5, 1 ) FWrite( nHandle, BiffRec( 4, cTitle, 0, 0,, nAlign ) ) nLine := 3 EndIf Добавляем это FWrite( nHandle, BiffRec( 37 , ::nHeightHead * 15) ) А После этого ... If bPrintRow != Nil .and. ! Eval( bPrintRow, nRow ) ::Skip( 1 ) Loop EndIf Добавляем это If nRow == 2 FWrite( nHandle, BiffRec( 37 , ::nHeightCell * 15) ) END Andrey пишет: цитата: | У меня несколько таблиц есть с такими параметрами, да я думаю и другие порадуются более корректному экспорту. |
| может кто и порадуется , а по мне это просто способ схалявить на выгрузке таблицы. НУ чтоб юзер отстал , или для себя бумажку распечатать надо. такую выгрузку до ума еще доводить и доводить ( к примеру форматы ячеек ставить "процентный" или "финансовый" или как принято в фин отчетности - все отрицательные числа в скобках ) Проще уж сразу выгружать нормально
|
|
|
|
Haz
|
| |
Пост N: 1185
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.02.18 11:53. Заголовок: Использование ::aCheck
для справки; Обнаружил неприятную особенность :aCheck , при задании в качестве картинки хендла картинки из внешней переменной ( в моём случаи PUBLIC ) , повторный вызов TS картинку уже не показывал . Беглый просмотр кода исходников показал что при дестрое TS , так же дестроятся и эти хендлы. Т.е. закрытие бровса убивало PUBLIC переменные с хендлами картинок. Из ситуации вышел без изменения исходников , храня хендлы в самом бровсе через __objAddData (oBrw, 'hPic1' ) oBrw:hPic1:= LoadImage("PICTURE1") и oBrw:GetColumn( 'COL1'):aCheck := {oBrw:hPic1, nil }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1742
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.02.18 20:49. Заголовок: Haz пишет oBrw:GetCo..
Haz пишет цитата: | oBrw:GetColumn( 'COL1'):aCheck := {oBrw:hPic1, nil } |
| Почему сразу не делать oBrw:GetColumn( 'COL1'):aCheck := {LoadImage('PICTURE1'), nil } ?
|
|
|
Haz
|
| |
Пост N: 1186
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.02.18 21:18. Заголовок: SergKis пишет: Поче..
SergKis пишет: Логично, но не рискнул. При uBmpCell при этом идёт утечка памяти. В aCheck возможно утечка не проявится... тестировать не стал Хотя uBmpCell я вызвал в блоке...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1743
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.02.18 21:35. Заголовок: Haz пишет При uBmpC..
Haz пишет цитата: | При uBmpCell при этом идёт утечка памяти. |
| Как я понимаю, uBmpCell это полностью собственное управление, сам поставил, сам снял\освободил. Остальные свойства доводились "до кондиции" Скрытый текст
If ::aSortBmp != Nil DeleteObject ( ::aSortBmp[ 1 ] ) DeleteObject ( ::aSortBmp[ 2 ] ) EndIf If ::aCheck != Nil DeleteObject ( ::aCheck[ 1 ] ) DeleteObject ( ::aCheck[ 2 ] ) EndIf If Len( ::aColumns ) > 0 For i := 1 To Len( ::aColumns ) If Valtype( ::aColumns[ i ]:aCheck ) == "A" AEval( ::aColumns[ i ]:aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } ) EndIf If Valtype( ::aColumns[ i ]:aBitMaps ) == "A" AEval( ::aColumns[ i ]:aBitMaps, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } ) EndIf Next EndIf
| Рекомендовал бы, вместо uBmpCell, использовать :aBitMaps с цифровым значением (Tsb_aBitMaps) oBrw:GetColumn("FLD1"):aCheck := { LoadImage(".\RES\Print32.png"), NIL } oBrw:GetColumn("FLD2"):aCheck := { LoadImage(".\RES\Save32.png" ), NIL } oBrw:GetColumn("FLD3"):aCheck := { LoadImage(".\RES\Mail32.png" ), NIL } oBrw:GetColumn("FLD4"):aCheck := { LoadImage(".\RES\check1.bmp" ), ; LoadImage(".\RES\check0.bmp") } oBrw:GetColumn("FLD6"):lBitMap := .T. oBrw:GetColumn("FLD6"):aBitMaps := { LoadImage(".\RES\edit_delete.bmp" ), ; LoadImage(".\RES\edit_cancel.bmp" ) } ... oBrw:GetColumn("FLD7"):lBitMap := .T. oBrw:aBitMaps := { LoadImage(".\RES\flag_bel.bmp"), ; LoadImage(".\RES\flag_en.bmp" ), ; LoadImage(".\RES\flag_kaz.bmp"), ; LoadImage(".\RES\flag_ru.bmp" ), ; LoadImage(".\RES\flag_ua.bmp" ) }
|
|
|
Haz
|
| |
Пост N: 1187
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.02.18 21:49. Заголовок: SergKis пишет: Реко..
SergKis пишет: цитата: | Рекомендовал бы, вместо uBmpCell, использовать :aBitMaps |
| Да, согласен спасибо за подсказку. В uBmpCell утечка была именно из-за блока. При каждом DrawLine() инмциализировался новый хендл.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1744
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.02.18 23:32. Заголовок: SergKis пишет Осталь..
SergKis пишет цитата: | Остальные свойства доводились "до кондиции" |
| Упс. Потерялось однако. В моей версии еще такие строки есть в методе Destroy(): ... If Len( ::aColumns ) > 0 For i := 1 To Len( ::aColumns ) If Valtype( ::aColumns[ i ]:aCheck ) == "A" AEval( ::aColumns[ i ]:aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } ) EndIf If Valtype( ::aColumns[ i ]:aBitMaps ) == "A" AEval( ::aColumns[ i ]:aBitMaps, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } ) EndIf Next EndIf If Valtype(::aBitMaps) == "A" AEval(::aBitMaps, {|hBmp| If( empty(hBmp), , DeleteObject(hBmp) ) }) EndIf ... т.е. в тек. версии утечка есть при oBrw:aBitMaps := {LoadImage(...), ...} на колонках утечки нет.
|
|
|
Haz
|
| |
Пост N: 1188
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.02.18 08:37. Заголовок: SergKis пишет: т.е...
SergKis пишет: цитата: | т.е. в тек. версии утечка есть при oBrw:aBitMaps := {LoadImage(...), ...} на колонках утечки нет |
| Возможно и а текущей не будет утечки если aBitMaps задавать массивом. Внутренние переменные бровса убьются сборщиком мусора после дестроя самого бровса. А во время работы бровса новые объекты не создаются. В моем же случае было uBmpCell := {¦¦ if( lFllag, Loadimage(), nil)} тоесть при навигации бровса постоянно создаётся новый хендл картинки, не уничтожая старый. GdiPlus при навигации показал утечки. Обнаружил проблему Дима, у него пользователь от скуки гонял курсор вверх вниз и брос падал. С дестроем в твой версии все понятно. Непривычно само поведение - кормишь бровсу переменную, а он ее убивает. Этот момент нужно учитывать. У меня маленькая статусная картинка используется в нескольких модулях и в каждом бровсе, я ее определил в паблик переменной при старте программы сслаюсь на нее везде. т. е. LoadImage() делал один раз. Поскольку aCheck практически не использовал то проблем не видел. Будем считать это особеннстью бровса.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1745
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.02.18 10:26. Заголовок: Haz пишет В моем же ..
Haz пишет цитата: | В моем же случае было uBmpCell := {¦¦ if( lFllag, Loadimage(), nil)} |
| Это скорее недосмотр кода, т.к. именно для oCol:uBmpCell можно использовать PUBLIC\PRIVATE переменные, т.е. oCol:uBmpCell := {¦¦ if( lFllag, m->hPicture1, nil)} или из массива брать handle image цитата: | Будем считать это особеннстью бровса |
| Пара LoadImage() -> DeleteObject() для aChecк, aMitMaps как особенность тсб, просто надо учитывать, а усилить поведение, при необходимости, всегда можно, к примеру :aCheck := { 'PICTURE1', Nil } - будет внутри делать LoadImage('PICTURE1') и DeleteObject() при Dectroy() :aCheck := { hPicture1, Nil } - не будет делать ни LoadImage() ни DeleteObject() при Dectroy() для :aBitMaps аналогично. Надо ли ?
|
|
|
Haz
|
| |
Пост N: 1189
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.02.18 12:08. Заголовок: SergKis пишет: aChe..
SergKis пишет: цитата: | aChecк, aMitMaps как особенность тсб, просто надо учитывать |
| я про это же . Пока сам не наткнешься- не поймешь )
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|