Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
|
| постоянный участник
|
Пост N: 6644
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 14:43. Заголовок: И вот эту ошибку тож..
И вот эту ошибку тоже бы убрать: 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 Делаю так: aHead := NIL ?v aHead Пускай NIL возвращает, а то прога валится.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3160
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 14:57. Заголовок: Можно так поправить ..
Можно так поправить i_ini.ch #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() } ) )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6645
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 15:13. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно так поправить i_ini.ch |
| Поправил, теперь ошибки нет и результата в _MsgLog.txt нет. Будешь гадать почему нет ?v aHead
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3161
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 15:34. Заголовок: Andrey пишет теперь ..
Andrey пишет цитата: | теперь ошибки нет и результата в _MsgLog.txt нет. |
| Так применяй правильно ? "aSize =", aSize ?v aSize Ошибки нет и занятого места тоже в лог файле aSize = NIL
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6646
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 16:13. Заголовок: SergKis пишет: Так ..
SergKis пишет: Понял !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3164
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.05.20 11:08. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может чуток подправим ? 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 ) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1691
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.05.20 12:27. Заголовок: SergKis пишет: чуто..
SergKis пишет: Поправил, конечно. Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3167
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.05.20 21:09. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение по ENUMERATOR для нумерации только видимых колонок. :lEnum := .F. меняет цвет, align. Словом не подошел. Простое решение при :lEnum := .T. 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 ... Т.е. если убрать myDbfDelColTsb( oBrw ) // myEnumTsb( oBrw ) mySet2Tsb( oBrw ) будет первоначальный алгоритм При отработке ф-ии будет нумерация только видимых колонок У Андрея есть пример, если что ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1692
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.05.20 21:30. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предложение по ENUMERATOR для нумерации только видимых колонок. |
| Принято, конечно.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3168
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:35. Заголовок: gfilatov2002 Сделал..
gfilatov2002 Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Скрытый текст
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 ...
| Суть изменений получить все данные, которые получаются в :DrawLine() и :DrawSelect() для передачи в ф-ю TSDrawCell(...) рисования строки. Не стал сокращать список параметров для класса TSBcell оставил все параметры. Применение (в примерах прилагаются, нажатие кнопки F8 формирует _MsgLog.txt) такое 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 (файл и раскраска от Андрея) Должно облегчить работу с Excel, наверное PS В h_tbrowse.prg есть изменения связанные с отступами слева, справа, которые мы обсуждали с Игорем в теме "Курсы ЦБ на дату" это prg моей версии. В примере demo5 есть установка :nCellMarginLR := 1 Примеры и h_tbrowse.prg тут https://TransFiles.ru/eicsv
|
|
|
Haz
|
| |
Пост N: 1549
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 12:41. Заголовок: Эти изменения отключ..
Эти изменения отключают или включают прорисовку?
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3169
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:44. Заголовок: Отключают, т.е. при ..
Отключают, т.е. при :lDrawLine == .F. нет вывода на экран
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3170
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:48. Заголовок: PS :aDrawCols - это ..
PS :aDrawCols - это массив номеров колонок, которые на рисовались окне, формируется массив в :DrawLine()
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3171
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:50. Заголовок: PSформируется массив..
PS цитата: | формируется массив в :DrawLine() |
| Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()
|
|
|
Haz
|
| |
Пост N: 1550
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 12:56. Заголовок: Если практическое ис..
Если практическое использование - пробежаться по бровсу не тратя время на экранный вывод, то в случае с dbf можно проще 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)) пробежимся по всем строкам и столбцам и прописовки не будет
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3172
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 13:13. Заголовок: Haz пишет пробежимся..
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
|
| |
Пост N: 1551
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 13:51. Заголовок: SergKis пишет: В мо..
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
|
| moderator
|
Пост N: 1693
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.05.20 14:17. Заголовок: SergKis пишет: Сдел..
SergKis пишет: цитата: | Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) |
| Обязательно проанализирую и включу эти изменения в новую сборку (с учетом Вашего мнения и мнения Игоря, как главных разработчиков дополнений к TSBrowse). Благодарю за Вашу помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3173
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 14:19. Заголовок: Haz пишет практическ..
Haz пишет цитата: | практически не знаю зачем |
| Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно. А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности. С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится. цитата: | Бровс умеет работать только с текущей записью , зачем мне тормозной перебор |
| Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен
|
|
|
Haz
|
| |
Пост N: 1552
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 14:32. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен |
| Как дальнейшее развитие oCell имеет смысл
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|