Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Haz: Andrey пишет: Можно как нибудь убрать/починить этот формат для METHOD Excel2() ? или полностью переделывать , то есть все предустановки выносить из Excel2() и назначать до экспорта ( у меня для этого служит XMLSetDefault() и переопределения перед экспортом) или навсегда вшивать этот ( никому не нужный формат ) в исходник Excel2(). Сам формат можно подсмотреть у меня в выгрузке.

Andrey: Haz пишет: или навсегда вшивать этот ( никому не нужный формат ) в исходник Excel2(). Хотя бы так или сделать определение этого формата до вызова Excel2(), как ты сделал у себя: [pre2] XmlSetDefault( oBrw ) // Можно значения по умолчанию переопределять oBrw:aColumns[6]:XML_Format := "00\:00\:00" oBrw:aColumns[9]:XML_Format := "0.00_ ;[Red]\-0.00\ " Brw2Xml(oBrw, "TEST.XML", .T.,, aTitle) // экспорт в Excel XmlReSetDefault( oBrw )[/pre2] А лучше наверное в исходнике дать этот формат и небольшое описание, типа для назначения своих форматов. Можно название твоей функции поменять на Excel3Xml() ? И ещё вопрос: [pre2] For nCol := 1 To Len( oBrw:aColumns ) uData := Eval( oBrw:aColumns[ nCol ]:bData ) cType := ValType( uData )[/pre2] можно добавить сюда сразу:[pre2] nBackColor := oBrw:aColumns[ nCol ]:nClrBack oStyle:bgColor( '#' + NToC(nBackColor, 16) ) // Excel > 2003 [/pre2] Или так не пойдёт, потому что цвета Tsbrowsa состоят из блок-кода ?

Haz: Andrey пишет: сделать определение этого формата до вызова Excel2(), как ты сделал у себя: Это потребует переделки метода, лучше выносить наружу, т.к форматов в Excel гораздо больше чем в харбур и могут они быть любые Andrey пишет: Можно название твоей функции поменять на Excel3Xml() Называй как хочешь )


SergKis: Andrey пишет Или так не пойдёт, потому что цвета Tsbrowsa состоят из блок-кода ? Сделай обработку блока кода[pre2] nBackColor := oBrw:aColumns[ nCol ]:nClrBack If Valtype( nBackColor ) == "B" Eval( nBackColor, oBrw:nAt, nCol, oBrw ) EndIf oStyle:bgColor( '#' + NToC(nBackColor, 16) ) // Excel > 2003 [/pre2]

SergKis: PS сори, пропустил пока набирал (маленький экран) nBackColor := Eval( nBackColor, oBrw:nAt, nCol, oBrw )

Andrey: SergKis пишет: Сделай обработку блока кода Сделал. Цвета не появляются ! Хотя коды цвета правильные, совпадают с CLR_HGRAY Вот код:[pre2] For nCol := 1 To Len( oBrw:aColumns ) uData := Eval( oBrw:aColumns[ nCol ]:bData ) cType := ValType( uData ) nBackColor := oBrw:aColumns[ nCol ]:nClrBack If Valtype( nBackColor ) == "B" nBackColor := Eval( nBackColor, oBrw:nAt, nCol, oBrw ) EndIf //? nLine, nCol, nBackColor, "== 12632256", CLR_HGRAY oStyle:bgColor( '#' + NToC(nBackColor, 16) ) switch cType[/pre2] Наверное ещё что-то нужно сделать, чтобы применить цвет к этой ячейке ?

Haz: Andrey пишет: Наверное ещё что-то нужно сделать, чтобы применить цвет к этой ячейке ? Стиль нужно определить заранее. С блоками скорее в два прохода придётся. Сначала анализируем весь бровс на возможные форматы по цвету, шрифту и пр. На основе анализа формируем все эти форматы, а потом, при выводе бровса в зависимости от результата блока выбираем нужный формат. Excel читает XML построчно. К момену вывода ячейки формат должен быть определен Из примера куска кода не ясно где он расположен в тексте Ps почитал выше, тут не сработает. Тут идёт вывод и форматы уже определены ранее. Андрей, ты зациклен на воспроизводстве внешнего вида бровса. Либо заранее опрелить цвет которам ты будешь рисовать. Либо взять цвет из каждой ячейки при первомпроходе, сформитовать форматы запомнив координаты. А при выводе брать по координатам. Я же сторонник того, что копия бровса в Excel никому не нужна. Достаточно вывести данные в читаемом и оформленном виде, для маньков путь анализа бровса. Другим способом можно назвать условное ворматирование Excel, но там тоже все не само появится, и нужно как минимум знать как написать условный формат.

Andrey: Haz пишет: Из примера куска кода не ясно где он расположен в тексте Вот код: [pre2] While nLine <= nLen oSheet:cellHeight( nRow, 1, oBrw:nHeightCell / 1.3 ) For nCol := 1 To Len( oBrw:aColumns ) uData := Eval( oBrw:aColumns[ nCol ]:bData ) cType := ValType( uData ) nBackColor := oBrw:aColumns[ nCol ]:nClrBack If Valtype( nBackColor ) == "B" nBackColor := Eval( nBackColor, oBrw:nAt, nCol, oBrw ) EndIf //? nLine, nCol, nBackColor, "== 12632256" oStyle:bgColor( '#' + NToC(nBackColor, 16) ) switch cType[/pre2] Haz пишет: Я же сторонник того, что копия бровса в Excel никому не нужна. Достаточно вывести данные в читаемом и оформленном виде, для маньков путь анализа бровса. Согласен, просто хотелось бы иметь просто пример как это делается (оформление цветами). В качестве примера и сделал меню для повтора цветов:[pre2] MENUITEM 'color table white ' ACTION nTsbColor := 1 FONT Font1 MENUITEM 'color table gray ' ACTION nTsbColor := 2 FONT Font1 MENUITEM 'color of the table "ruler"' ACTION nTsbColor := 3 FONT Font1 MENUITEM 'color of the table "columns"' ACTION nTsbColor := 4 FONT Font1 MENUITEM 'color of the table "chess"' ACTION nTsbColor := 5 FONT Font1[/pre2] Вот я решил сделать цвета в xml и не могу с ходу. Для этого нужно разбираться. А что за пример в котором не показано как можно сделать ! И не маньяк я, а хочу иметь в качестве примера - как нужно правильно делать, а не методом тыка работает/не работает. Т.е. отдельно написать: // секция для цветового оформления таблицы. Шапку, суперхидер и подвал как заполнять цветом уже понятно, осталось только саму таблицу покрасить.

Haz: Andrey пишет: Вот я решил сделать цвета в xml и не могу с ходу. Для этого нужно разбираться. Определить стиль перед выводом заранее. При выводе указать каким стилем. Ты же пытаешься во время вывода ячеек бровса сунуть цвет непонятно какому стилю. Это как раскраски, хочу фигурку закрасить желтым, беру жёлтый фломастер каторый уже заранее преготовлен. Я же не просто так говорил про варианты : 1 выбирать заранее определенные стили - условные цвета вывода 2 попытаться при прогоне по бровсу сформировать все комбинации цвет, шрифт, рамка, выравнивание. Опрелить их как стили с привязкой к координатам ячейки и при выводе бровса брать эти стили 3 тоже что и 2 но использовать условное форматирование. Мне не сложно еще раз повторить, что Excel читает XML сверху вниз и слева направо. То есть сначала раскладываем фломастеры и их уже не меняем. Потом рисуем тем что разложили. Реализация динамической раскраски начинается с вопроса, а какие фломастеры потребуются. Ну уж если совсем по простому То обрати внимание что цвет шапки и подвала задаётся в соответствуюших местах кода под коментарием ОПРЕДЕЛЯЕМ СТИЛИ ШАПКИ и ОПРЕДЕЛЯЕМ СТИЛИ ПОДВАЛА. Там же есть и комментарий ОПРЕДЕЛЯЕМ СТИЛИ КОЛОНОК, вот туда свой цвет и пихай. И учти каждый стиль одного цвета, нужен другой цвет - определяй новый стиль.

Andrey: Haz пишет: На самом деле если бы была нормальная спецификация пл BIFF2(4) , то выгрузка Excel2() довольно легко дополняется. Видел только англоязычную где то, да и с примерами по BIFF очень скудно. Пример MiniGUI\SAMPLES\Advanced\Tsb_Brw2xml из последней версии МиниГуии - классный получился ! Спасибо Haz ! Экспорт для Excel2() для нескольких строк - то что нужно ! Даже наверное шрифты можно не уменьшать. Но да ладно, пускай остаются в качестве примера, как можно делать. Единственно что не хватает в экспорте для Excel2() рамок в ячейках таблицы. В шапке и подвале таблицы рамки есть, а на ячейках нет ! Можно это как то подправить ?

Haz: Andrey пишет: Единственно что не хватает в экспорте для Excel2() рамок в ячейках таблицы. В шапке и подвале таблицы рамки есть, а на ячейках нет ! Можно это как то подправить ? А самому хотя бы посмотреть что мешает ? [pre2]Function BiffRec( nOpCode, uData, nRow, nCol, lBorder, nAlign, nPic, nFont )[/pre2]

Andrey: Прикрутил к этому же проекту ещё один экспорт, через ОЛЮ ! 1) Для одной строки всё прекрасно работает, для многострочных строк нет ! 2) Как задать титул перед шапкой определённым фонтом (также, как для нового oBrw:Excel2() ) ? Как бы исправить исходники ? Проект вот тут - https://cloud.mail.ru/public/JNeH/xGmMBvmVD Почему не работает в методе oBrw:ExcelOle( cXlsFile, ....) следующее назначение ? [pre2] lSave := .T. cPath := GetStartUpFolder() + "\" // путь записи файла cMaska := "A14_ДолгСальдо" // шаблон файла cXlsFile := cPath + cMaska + "_" + DTOC( DATE() ) + "_" cXlsFile += SUBSTR( CharRepl( ":", TIME(), "-" ), 1, 5 ) + ".xls"[/pre2] Обрезает до A14_ДОЛГСАЛЬДО_12.03.2018_23-18

Andrey: Andrey пишет: Почему не работает в методе oBrw:ExcelOle( cXlsFile, ....) следующее назначение ? lSave := .T. cPath := GetStartUpFolder() + "\" // путь записи файла cMaska := "A14_ДолгСальдо" // шаблон файла cXlsFile := cPath + cMaska + "_" + DTOC( DATE() ) + "_" cXlsFile += SUBSTR( CharRepl( ":", TIME(), "-" ), 1, 5 ) + ".xls" Обрезает до A14_ДОЛГСАЛЬДО_12.03.2018_23-18 Убрал в модуле h_tbrowse.prg строку 4809: [pre2] If ! Empty( cXlsFile ) //cXlsFile := AllTrim( StrTran( Upper( cXlsFile ), ".XLS" ) ) поставил // EndIf[/pre2] Перестало обрезать ! И убрался только верхний регистр ! То что нужно ! Григорий, убери пожалуйста в исходниках эту строку. Или замени её как нужно, для следующих версий МиниГуи ! Заранее спасибо !

Andrey: [pre2] oBrw:ExcelOle( cXlsFile, lActivate, hProgress, cTitle, hFont, lSave, bExtern, aColSel, bPrintRow ) cXlsFile // имя файла lActivate := .T. // открыть Excel hProgress := nil // хенд для ProgressBar lSave := .T. // сохранить файл bExtern := nil // ? aColSel := nil // ? bPrintRow := nil // ?[/pre2] Подскажите пожалуйста, что за параметры (за что отвечают) ?

Andrey: SergKis пишет: Предлагаю новый метод для tsb, для растяжки нескольких колонок до размера тсб по ширине. ..... Использование при ширине tsb > ширины колонок :AdjColumns() - все колонки :AdjColumns({"NAME", "SUMMA"}) - указанные колонки по cName :AdjColumns({3, 4, 5}) - указанные колонки по номеру А нормально будет работать ? Я при включении предыдущего метода на примере Tsb_Config.prg [pre2] oBrw:nAdjColumn := 2 // stretch column 2 to fill the voids in the right Tbrowse[/pre2] имел хороший баг при изменении ширины окна ! Григорий помог его решить через: [pre2] // repartition column 2 (1 + 1 -SELECTOR) - otherwise buggy oBrw:bInit := {|| oBrw:SetColSize( 2, nWidthFirstColumn )} .... ////////////////////////////////////////////////////////////////// FUNCTION ResizeBrowse() .... Eval(oBrw:bInit) // read the second column of the table ... [/pre2]

SergKis: Andrey пишет А нормально будет работать ? Я при включении предыдущего метода на примере Tsb_Config.prg oBrw:nAdjColumn := 2 SergKis пишет Использование при ширине tsb > ширины колонок т.е. ты вызываешь метод так (др. вариантов не предполагал пока)[pre2] :AdjColumns({3, 4, 5}) // или :AdjColumns() END TBROWSE oRpt:SetNoHoles()[/pre2] возможно при увеличении окна и размера тсб, тоже сработает, если вызвать. Можешь пробовать libу кинул

Andrey: SergKis пишет: Можешь пробовать libу кинул Классно ! Работает ! Но, если использовать [pre2] oBrw:HideColumns( {10} ,.t.) // скрыть колонки [/pre2] То последняя колонка становится слишком широкой ! Т.е. наверное не учитываются скрытые колонки ? А так очень понравился этот метод !

SergKis: Andrey пишет То последняя колонка становится слишком широкой ! Есть такая бяка. Надо правки делать[pre2] METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse ... LOCAL nVisible := 0, aVisible := {} ... AEval( ::aColumns, {|oc| nVisible += iif( oc:lVisible, oc:nWidth, 0 ) }) AEval( aCol , {|nc| iif( obr:aColumns[ nc ]:lVisible, AAdd(aVisible, nc), Nil ) }) k := Len(aVisible) ... For i := 1 To k c := aVisible[ i ] ... [/pre2] вроде работает, погоняй еще, либу кинул

Andrey: SergKis пишет: вроде работает, погоняй еще, либу кинул Погонял... Не работает... Свой пример кинул.

SergKis: Andrey пишет Погонял... Не работает... SergKis пишет :AdjColumns({3, 4, 5}) // или :AdjColumns() END TBROWSE а у тебя[pre2] :lLockFreeze := .T. // избегать прорисовки курсора на замороженных столбцах :AdjColumns() // растяжка колонок до размера тсб по ширине ... :GetColumn("Name_8"):lEdit := .T. :HideColumns( {10} ,.t.) // скрыть колонки TsbColor( oBrw ) // задание цветов таблицы ... т.е. сначала разместили по ширине колонки, потом скрыли. ЗАМЕЧАТЕЛЬНО Убрал в самый низ ... :AdjColumns() // растяжка колонок до размера тсб по ширине END WITH // oBrw объект снят сработало как надо. [/pre2]



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