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




Пост N: 5971
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 12:15. Заголовок: Пример экспорта Tsbrowse в разные форматы (Tsb_Export)...


Всем привет.

Что то у меня цвета с таблицы Tsbrowse не такими экспортируются в XML.
Т.е. что-то в библиотеке hbxlsxml цвета по другому получаются...

В Tsb2xml.prg цвет задаю так:
 
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)} )

Может неправильно делаю ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 75 , стр: 1 2 3 4 All [только новые]


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




Пост N: 6116
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.11.18 14:22. Заголовок: Собрал проект Tsb_Ex..


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

Разница в размере между 32бит и 64бит на 400Кб больше ехе-ник весит.

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




Пост N: 6124
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.11.18 22:03. Заголовок: Добавил следующее ме..


Добавил следующее меню - "Export to C# Dll Ole-Excel (xls)" !

Создание массивов таблицы и передача их в C# - ExcelOleLib.dll
сам проект ExcelOleLib.dll на C# (преобразование из массива и заполнение через OLE эксельной таблицы).

Вызов из харбора dll-ки на C# выглядит так:
 
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") // возврат хендла окна экселя

На игровом компе не вылетает.
Большая просьба протестировать на ваших компах.

Сами ехе-ники собраны на 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

Сами исходники отправлены Григорию.

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




Пост N: 6125
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.11.18 18:57. Заголовок: Вот пример аналог Ts..


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

Обратите внимание на очень интересное поведение грида при растягивании окна !
Автоматом добавляются для всех колонок таблицы в той же пропорции что и была до растягивания.
Код на C# всего вот такой:


Как бы сделать ТАК ЖЕ и для Tsb_Export ?

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




Пост N: 1404
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.11.18 19:28. Заголовок: Andrey пишет: Как б..


Andrey пишет:

 цитата:
Как бы сделать ТАК ЖЕ


Так же и делай, по тому же алгоритму.
Есть же метод SetColSize(). Возможно не совсем плавная прорисов ка получится, но это другая история

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




Пост N: 2139
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.11.18 10:28. Заголовок: Haz пишет Так же и д..


Haz пишет
 цитата:
Так же и делай, по тому же алгоритму.


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

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




Пост N: 1405
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.11.18 10:56. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно задавать ВСЕ контролы в %


Согласен, тогда на разных мониторах будет приемлемо смотреться

Но ... Андрей хотел

 цитата:
сделать ТАК ЖЕ


и для этого в TS все есть, просто бери и делай

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




Пост N: 6130
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.18 18:52. Заголовок: Вот ещё один тестовы..


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

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




Пост N: 6131
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 17:31. Заголовок: Возвращаюсь к измене..


Возвращаюсь к изменению ширин колонок Tsbrowse на окне.
Если сделать так:
      ON MAXIMIZE ( ResizeTable(oBrw) )              ; 
ON SIZE ( ResizeTable(oBrw) ) ;

То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) !
Что не очень красиво.

В C# есть свойства для окна: Form_ResizeBegin(...) и Form_ResizeEnd(...)
Из-за этого там плавная перерисовка таблицы.

Можно ли как то в МиниГуи сделать похоже ?
Или как то клик мышки отловить, нажата она или отпустили её ?

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




Пост N: 2140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 17:56. Заголовок: Andrey пишет То при ..


Andrey пишет
 цитата:
То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) !


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

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




Пост N: 1408
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.11.18 18:04. Заголовок: Andrey пишет: Или к..


Andrey пишет:

 цитата:
Или как то клик мышки отловить, нажата она или отпустили её ?


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

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




Пост N: 2141
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 18:12. Заголовок: Haz пишет в h_events..


Haz пишет
 цитата:
в h_events.prg есть два события


Ловить их надо скорее в блоке кода тсб
:bEvents := {|oBrw, nMsg, nWParam, nLParam| ... }

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




Пост N: 6132
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 18:14. Заголовок: Haz пишет: в h_even..


Haz пишет:

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



Если я вставлю, то код точно работать не будет !
Да и это только у меня будет, а в других версиях потом не будет.
Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?

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




Пост N: 2142
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 18:33. Заголовок: Andrey пишет Как бы ..


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(...) НЕ продолжать, все уже сделано

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




Пост N: 6133
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 19:59. Заголовок: SergKis пишет: Код ..


SergKis пишет:

 цитата:
Код общий чего надо вставлять ?


Да я не про то подумал.

SergKis пишет:

 цитата:
resize мне, к примеру совсем не нужен для работы с данными базы и клиента это вполне устраивает.
Все размеры идут от фонта _HMG_DefaultFont... устанавливаются извне.


Согласен, но хочется сделать изменяемое окно. Или хотя бы попробовать сделать.
Т.е. типа такого ?
STATIC FUNCTION ResizeTable(oBrw) 
...
oBrw:bEvents := {|oBrw, nMsg, nWParam, nLParam| MyEvents(oBrw, nMsg, nWParam, nLParam) }
....


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




Пост N: 1409
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.11.18 20:39. Заголовок: SergKis пишет: Лови..


SergKis пишет:

 цитата:
Ловить их надо скорее в блоке кода тсб


Не проверял, но есть сомнения что это сработает когда таскаем за угол парент окна.

Проверил по быстрому , клики естественно ловятся только на TSB, парент окно на котором TSB - хоть обкликайся. Значит клики при таскании парента за угол так не поймать

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




Пост N: 1410
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 11:21. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если я вставлю, то код точно работать не будет !
Да и это только у меня будет, а в других версиях потом не будет.
Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?



На деле все просто если хотя бы заглянуть в исходник . А в нем при нажатии кнопки устанавливаются переменные
 
_HMG_MouseRow := HIWORD( lParam )
_HMG_MouseCol := LOWORD( lParam )
_HMG_MouseState := 1, 2, 3 - зависит от какую кнопку давим


При отпускании
 
_HMG_MouseState := 0


Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState

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




Пост N: 6134
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.11.18 11:57. Заголовок: Haz пишет: Вот чтоб..


Haz пишет:

 цитата:
Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState



Понял. СПАСИБО !

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




Пост N: 6135
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.11.18 12:16. Заголовок: Нет изменения _HMG_M..


Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.
Как тогда делать ?
STATIC FUNCTION ResizeTable(oBrw) 

nMouseState := _HMG_MouseState
nMouseRow := _HMG_MouseRow
nMouseCol := _HMG_MouseCol

? "nMouseState=", nMouseState, nMouseRow, nMouseCol
....

nMouseState= 0 410 1252
nMouseState= 0 410 1252
nMouseState= 0 410 1252

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




Пост N: 1411
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 12:38. Заголовок: Andrey пишет: Нет и..


Andrey пишет:

 цитата:
Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.
Как тогда делать ?


Искать косяки , спецом проверил при нажатии и отпускании переменная меняется
Проверял так
DEFINE TIMER Timer_MTest OF Form_1 INTERVAL 100 ACTION {|| SetProperty( "Form_1", "TITLE", hb_NTOC( M->_HMG_MouseState ) ) }

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




Пост N: 1412
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 12:44. Заголовок: Andrey пишет: Нет и..


Andrey пишет:

 цитата:
Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.


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

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

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