On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 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 возвращает, а то прога валится.

Спасибо: 0 
Профиль
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() } ) )


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




Пост N: 6645
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.05.20 15:13. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно так поправить i_ini.ch


Поправил, теперь ошибки нет и результата в _MsgLog.txt нет.
Будешь гадать почему нет
    ?v aHead


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




Пост N: 3161
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 15:34. Заголовок: Andrey пишет теперь ..


Andrey пишет
 цитата:
теперь ошибки нет и результата в _MsgLog.txt нет.


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

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




Пост N: 6646
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.05.20 16:13. Заголовок: SergKis пишет: Так ..


SergKis пишет:

 цитата:
Так применяй правильно


Понял !

Спасибо: 0 
Профиль
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 )
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1691
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.20 12:27. Заголовок: SergKis пишет: чуто..


SergKis пишет:

 цитата:
чуток подправим


Поправил, конечно.
Благодарю за помощь

Спасибо: 0 
Профиль
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 )
будет первоначальный алгоритм
При отработке ф-ии будет нумерация только видимых колонок
У Андрея есть пример, если что ...

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1692
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.20 21:30. Заголовок: SergKis пишет: Пред..


SergKis пишет:

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


Принято, конечно.

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




Пост N: 3168
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:35. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Скрытый текст

Суть изменений получить все данные, которые получаются в :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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1549
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.20 12:41. Заголовок: Эти изменения отключ..


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

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




Пост N: 3169
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:44. Заголовок: Отключают, т.е. при ..


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

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




Пост N: 3170
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:48. Заголовок: PS :aDrawCols - это ..


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

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




Пост N: 3171
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:50. Заголовок: PSформируется массив..


PS
 цитата:
формируется массив в :DrawLine()


Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()

Спасибо: 0 
Профиль
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))


пробежимся по всем строкам и столбцам и прописовки не будет

Спасибо: 0 
Профиль
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, т.е. надо используем, нет то как раньше

Спасибо: 0 
Профиль
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() и пр) .


В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1693
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.20 14:17. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg)


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

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




Пост N: 3173
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 14:19. Заголовок: Haz пишет практическ..


Haz пишет
 цитата:
практически не знаю зачем


Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно.
А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности.
С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится.

 цитата:
Бровс умеет работать только с текущей записью , зачем мне тормозной перебор


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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1552
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.20 14:32. Заголовок: SergKis пишет: Можн..


SergKis пишет:

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



Как дальнейшее развитие oCell имеет смысл

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