On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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:....



Спасибо: 0 
Профиль
Ответов - 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 Кто тут увидел шаманов



Да ты шаман !
Можешь у других спросить... Больше тебя и никто и не написал как делать !

Заодно и подскажи как для шапки таблицы такое же сделать ?
А то тоже получается всегда в одну строчку !


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1179
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.02.18 14:52. Заголовок: Кому была интересна выгрузка в Excel через XML


Пересобрал библиотеку hbxlsxml.lib под BCC ( в родной с русским есть глюк)
и дополнил свой пример Tsb_cursor выгрузкой в Excel по правой кнопке мышь.
Это просто пример, как альтернатива BIFF или OLE
Цветная раскраска и формулы поддерживается от автора библиотеки.

по ссылке готовый пример, исходник примера и библиотека. исходники самой библы в искать харбуре
click here

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1180
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.02.18 14:55. Заголовок: Andrey пишет: Заодн..


Andrey пишет:

 цитата:
Заодно и подскажи как для шапки таблицы такое же сделать ?
А то тоже получается всегда в одну строчку !



можно перед записью строки заголовков задать высоту по заголовку, а потом перед записью данных задать высоту данных

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5724
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.18 18:08. Заголовок: Haz пишет: по ссылк..


Haz пишет:

 цитата:
по ссылке готовый пример, исходник примера и библиотека. исходники самой библы в искать харбуре



Пример понятен.
Наверное всё таки тестовый пример нужно отдельно для этого делать, с разными типами полей.
Или прикрутить этот новый экспорт в пример MiniGUI\SAMPLES\Advanced\Tsb_array_3

Желательно ещё бы сразу в примере задать многострочный Tsbrowse для экспорта.
Суперхидер и подвал так же необходим в экспорте.
А цвета наверное нужно как то задавать отдельным параметром в ЭКСПОРТ, тира 0-черно/белый, 1-цвет передать с Tsbrowse, 2-задать свои отдельные цвета. Это как предложение по цвету.

Спасибо: 0 
Профиль
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 для сборки.
А вот отдельный пример экспорта бровса сделать конечно можно. Подвалы, суперхидеры, шрифты и цвета, это все решаемо.
Но делать из какого либо примера винегрет, тоже не вариант. Так что только отдельный и небольшой, чтоб было понятно что где.




Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6727
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.02.18 23:00. Заголовок: Haz пишет: Встраива..


Haz пишет:

 цитата:
Встраивать сам класс в исходники TSBROWS скорее всго не рационально т. к. бровс потребует библиотеку xmlxls для сборки.


+1

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5725
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.18 14:39. Заголовок: Haz пишет: Но делат..


Haz пишет:

 цитата:
Но делать из какого либо примера винегрет, тоже не вариант. Так что только отдельный и небольшой, чтоб было понятно что где.



Хорошо, я тогда сделаю пример таблицы для этого. А там далее уже поможешь...

Возвращаюсь к вопросу:
Haz пишет:

 цитата:
можно перед записью строки заголовков задать высоту по заголовку, а потом перед записью данных задать высоту данных


Можно для Григория (чтобы он добавил в библиотеку) дать код для этого ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1182
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.18 21:52. Заголовок: Andrey пишет: Хорош..


Andrey пишет:

 цитата:
Хорошо, я тогда сделаю пример таблицы для этого. А там далее уже поможешь...

договорились

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1183
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.18 21:57. Заголовок: Haz пишет: Можно дл..


Haz пишет:

 цитата:
Можно для Григория (чтобы он добавил в библиотеку) дать код для этого ?


Да можно конечно. Тем более, что это и так понятно по коду Excel2 куда что вставлять. Вопрос, а надо ли из простого экспорта, городить копию бровса?

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5726
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.02.18 11:00. Заголовок: Haz пишет: Вопрос, ..


Haz пишет:

 цитата:
Вопрос, а надо ли из простого экспорта, городить копию бровса?


Нет не надо, надо только 2 позиции:
1) Просто если шапка таблицы (а это часто бывает) состоит из нескольких строк, то при экспорте надо учитывать высоту шапки.
2) Если данные таблицы 2-3 строки, то при экспорте тоже учитываем высоту данных таблицы.

У меня несколько таблиц есть с такими параметрами, да я думаю и другие порадуются более корректному экспорту.

Спасибо: 0 
Профиль
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 пишет:

 цитата:
У меня несколько таблиц есть с такими параметрами, да я думаю и другие порадуются более корректному экспорту.


может кто и порадуется , а по мне это просто способ схалявить на выгрузке таблицы. НУ чтоб юзер отстал , или для себя бумажку распечатать надо.
такую выгрузку до ума еще доводить и доводить ( к примеру форматы ячеек ставить "процентный" или "финансовый" или как принято в фин отчетности - все отрицательные числа в скобках )
Проще уж сразу выгружать нормально


Спасибо: 0 
Профиль
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 }



Спасибо: 0 
Профиль
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 } ?


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1186
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.02.18 21:18. Заголовок: SergKis пишет: Поче..


SergKis пишет:

 цитата:
Почему сразу не делать


Логично, но не рискнул. При uBmpCell при этом идёт утечка памяти.
В aCheck возможно утечка не проявится... тестировать не стал
Хотя uBmpCell я вызвал в блоке...

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1743
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.02.18 21:35. Заголовок: Haz пишет При uBmpC..


Haz пишет
 цитата:
При uBmpCell при этом идёт утечка памяти.


Как я понимаю, uBmpCell это полностью собственное управление, сам поставил, сам снял\освободил.
Остальные свойства доводились "до кондиции"Скрытый текст

Рекомендовал бы, вместо 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" ) }


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1187
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.02.18 21:49. Заголовок: SergKis пишет: Реко..


SergKis пишет:

 цитата:
Рекомендовал бы, вместо uBmpCell, использовать :aBitMaps


Да, согласен спасибо за подсказку.
В uBmpCell утечка была именно из-за блока. При каждом DrawLine() инмциализировался новый хендл.


Спасибо: 0 
Профиль
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(...), ...}
на колонках утечки нет.


Спасибо: 0 
Профиль
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 практически не использовал то проблем не видел. Будем считать это особеннстью бровса.


Спасибо: 0 
Профиль
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 аналогично.
Надо ли ?


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1189
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.02.18 12:08. Заголовок: SergKis пишет: aChe..


SergKis пишет:

 цитата:
aChecк, aMitMaps как особенность тсб, просто надо учитывать


я про это же . Пока сам не наткнешься- не поймешь )


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 680
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет