Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

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

Andrey: И вот эту ошибку тоже бы убрать: Error BASE/2017 Argument error: AEVAL Args: [1] = U [2] = B {|| ... } --------------------------------- Stack Trace --------------------------------- Called from AEVAL(0) Called from MAIN(53) in module: demo5.prg Делаю так: [pre2]aHead := NIL ?v aHead[/pre2] Пускай NIL возвращает, а то прога валится.

SergKis: Можно так поправить i_ini.ch[pre2] #command ?a [<arr>] => If( <arr> == NIL, , aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, xv ), _LogFile() } ) ) #command ?v [<arr>] => If( <arr> == NIL, , aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, iif( Valtype(xv) == "A", hb_valtoexp(xv), xv ) ), _LogFile() } ) ) [/pre2]

Andrey: SergKis пишет: Можно так поправить i_ini.ch Поправил, теперь ошибки нет и результата в _MsgLog.txt нет. Будешь гадать почему нет [pre2] ?v aHead[/pre2]


SergKis: Andrey пишет теперь ошибки нет и результата в _MsgLog.txt нет. Так применяй правильно ? "aSize =", aSize ?v aSize Ошибки нет и занятого места тоже в лог файле aSize = NIL

Andrey: SergKis пишет: Так применяй правильно Понял !

SergKis: gfilatov2002 Может чуток подправим ? [pre2] METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... Local cTmp, cHead, hFontH ... hFont := iif( ::hFont != Nil, ::hFont, 0 ) hFontH := iif( ::hFontHead != Nil, ::hFontHead, ::hFont ) If cType == "C" ... nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading )+1 ), hFontH ), nSize ) nSize += iif( ! Empty( cOrder ), 14, 0 ) ElseIf ValType( ::aColSizes ) == "A" .and. ! Empty( ::aColSizes ) .and. n <= Len( ::aColSizes ) ... [/pre2]

gfilatov2002: SergKis пишет: чуток подправим Поправил, конечно. Благодарю за помощь

SergKis: gfilatov2002 Предложение по ENUMERATOR для нумерации только видимых колонок. :lEnum := .F. меняет цвет, align. Словом не подошел. Простое решение при :lEnum := .T. [pre2] METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... Local nDeltaLen, uTmp ... IF ::lDrawSpecHd ... if ::lEnum cHeading := hb_ntos( nJ - iif( ::lSelector, 1, 0 ) ) IF ! empty( oColumn:cSpcHeading ) uTmp := iif( Valtype( oColumn:cSpcHeading ) == "B", Eval( oColumn:cSpcHeading, nJ, Self ), oColumn:cSpcHeading ) IF HB_ISNUMERIC ( uTmp ) ; cHeading := hb_ntos( uTmp ) ELSEIF HB_ISCHAR( uTmp ) ; cHeading := uTmp ENDIF ENDIF if nI == nBegin .and. ::lSelector .or. nI == nLastCol cHeading := "" endif else ... Применение ... mySetTsb( oBrw ) myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные myDbfDelColTsb( oBrw ) myEnumTsb( oBrw ) mySet2Tsb( oBrw ) :bOnEscape := {|ob| DoMethod(ob:cParentWnd, "Release") } // выход по ESC END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } ... STATIC FUNCTION myEnumTsb( oBrw ) LOCAL oCol, nCnt := 0 FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( ++nCnt ) ENDIF NEXT RETURN NIL ... [/pre2] Т.е. если убрать myDbfDelColTsb( oBrw ) // myEnumTsb( oBrw ) mySet2Tsb( oBrw ) будет первоначальный алгоритм При отработке ф-ии будет нумерация только видимых колонок У Андрея есть пример, если что ...

gfilatov2002: SergKis пишет: Предложение по ENUMERATOR для нумерации только видимых колонок. Принято, конечно.

SergKis: gfilatov2002 Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) [pre2] CLASS TSColumn DATA oCell // TSBcell object ... это только места обозначены CLASS TSBcell ... CLASS TSBrowse FROM TControl DATA lDrawLine AS LOGICAL INIT .T. // flag for cells row drawing ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... If ::bOnDrawLine != Nil Eval( ::bOnDrawLine, Self ) EndIf IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... IF ::lDrawLine oColumn:oCell := NIL TSDrawCell( hWnd, ; // 1 ... ELSE oColumn:oCell := TSBcell():New() ... ENDIF ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... nBegin := Min( iif( ::nColPos <= ::nFreeze, ( ::nColPos := ::nFreeze + 1, ::nColPos - ::nFreeze ), ; ::nColPos - ::nFreeze ), nLastCol ) IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... If lDrawCell .and. ::lDrawLine lDraw := TSDrawCell( hWnd, ; // 1 ... Else lDraw := .T. IF ! ::lDrawLine oColumn:oCell := TSBcell():New() ... ENDIF ... [/pre2] Суть изменений получить все данные, которые получаются в :DrawLine() и :DrawSelect() для передачи в ф-ю TSDrawCell(...) рисования строки. Не стал сокращать список параметров для класса TSBcell оставил все параметры. Применение (в примерах прилагаются, нажатие кнопки F8 формирует _MsgLog.txt) такое [pre2] STATIC FUNCTION my0( oBrw ) LOCAL nAt, nCol, oCol, oCel WITH OBJECT oBrw :GoTop() :DrawSelect() ? "-", :lDrawLine, :nRowPos, :aColumns[2]:oCell, :aDrawCols :lDrawLine := .F. :GoTop() :DrawSelect() ? "#", :lDrawLine, :nRowPos, :aColumns[2]:oCell, :aDrawCols :DrawLine() FOR nAt := 1 TO :nLen ? nAt, :aColumns[2]:oCell FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] oCel := oCol:oCell ? ".", oCol:lVisible, nCol, oCel:nStartCol, oCol:cName, oCel:nAlign, oCel:nClrFore, oCel:nClrBack, oCel:uData NEXT :GoDown() NEXT ? :lDrawLine := .T. :Reset() END WITH RETURN Nil Запуск demo5.exe // работа с массивом demo5.exe * // работа с emploee.dbf demo7.exe // работа с AbonItogo.dbf (файл и раскраска от Андрея) [/pre2] Должно облегчить работу с Excel, наверное PS В h_tbrowse.prg есть изменения связанные с отступами слева, справа, которые мы обсуждали с Игорем в теме "Курсы ЦБ на дату" это prg моей версии. В примере demo5 есть установка :nCellMarginLR := 1 Примеры и h_tbrowse.prg тут https://TransFiles.ru/eicsv

Haz: Эти изменения отключают или включают прорисовку?

SergKis: Отключают, т.е. при :lDrawLine == .F. нет вывода на экран

SergKis: PS :aDrawCols - это массив номеров колонок, которые на рисовались окне, формируется массив в :DrawLine()

SergKis: PSформируется массив в :DrawLine() Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()

Haz: Если практическое использование - пробежаться по бровсу не тратя время на экранный вывод, то в случае с dbf можно проще [pre2] nRec := (oBrw:cAlias)->(RecNo()) while !(oBrw:cAlias)->( Eof()) for n := 1 To Len( oBrw:aColumns ) Eval( oBrw:aColumns[n]:bData) end (oBrw:cAlias)->(dbSkip(1)) end (oBrw:cAlias)->(dbGoTo(nRec)) [/pre2] пробежимся по всем строкам и столбцам и прописовки не будет

SergKis: Haz пишет пробежимся по всем строкам и столбцам и прописовки не будет В таком варианте 1. Eval( oBrw:aColumns[n]:bData) не учитывает oBrw:aColumns[n]:bValue и особенно :bDecode, использую широко, т.е. надо Brw:GetValue( n ) или oBrw:bDataEval(oCol ,[xVal], nCol) 2. нет цветов фона и текста в такой реализации (получаются из блоков кода от значения данных в cell), для Excel это может быть важно 3. для массива и dbf надо писать разный код Можно, конечно писать, повторив часть кода из метода :DrawLine(), как сейчас и делали. В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше

Haz: SergKis пишет: В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше Сергей , да я не против твоей доработки. В простых задачах она пригодиться. Я же в проектах не смогу ее использовать по следующим причинам. 1. Редко когда использую простой бровс, как правило есть несколько подчиненных обновляемых по bChange (есть и bOnDraw ) и тупить прогон по бровсу будет не из-за прорисовки Можно отключать bChange при прогоне, а потом включать , но зачем ( см п 3 ) 2. Выгрузку в Excel через OLE не делаю совсем т.к. много отчетов объемных более 1000 строк и 50 и более колонок и через олю на отчеты тратится неприемлемое время Все отчеты только через XMLXLS . по скорости 20 минут это оля и 15 секунд xml Цвета и текст задаю заранее для xml 3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) . В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем

gfilatov2002: SergKis пишет: Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Обязательно проанализирую и включу эти изменения в новую сборку (с учетом Вашего мнения и мнения Игоря, как главных разработчиков дополнений к TSBrowse). Благодарю за Вашу помощь

SergKis: Haz пишет практически не знаю зачем Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно. А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности. С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится. Бровс умеет работать только с текущей записью , зачем мне тормозной перебор Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен

Haz: SergKis пишет: Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен Как дальнейшее развитие oCell имеет смысл



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