On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник


Пост 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:....

























<a href=http://www.bestmarket.com.ua >ноутбуки</a>























<a href=http://www.bestmarket.com.ua >ноутбуки</a>
Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 286 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


постоянный участник




Пост N: 5723
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.18 14:49. Заголовок: Haz пишет: PS Кто т..


Haz пишет:

 цитата:
PS Кто тут увидел шаманов



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

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


Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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



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

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




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


Haz пишет:

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



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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
администратор




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


Haz пишет:

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


+1

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




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


Haz пишет:

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



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

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

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Haz пишет:

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


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

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




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


Haz пишет:

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


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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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


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

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет