On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
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 [только новые]


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




Пост N: 3455
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 05:23. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал правки
 
CLASS TSBrowse FROM TControl

...
ACCESS Tsb INLINE ::oWnd
ACCESS nAtPos INLINE iif( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt )

...
METHOD FastDrawClear( cCell ) CLASS TSBrowse

LOCAL oCell, oCol

Default cCell := ::nAtPos

IF ISNUMERIC( cCell ) ; cCell := hb_ntos( cCell )
ENDIF

IF ISLOGICAL( cCell ) .and. cCell
::aFastDrawCell := hb_Hash()

ELSEIF ISCHAR( cCell )
IF "." $ cCell
oCell := hb_HGetDef( ::aFastDrawCell, cCell, NIL )
IF oCell != Nil
hb_HDel( ::aFastDrawCell, cCell )
ENDIF
ELSE
FOR EACH oCol IN ::aColumns
oCell := hb_HGetDef( ::aFastDrawCell, cCell+"."+hb_ntos( oCol:nId ), NIL )
IF oCell != Nil
hb_HDel( ::aFastDrawCell, cCell+"."+hb_ntos( oCol:nId ) )
ENDIF
NEXT
ENDIF

ENDIF

Return Self

...
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse

...
If oCol:bPrevEdit != Nil
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays
ElseIf nKey != VK_RETURN // GF 15-10-2015
uVar := Eval( oCol:bPrevEdit, uValue, Self, nCell, oCol )
If ValType( uVar ) == "L" .and. ! uVar
nKey := VK_RETURN
EndIf
EndIf
EndIf

::FastDrawClear( hb_ntos( ::nAtPos )+"."+hb_ntos( oCol:nId ) )

cMsg := iif( ValType( cMsg ) == "B", Eval( cMsg, Self, nCell ), cMsg )
...
METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse

...
IF ::lRowPosAtRec
IF Empty( ::aRowPosAtRec ) .or. Len( ::aRowPosAtRec ) != ::nRowCount()
::aRowPosAtRec := Array( ::nRowCount() )
AFill( ::aRowPosAtRec, 0 )
ENDIF
IF ::nLen == 0 .or. xRow == 0 .or. xRow > Len( ::aRowPosAtRec )
ELSE
::aRowPosAtRec[ xRow ] := ::nAtPos

//ELSEIF ::lIsDbf
// ::aRowPosAtRec[ xRow ] := ( nAt := ( ::cAlias )->( RecNo() ) )
//ELSEIF ::lIsArr
// ::aRowPosAtRec[ xRow ] := ( nAt := ::nAt )
ENDIF
ENDIF

If ::nLen > 0

IF nAt == Nil ; nAt := ::nAtPos // iif( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt )
ENDIF

...
METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse

...
IF ::lRowPosAtRec
IF Empty( ::aRowPosAtRec ) .or. Len( ::aRowPosAtRec ) != ::nRowCount()
::aRowPosAtRec := Array( ::nRowCount() )
AFill( ::aRowPosAtRec, 0 )
ENDIF
IF xRow == 0 .or. xRow > Len( ::aRowPosAtRec )
ELSE
::aRowPosAtRec[ xRow ] := ::nAtPos

//ELSEIF ::lIsDbf
// ::aRowPosAtRec[ xRow ] := ( nAt := ( ::cAlias )->( RecNo() ) )
//ELSEIF ::lIsArr
// ::aRowPosAtRec[ xRow ] := ( nAt := ::nAt )
ENDIF
ENDIF
...
IF nAt == Nil ; nAt := ::nAtPos // iif( ::lIsDbf, ( ::cAlias )->( RecNo() ), ::nAt )
ENDIF

...
If lDrawCell .and. ::lDrawLine
lDraw := ::TSDrawCell( oColumn:oCell, oColumn )
Else
lDraw := .T.
EndIf
IF ::lFastDrawCell .and. ! lCell
hb_HSet( ::aFastDrawCell, cCell, __objClone( oColumn:oCell ) )
ENDIF

nStartCol += aColSizes[ nJ ] + nDeltaLen
...


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




Пост N: 3456
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 05:30. Заголовок: Haz пишет Думаю нужн..


Haz пишет
 цитата:
Думаю нужны три метода для этого хеша. Это check, refresh и clear


Не очень понятны по смыслу check, refresh. Для одной колонки и даже для всей строки - проще удалить чем выяснять или я не учитываю что то.

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




Пост N: 3457
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 05:48. Заголовок: gfilatov2002 Чуток ..


gfilatov2002
Чуток поправить
 
METHOD FastDrawClear( cCell ) CLASS TSBrowse

LOCAL oCell, oCol

Default cCell := ::nAtPos

IF ISNUMERIC( cCell ) ; cCell := hb_ntos( cCell )
ENDIF

IF ! ::lFastDrawCell

ELSEIF ISLOGICAL( cCell ) .and. cCell

::aFastDrawCell := hb_Hash()
...


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



Пост N: 31
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 09.10.20 09:13. Заголовок: SergKis END..


SergKis

 цитата:
 
ENDIF
...
METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse
...
IF ::lRowPosAtRec .and. ::nRowCount() > 0
IF Empty( ::aRowPosAtRec ) .or. Len( ::aRowPosAtRec ) != ::nRowCount()
::aRowPosAtRec := Array( ::nRowCount() )
AFill( ::aRowPosAtRec, 0 )
ENDIF
IF xRow == 0 .or. xRow > Len( ::aRowPosAtRec )
ELSE
::aRowPosAtRec[ xRow ] := ::nAtPos
//ELSEIF ::lIsDbf
// ::aRowPosAtRec[ xRow ] := ( nAt := ( ::cAlias )->( RecNo() ) )
//ELSEIF ::lIsArr
// ::aRowPosAtRec[ xRow ] := ( nAt := ::nAt )
ENDIF
ENDIF
...



Серж, я ещё такую правку делаю, иначе на пустых выборках слетает

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




Пост N: 1803
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.20 09:42. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал правки


OK, принято

SergKis пишет:

 цитата:
Чуток поправить


Благодарю за помощь

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




Пост N: 1655
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.10.20 10:55. Заголовок: SergKis пишет: Не о..


SergKis пишет:

 цитата:
Не очень понятны по смыслу check, refresh. Для одной колонки и даже для всей строки - проще удалить чем выяснять или я не учитываю что то.


Tsbrowse статичен , то есть это просто отрисованная картинка, а хеш содержит все нобходимые данные для проверки какие ячейки изменились.
С появлением хеша появилась возможность в realtime показывать изменения ячеек другими пользователями по сети без перерисовки всего бровса. Смысл не только в визуальном вау ээфекте, очень часто возникает диалог
- Поменяй !!!
- поменял
- не вижу
- обнови
- как ?
итд


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




Пост N: 3458
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 10:58. Заголовок: kkg пишет такую прав..


kkg пишет
 цитата:
такую правку делаю, иначе на пустых выборках слетает


Надо как в :DrawLine()
 
METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse
...
IF ::lRowPosAtRec
IF Empty( ::aRowPosAtRec ) .or. Len( ::aRowPosAtRec ) != ::nRowCount()
::aRowPosAtRec := Array( ::nRowCount() )
AFill( ::aRowPosAtRec, 0 )
ENDIF
IF ::nLen == 0 .or. xRow == 0 .or. xRow > Len( ::aRowPosAtRec )
ELSE
::aRowPosAtRec[ xRow ] := ::nAtPos
ENDIF
ENDIF
...


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




Пост N: 1656
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.10.20 11:10. Заголовок: Тут добавил третий п..


Тут добавил третий параметр в ::Refresh()
 

METHOD ChangeFont( hFont, nColumn, nLevel ) CLASS TSBrowse
...
If ::lPainted
SetHeights( Self )
::Refresh( .F.,,.F. )
EndIf

METHOD DelColumn( nPos ) CLASS TSBrowse
...
::SetFocus()
::Refresh( .F.,,.F. )


METHOD PageDown( nLines ) CLASS TSBrowse
...
If nKeyPressed == Nil

::Refresh( ::nLen < nTotLines,, .F. )

METHOD PageUp( nLines ) CLASS TSBrowse
...
If ::lPageMode .and. ::nRowPos > 1

::DrawLine()
// nSkipped := ::Skip( -( ::nRowPos - 1 ) ) //V90 active
::nRowPos := 1
::Refresh( .F.,,.F. )

METHOD PanEnd() CLASS TSBrowse
...
::Refresh( .F. ,, .F.)

If ! ::lNoHScroll .and. ::oHScroll != Nil

METHOD PanLeft() CLASS TSBrowse
...
If ::nCell != ::nOldCell
::Refresh( .F. ,, .F.)
EndIf

METHOD PanRight() CLASS TSBrowse
...
If ::nCell != ::nOldCell
::Refresh( .F.,, .F. )
EndIf

METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse
...
If lAppend .and. ::nLen <= ::nRowCount()
::Refresh( .T. ,, .F.)
::nRowPos := Min( ::nRowCount(), ::nLen )
EndIf

METHOD SetNoHoles( nDelta, lSet ) CLASS TSBrowse
...
::Paint()
::lEnabled := .T.

::Refresh( .F.,,.F. )





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




Пост N: 3459
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 11:16. Заголовок: Haz пишет Tsbrowse с..


Haz пишет
 цитата:
Tsbrowse статичен , то есть это просто отрисованная картинка, а хеш содержит все нобходимые данные для проверки какие ячейки изменились.


Т.е. пляшем от hash, а не колонок, что то типа такого
 
Local oCols := oKeyData():aKey := oBrw:aFastDrawCell
Local aCols := oCols:GetAll(.F.), aCol, nCol, oCol, cCell
Local xData, uData
FOR EACH aCol IN aCols
cCell := aCol[1]
oCol := aCol[2]
xData := oCol:oCell:uValue
uData := oBrw:GetValue(oCol:cName)
IF xData != uData
....
ENDIF
NEXT


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




Пост N: 3460
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 11:21. Заголовок: PS Пропустил переход..


PS
Пропустил переход по записям
 
nRec := val(left(cCell, At(".", cCell)-1))
(oBrw:cAlias)->( dbGoto(nRec) )
// тут xData, uData


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




Пост N: 1657
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.10.20 11:55. Заголовок: SergKis пишет: Т.е...


SergKis пишет:

 цитата:
Т.е. пляшем от hash, а не колонок, что то типа такого


да , примерно так
пока не сложилось как понять что oCell принадлежит видимой части ( окну ) бровса

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




Пост N: 1804
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.20 11:55. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
OK, принято


Заметил некорректную работу при активном индексе в базе (зависает при сортировке - двойной клик по заголовку колонки).

Пример для проверки - в папке \SAMPLES\Advanced\Tsb_SpecHeader

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




Пост N: 1658
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.10.20 12:51. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Заметил некорректную работу при активном индексе в базе (зависает при сортировке - двойной клик по заголовку колонки).


у меня отработало нормально. Может какие правки из последних не учел. Есть где взять со всеми последними изменениями ?
На рабочем проекте тоже переключает индексы нормально

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




Пост N: 1805
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.20 13:21. Заголовок: Haz пишет: На рабоч..


Haz пишет:

 цитата:
На рабочем проекте тоже переключает индексы нормально


Отлично, значит, мне показалось

Haz пишет:

 цитата:
где взять со всеми последними изменениями ?


Выложил здесь
click here


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




Пост N: 3461
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 13:48. Заголовок: Haz пишет На рабочем..


Haz пишет
 цитата:
На рабочем проекте тоже переключает индексы нормально


Соглашусь с Григорием
 цитата:
Заметил некорректную работу при активном индексе в базе (зависает при сортировке - двойной клик по заголовку колонки).


Установил последнюю версию в раб. каталоге (без последних изменений с FastDraw), пример \SAMPLES\Advanced\Tsb_SpecHeader работает странно (меню первое пункт SPECHEADER) не виснет, но сортировка туду-сюда нормально не работает.
В тексте есть
 
Brw_1:aColumns[ 1 ]:cOrder := "FIRST"
Brw_1:aColumns[ 4 ]:cOrder := "CITY"
Brw_1:SetAppendMode( .T. )
//Brw_1:SetIndexCols( 1, 2 )


Brw_1:SetIndexCols( 1, 4 ) // поправил на 4-ю колонку индекс
//Brw_1:SetOrder( 1 )
[pre2]
работает при 2 клике по колонкам, но странно.
Пример Tsb_addrecord_2 с такими же возможностями 2 клика -> сортировка работает нормально и в версии с FastDraw
Правка текста в нем для сортировки туда-обратно, так же работает OK, т.е.[pre2]
...
oCol := oBrw:GetColumn("ID")
oCol:cOrder := "KOD"
//oCol:lNoDescend := .T.


oCol := oBrw:GetColumn("INFO")
oCol:cOrder := "NAM"
//oCol:lNoDescend := .T.

...
oBrw:SetIndexCols( oBrw:nColumn("ID"), ;
oBrw:nColumn("INFO") )
oBrw:SetOrder( oBrw:nColumn("ID") )
...


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




Пост N: 3462
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 13:48. Заголовок: Haz пишет На рабочем..


Haz пишет
 цитата:
На рабочем проекте тоже переключает индексы нормально


Соглашусь с Григорием
 цитата:
Заметил некорректную работу при активном индексе в базе (зависает при сортировке - двойной клик по заголовку колонки).


Установил последнюю версию в раб. каталоге (без последних изменений с FastDraw), пример \SAMPLES\Advanced\Tsb_SpecHeader работает странно (меню первое пункт SPECHEADER) не виснет, но сортировка туду-сюда нормально не работает.
В тексте есть
 
Brw_1:aColumns[ 1 ]:cOrder := "FIRST"
Brw_1:aColumns[ 4 ]:cOrder := "CITY"
Brw_1:SetAppendMode( .T. )
//Brw_1:SetIndexCols( 1, 2 )


Brw_1:SetIndexCols( 1, 4 ) // поправил на 4-ю колонку индекс
//Brw_1:SetOrder( 1 )
[pre2]
работает при 2 клике по колонкам, но странно.
Пример Tsb_addrecord_2 с такими же возможностями 2 клика -> сортировка работает нормально и в версии с FastDraw
Правка текста в нем для сортировки туда-обратно, так же работает OK, т.е.[pre2]
...
oCol := oBrw:GetColumn("ID")
oCol:cOrder := "KOD"
//oCol:lNoDescend := .T.


oCol := oBrw:GetColumn("INFO")
oCol:cOrder := "NAM"
//oCol:lNoDescend := .T.

...
oBrw:SetIndexCols( oBrw:nColumn("ID"), ;
oBrw:nColumn("INFO") )
oBrw:SetOrder( oBrw:nColumn("ID") )
...


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




Пост N: 3463
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 13:52. Заголовок: PS :lFastDrawCell не..


PS
:lFastDrawCell не ставил в .T., т.е. отключена была для тестирования этих примеров

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




Пост N: 3464
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 14:04. Заголовок: PS2 проверил с :lFas..


PS2
проверил с :lFastDrawCell := .T.
туда-сюда сортировка на колонках работает нормально, версия с изменениями FastDraw

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




Пост N: 3465
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.10.20 14:05. Заголовок: это про пример Tsb_a..


это про пример Tsb_addrecord_2, не туда ткнул

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




Пост N: 1806
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.20 14:43. Заголовок: SergKis пишет: прим..


SergKis пишет:

 цитата:
пример \SAMPLES\Advanced\Tsb_SpecHeader работает странно


Разобрался и поправил этот пример для правильной работы с индексом NTX.

1) создание индексов д.б.

 цитата:
USE Employee SHARED NEW
Index On Employee->First+Employee->Last To Name // NTX
Index On Employee->City To City // NTX
Set Index To Name, City // NTX



2) подключение индексов в зависимости от типа источника данных д.б.

      IF met > 1 
Brw_1:aColumns[ 1 ]:cOrder := "FIRST"
Brw_1:aColumns[ 4 ]:cOrder := "CITY"
ELSE
Brw_1:aColumns[ 1 ]:cOrder := "Name"
Brw_1:aColumns[ 4 ]:cOrder := "City"
ENDIF

Теперь пример работает нормально

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