On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
Vlad04
постоянный участник


Пост N: 420
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)


TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений
К примеру

 цитата:

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


Здесь я собрал параметры из разных tBrows
Можно или нет и какие парметры заменить
выражением ( и каким) ?
oBrw2:....
oBrw2:....



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Haz
администратор




Пост N: 1768
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.21 12:22. Заголовок: SergKis пишет: Смущ..


SergKis пишет:

 цитата:
Смущает только default lEditMode := .F.


можно оставить по дефолту .T.
пример отлично работает

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




Пост N: 3870
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.21 12:58. Заголовок: Haz пишет можно оста..


Haz пишет
 цитата:
можно оставить по дефолту .T.


Так и сделал. Для примера ничего не изменилось в работе, но править в старом коде придется по любому
 
FUNCTION PrevEdit(xVal, oBrw)
LOCAL oCell := oBrw:GetCellInfo(oBrw:nRowPos)
LOCAL nY := oCell:nRow //+ oBrw:nHeightHead + 4


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




Пост N: 1925
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.09.21 13:06. Заголовок: SergKis пишет: прав..


SergKis пишет:

 цитата:
править в старом коде придется по любому


Да.
Например, сломался режим добавления по клавише F2 в примере из папки
\SAMPLES\Advanced\Tsb_addrecord_3

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




Пост N: 3871
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.21 13:24. Заголовок: gfilatov2002 пишет ..


gfilatov2002 пишет
 цитата:
сломался режим добавления по клавише F2 в примере из папки


Правится легко, но геморой остается в др. текстах
 
STATIC FUNCTION Add_Rec( oBrw )
...
nRow := 0 //:nTop + GetWindowRow( hWnd ) - GetBorderHeight()
nCol := 0 //:nLeft + GetWindowCol( hWnd ) - GetBorderWidth () + 1

Может метод другой сделать GetCellRect, как Игорь ф-ю называл или GetCellSize

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




Пост N: 1769
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.21 13:36. Заголовок: SergKis пишет: но ..


SergKis пишет:

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


может еще один параметр ввести в GetCellInfo(....lParentPos )
hb_default( @lParentPos, .f.)
определяет учитывать ли координаты парент окна

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




Пост N: 1770
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.21 13:37. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может метод другой сделать GetCellRect, как Игорь ф-ю называл или GetCellSize


возможно это выход

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




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


SergKis пишет:

 цитата:
метод другой сделать GetCellSize


Пошел по этому пути.
Теперь пример работает нормально

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




Пост N: 3872
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.21 14:19. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Пошел по этому пути.


Тогда есть смысл убрать lEditMode и строки с использованием ::aEditCellAdjust из метода

Добавил метод GetCellSize, убрал lEditMode и строки с использованием ::aEditCellAdjust из него
Пример Tsb_addrecord_3 нормально
В своем примере (выше) использовал новый метод, вместо GetCellInfo, все работает OK!

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




Пост N: 1927
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.09.21 14:25. Заголовок: SergKis пишет: убра..


SergKis пишет:

 цитата:
убрать lEditMode и строки с использованием ::aEditCellAdjust из метода


Ok.
Также изменил описание:

 цитата:
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- added the new useful method GetCellSize().
Suggested and contributed by Sergej Kiselev and Igor Nazarov
(see demo in folder \samples\Advanced\Tsb_addrecord_3)



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




Пост N: 7104
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.21 09:10. Заголовок: Всем привет ! А можн..


Всем привет !
А можно в ENUMERATOR (это где номера колонок стоят) поставить иконку/картинку слева ?
И возможно ли отслеживать нажатие мышкой на нём ?
Хотелось бы сделать фильтрацию как в Экселе, там есть красивое решение.

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




Пост N: 3928
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.11.21 13:43. Заголовок: Andrey TSCOLUMN.PRG..


Andrey
TSCOLUMN.PRG
 
// Click Event
DATA bFLClicked // Block to be evaluated on footer left clicked
DATA bFRClicked // Block to be evaluated on footer right clicked
DATA bHLClicked // Block to be evaluated on header left clicked
DATA bHRClicked // Block to be evaluated on header right clicked
DATA bSLClicked // Block to be evaluated on Special header left clicked
DATA bSRClicked // Block to be evaluated on Special header right clicked
DATA bLClicked // Block to be evaluated on cell left clicked
...
DATA uBmpCell // bitmap in cell (oBmp, hBmp or bBlock)
DATA uBmpFoot // bitmap in footer (oBmp, hBmp or bBlock)
DATA uBmpHead // bitmap in header (oBmp, hBmp or bBlock)
DATA uBmpSpcHd // bitmap in special header (oBmp, hBmp or bBlock)
...
H_TSBROWSE.PRG
METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
uPar1 := nRowPix, ;
uPar2 := nColPix, ;
...
nClickRow := ::GetTxtRow( nRowPix )
nAtCol := Max( ::nAtColActual( nColPix ), 1 ) // JP 1.31
lHeader := nClickRow == 0 .AND. ::lDrawHeaders
lFooter := nClickRow == -1 .AND. iif( ::lDrawFooters != NIL, ::lDrawFooters, .F. )
lSpecHd := nClickRow == -2 .AND. iif( ::lDrawSpecHd != NIL, ::lDrawSpecHd, .F. )
...
ELSEIF lSpecHd .AND. ::lEditableHd

lMChange := ::lMChange
::lMChange := .F.
IF ::aColumns[ nAtCol ]:bSLClicked != NIL

Eval( ::aColumns[ nAtCol ]:bSLClicked, uPar1, uPar2, ::nAt, Self )
...

PS
Возможно, надо сделать правку
 
METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse

LOCAL nClickRow := ::GetTxtRow( nRowPix ), ;
nCol := ::nAtColActual( nColPix ), ;
uPar1 := nRowPix, ;
uPar2 := nColPix
...
ELSEIF nClickRow == -2 .AND. ::lDrawSpecHd // .AND. ::aColumns[ nCol ]:lEditSpec

IF ::aColumns[ nCol ]:lEditSpec
IF ::lAutoSearch .OR. ::lAutoFilter
::nColSpecHd := Min( iif( nCol <= ::nFreeze, ::nFreeze + 1, ::nAtCol( nColPix ) ), Len( ::aColumns ) )
::PostMsg( WM_KEYDOWN, VK_RETURN, 0 )
RETURN 0
ENDIF
ELSEIF ::bLDblClick != NIL
Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self )
ENDIF

...

НО это проверять надо, сделай у себя для пробы

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




Пост N: 7105
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.21 15:23. Заголовок: Спасибо ! :sm36: ..


Спасибо ! Попробую !
Как бороться с утечкой памяти при использовании картинок ?
Если я сделаю так:
   oBrw:Cargo := oHmgData() 
oBrw:Cargo:hArrDown := LoadImage("Arrow_down")
oBrw:Cargo:hArrUp := LoadImage("Arrow_up")

Нужно ли потом удалять эти объекты ?
Или при закрытии окна все картинки с объекта oBrw - "убьются" сами ?

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




Пост N: 3929
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.11.21 15:32. Заголовок: Andrey пишет Нужно л..


Andrey пишет
 цитата:
Нужно ли потом удалять эти объекты ?


Обязательно надо удалять из своих хранилищ
Для тсб переменных хранения handle картинок удаление автоматом при разрушении объекта, см. метод
METHOD Destroy() CLASS TSBrowse

 цитата:
oBrw:Cargo := oHmgData()
oBrw:Cargo:hArrDown := LoadImage("Arrow_down")
oBrw:Cargo:hArrUp := LoadImage("Arrow_up")


В тсб есть свое хранилище (само освобождается) oBrw:aBitMaps и в колонке тоже
(см. пример Tsb_BitMaps)
 
oBrw:GetColumn( "FLD6" ):lBitMap := .T.
oBrw:GetColumn( "FLD6" ):aBitMaps := { LoadImage( ".\RES\edit_delete.bmp" ), ;
LoadImage( ".\RES\edit_cancel.bmp" ) }

oBrw:GetColumn( "FLD7" ):lBitMap := .T.
oBrw:aBitMaps := { LoadImage( ".\RES\flag_bel.bmp" ), ;
LoadImage( ".\RES\flag_en.bmp" ), ;
LoadImage( ".\RES\flag_kaz.bmp" ), ;
LoadImage( ".\RES\flag_ru.bmp" ), ;
LoadImage( ".\RES\flag_ua.bmp" ), ;
StockBmp( 7 ), ;
StockBmp( 6 ) ;
}


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




Пост N: 7106
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.21 16:49. Заголовок: SergKis пишет: ..


SergKis пишет:

 цитата:
oBrw:aBitMaps := { LoadImage( ".\RES\flag_bel.bmp" ), ;
LoadImage( ".\RES\flag_en.bmp" ), ;
LoadImage( ".\RES\flag_kaz.bmp" ), ;
LoadImage( ".\RES\flag_ru.bmp" ), ;
LoadImage( ".\RES\flag_ua.bmp" ), ;
StockBmp( 7 ), ;
StockBmp( 6 ) ;
}


Не совсем удобно помнить картинки по номерам. Так можно делать ?
 oBrw:Cargo:hFlagEn :=  oBrw:aBitMaps[2]  
oBrw:Cargo:hFlagKa := oBrw:aBitMaps[3]
oBrw:Cargo:hFlagRu := oBrw:aBitMaps[4]


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




Пост N: 3930
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.11.21 17:43. Заголовок: Andrey пишет Не совс..


Andrey пишет
 цитата:
Не совсем удобно помнить картинки по номерам. Так можно делать ?


Конечно можно, с мнемоникой удобнее и безопаснее работать, чем с номером элемента.

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




Пост N: 1795
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.11.21 11:54. Заголовок: Andrey пишет: Как б..


Andrey пишет:

 цитата:
Как бороться с утечкой памяти


Стандартно , когда hBitmap уже не нужен делаем DeleteObiect hBitmap ).
В большинстве случаев при закрытии бровса объекты удаляются автоматически, гораздо хуже ситуация когда hBitmap это результат выполнения блока hBitmap := { || LoadImage( ) } и грузит картинку с диска. Столкнулся с этой ситуацией сделав браузер предпросмотра картинок на основе tsb по массиву. При долгом скроле и больших размерах превью в ячейке бровса память просто горит. Приходится отслеживать видимый диапазон бровса и убивать все hBitmap вне этого диапазона. Сам tsb это не умеет.

:uBmpCell := {|| ... LoadImage() ...} это пожалуй самый проблемный способ с точки зрения жора памяти. Тк при прорисовке ячейки всегда создается новый объект , не освобождая предыдущий созданный. И этот объект живет во время жизни бровса. Пролистал 10 000 строк и получил в памяти 10 000 хендлов, пролистал обратно и их уже 20 000. Все решается просто, но нужно не забывать об этом.

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




Пост N: 7467
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.11.21 14:25. Заголовок: Haz пишет: :uBmpCel..


Haz пишет:

 цитата:
:uBmpCell := {|| ... LoadImage() ...} это пожалуй самый проблемный способ с точки зрения жора памяти


Игорь так мы это уже проходили несколько лет назад , когда в моей проге были вот такие же утечки
памяти. Поэтому в этом массивчике я храню хендлы а не LoadImage()

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




Пост N: 7109
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.11.21 15:23. Заголовок: Картинка в ENUMERATO..


Картинка в ENUMERATOR поставилась.
Клик мышки правый/левый в ENUMERATOR отрабатывается.
Спасибо БОЛЬШОЕ Сергей !
Надо бы Григорию код добавить в h_tbrowse.prg
METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse 
...
ELSEIF lSpecHd .AND. ::lEditableHd
...
::lMChange := lMChange
::DrawHeaders()

ELSEIF lSpecHd .AND. ::aColumns[ nAtCol ]:bSLClicked != NIL //!!!
Eval( ::aColumns[ nAtCol ]:bSLClicked, uPar1, uPar2, ::nAt, Self )

ENDIF

METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
....
#endif
ELSEIF nClickRow == -2 .AND. ::lDrawSpecHd //!!! .AND. ::aColumns[ nCol ]:lEditSpec

IF ::aColumns[ nCol ]:lEditSpec .and. ( ::lAutoSearch .OR. ::lAutoFilter )

::nColSpecHd := Min( iif( nCol <= ::nFreeze, ::nFreeze + 1, ::nAtCol( nColPix ) ), Len( ::aColumns ) )
::PostMsg( WM_KEYDOWN, VK_RETURN, 0 )
RETURN 0
ENDIF

IF ::bLDblClick != NIL
Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self )
ENDIF


ENDIF


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




Пост N: 1796
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.11.21 21:28. Заголовок: Dima пишет: Игорь т..


Dima пишет:

 цитата:
Игорь так мы это уже проходили несколько лет назад , когда в моей проге были вот такие же утечки


Дим, помню. Я про случай когда хендлов очень много , а за хендлами реальный объем сжираемой памяти . Один из последних тестировал 10 000 хендлов и 1 гиг в памяти.

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




Пост N: 7112
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.21 00:43. Заголовок: В ТСБ есть методы: ..


В ТСБ есть методы:
   METHOD DrawFooters()  
METHOD DrawSuper()
METHOD DrawHeaders()

А как перерисовать новую картинку для ENUMERATOR ?
Есть такой метод ?

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