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


gfilatov2002
moderator




Пост N: 920
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.04.16 17:17. Заголовок: Haz пишет: без этой..


Haz пишет:

 цитата:
без этой проверки , если lCheckBox истина и колонка скрыта, в соседнюю выдает мусор от битмапа


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

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




Пост N: 876
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 11:57. Заголовок: Григорий еще поправочка


Григорий
Пропущено указание алиаса и метод работает только если oBrw:cAlias является текущей
METHOD LoadFields()
...
nE := If( aNames == Nil, n, ( ::cAlias )->(FieldPos( aNames[ n ] )) )

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




Пост N: 921
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 14:20. Заголовок: Haz пишет: Пропущен..


Haz пишет:

 цитата:
Пропущено указание алиаса


Снова благодарю за исправление
Кстати, эта опечатка есть и у автора библиотеки...

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




Пост N: 877
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:03. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Кстати, эта опечатка есть и у автора


не важно у кого есть , важно что исправлено
я минут 15 тупил почему то работает то нет, пока не полез в сырцы

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




Пост N: 922
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 15:12. Заголовок: Haz пишет: пока не ..


Haz пишет:

 цитата:
пока не полез в сырцы


Сейчас обнаружил, что не могу прикрутить подсказки к датам в Вашем календаре, т.к. при динамическом определении данных в массиве
у блока кода cTooltip параметр номер колонки nCol всегда равен номеру последнего столбца.
При обычном присвоении массива типа oBrw3:SetArray( aItems ), все работает нормально.
Может гляните, что нужно поправить, у меня НЕ выходит...

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




Пост N: 878
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:19. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
параметр номер колонки nCol всегда равен номеру последнего столбца.


я это через макроподстановку делаю
 
oBrw:aColumns[ i ]:bData := &( "{|| GetDate( " + NTOC( i ) + ")}")

Выложите сюда кусок кода , может что придумаем вместе

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




Пост N: 923
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 15:26. Заголовок: Haz пишет: Выложите..


Haz пишет:

 цитата:
Выложите сюда кусок кода


Да весь код - это одна строка

 цитата:

oBrw:cToolTip := {|oBr,nCol,nRow| if( nRow > 0, "Col ="+str(nCol,3)+" Row ="+str(nRow,3), ) }


который выдает для любой колонки Col = 7, а ряд показывает правильно...


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




Пост N: 879
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:28. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Да весь код - это одна строка


ок, сейчас что нибудь сделаю

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




Пост N: 880
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:00. Заголовок: Все из-за замороженн..


Все из-за замороженных колонок
В примере они заморожены все 7 , ::nFreeze := 7 но lLockFreeze := FALSE
Это чтоб бровс не панарамировался при перемещении к последней колонке
При показе cToolTip используется вычисление колонки исходя из позиции мыши, при этом автоматом прибавляется замороженный кусок
это метод ::nAtCol() . Либо менять его , либо тут
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse

Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ;
cMsg := ::cMsg, ;
nColPixPos := 0, ;
lFrozen := .F., ;
nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ), ;







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




Пост N: 881
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:04. Заголовок: Haz пишет: nColumn..


Haz пишет:

 цитата:
nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ), ;



Но это тоже не правильно
нужно переделывать ::nAtCol() , это он дурит при наличии заморозки.
Пока не готов сказать как, думаю ...

Посмотрел внимательнее - беда всеже в методе MouseMove , там нужно именно nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ),
тогда номер видимой колонки определяется правильно ( именно видимой на экране а не порядковый в бровсе )
Дальше нужно менять логику получения номера колонки бровса из видимого на экране с учетом фриз и скрола и скрытых
Опять есть над чем думать ...

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




Пост N: 936
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 16:27. Заголовок: Haz переделывать nA..


Haz
переделывать nAtCol не надо, надо сделать так:
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
nRowLine := ::GetTxtRow( nRowPix ), ctooltip, nCol
...
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nColumn ]:cToolTip
If Valtype( ctooltip ) == "B"
nCol := ::nAtCol(nColPix, .T.)
ctooltip := Eval( ctooltip, Self, nCol, nRowLine )
EndIf
...
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype( ctooltip ) == "B"
nCol := ::nAtCol(nColPix, .T.)
ctooltip := Eval( ctooltip, Self, nCol, nRowLine )
EndIf

этого достаточно


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




Пост N: 937
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 16:30. Заголовок: PS через ncol := Max..


PS
через ncol := Max(1, ::nAtCol(...)) может лучше

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




Пост N: 882
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:52. Заголовок: SergKis пишет: пере..


SergKis пишет:

 цитата:
переделывать nAtCol не надо, надо сделать так:


тоже переделал MouseMove ....
nCol := ::nAtCol(nColPix, .T.) показывает видимую ( как мы видим ) на экране колонку и не понимаем на взгляд сколько заморожено и сколько скрыто скролом ( ушло влево за границу ) или сколько из того что видим скрыты логически т.е. ::HideColumn()
соответственно nCol не равен номеру колонки бровса.
В примере календяря заморозил 1 колонку и скролом спрятал вторую потом проверял что кажет

Может я не прав , но по сырцам ::nAtCol зависим от ::nColPos
я попробывал рассчитать заново
 
Сначала всю заморозку
For nI := 1 To ::nFreeze
IF nColPix > nColPixPos
nColumn := nI
END
nColPixPos += ::GetColSizes()[ nI ]
Next

Потом с учетом видимости
For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPix > nColPixPos
nColumn ++
END
nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 )
END
End


Вроде кажет правильно , nColumn равен номеру колонки бровса

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




Пост N: 938
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:07. Заголовок: У себя сделал: METHO..


У себя сделал:
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
Local ctooltip, nCol := Max( 1, ::nAtCol( nColPix, .T. ) )
...
If ( lHeader := nRowLine == 0 ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nCol ]:cToolTip )
If ::nToolTip != nCol .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nCol ]:cToolTip
If Valtype(ctooltip) == "B"
ctooltip := Eval(ctooltip, Self, nCol, nRowLine)
EndIf
SetToolTip ( ::hWnd , ctooltip , ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf

::nToolTip := nCol
Else
If ::nToolTip != nCol .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype(ctooltip) == "B"
ctooltip := Eval(ctooltip, Self, nCol, nRowLine)
EndIf
SetToolTip ( ::hWnd , ctooltip , ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
endif

::nToolTip := nCol
EndIf
...

заменил nColumn на nCol, что касается ToolTip - вроде нормально ...
пример: click here

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




Пост N: 886
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:12. Заголовок: Сергей А такой тест ..


Сергей
А такой тест проходит ?
В примере календяря заморозил 1 колонку и скролом спрятал вторую потом проверял что кажет

или скинь полный код MouseMove , проверю


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




Пост N: 940
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:26. Заголовок: Haz пишет:скинь полн..


Haz пишет:
 цитата:
скинь полный код MouseMove


тут: Скрытый текст


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




Пост N: 887
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:35. Заголовок: SergKis пишет: тут:..


Cергей, проверил не катит
1 В исходнике календаря пропиши
oBrw:nFreeze := 1
oBrw:lLockFreeze := TRUE
2 Запусти и кнопкой вправо до упора пока не появится пустое поле
3 Поставь грызуна на колонку "СР " покажет 2

На экране видим мы ее второй но в бровсе она третья


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




Пост N: 941
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:41. Заголовок: Игорь, конечно, с уч..


Игорь, конечно, с учетом видимости, ты прав, будет врать. Решить можно новым методом или вводить еще параметр в nAtCol (менять алгоритм nAtCol опасно - задействован сильно кругом)

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




Пост N: 888
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:49. Заголовок: SergKis пишет: (мен..


SergKis пишет:

 цитата:
(менять алгоритм nAtCol опасно - задействован сильно кругом)


А что думаешь про смену алгоритма ::MouseMove как я предложил ( расчет номера колонки двумя циклами , можно в один свести )
Ведь там у тебя nColumn, это именно номер колонки бровса. и кроме как в тултипе нигде не используется ( есть в блоке , но там как параметр - локальная переменная )
а ::nAtCol менять не надо

 
* ============================================================================
* METHOD TSBrowse:MouseMove() Version 9.0 Nov/30/2009
* ============================================================================

METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse

Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ;
cMsg := ::cMsg, ;
nColPixPos := 0, ;
lFrozen := .F., ;
// nColumn := Max( 1, ::nAtCol( nColPix , .T.) ), ;
nRowLine := ::GetTxtRow( nRowPix ), ctooltip

Default ::lMouseDown := .F., ;
::lNoMoveCols := .F., ;
::lDontChange := .F.


If ::lIconView

If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0

If ::nIconPos != 0 .and. ::nIconPos != nIcon
::DrawIcon( ::nIconPos )
EndIf

::nIconPos := nIcon
::DrawIcon( nIcon, .T. )
CursorHand()
Return 0
EndIf
EndIf

If ::nFreeze > 0
For nI := 1 To ::nFreeze
IF nColPix > nColPixPos
nColumn := nI
END
nColPixPos += ::GetColSizes()[ nI ]
Next
If nColPix < nColPixPos
lFrozen := .T.
EndIf
EndIf

For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPix > nColPixPos
nColumn ++
END
nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 )
END
End

If ( lHeader := ( nRowLine == 0 ) ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nColumn ]:cToolTip )
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nColumn ]:cToolTip
If Valtype( ctooltip ) == "B"
ctooltip := Eval( ctooltip, Self, nColumn, nRowLine )
EndIf
SetToolTip( ::hWnd, ctooltip, ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf
::nToolTip := nColumn
Else
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype( ctooltip ) == "B"
ctooltip := Eval( ctooltip, Self, nColumn, nRowLine )
EndIf
SetToolTip( ::hWnd, ctooltip, ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf
::nToolTip := nColumn
EndIf

lHeader := ( ::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2 )

If ! ::lGrasp .and. ( lFrozen .or. ! lHeader .or. ! ::lMChange )
// don't allow MouseMove to drag/resize columns
// unless in header row and not in frozen zone
CursorArrow()

If ::lCaptured
If ::lLineDrag
::VertLine()
::lLineDrag := .F.
EndIf

ReleaseCapture()
::lColDrag := ::lCaptured := ::lMouseDown := .F.
ElseIf ::lDontChange
CursorStop()
Return 0
EndIf

lMChange := ::lMChange // save it for restore
::lMChange := .F.

If ::lCellBrw .and. ! Empty( ::aColumns[ Max( 1, ::nAtCol( nColPix ) ) ]:cMsg )
::cMsg := ::aColumns[ Max( 1, ::nAtCol( nColPix ) ) ]:cMsg
Else
::cMsg := cMsg
EndIf

::cMsg := If( ValType( ::cMsg ) == "B", Eval( ::cMsg, Self, Max( 1, ::nAtCol( nColPix ) ) ), ::cMsg )
::Super:MouseMove( nRowPix, nColPix, nKeyFlags )
::lMChange := lMChange
::cMsg := cMsg
Return 0
EndIf

If ::lMChange .and. ! ::lNoMoveCols .and. ! ::lDontChange
If lHeader
If ! Empty( ::aSuperHead ) .and. !::lLineDrag

nFirst := 0
nLast := 0
Aeval( ::aSuperHead, { | aSup, nCol | nFirst := If( ::nDragCol >= aSup[1] .and. ::nDragCol <= aSup[ 2 ],nCol,nFirst ), ;
nLast := max(nLast,aSup[ 2 ])} )

nDestCol := ::nAtCol( nColPix )
if nLast < nDestCol
nLast := nFirst+1
else
Aeval( ::aSuperHead, { | aSup, nCol | nlast := If( nDestCol >= aSup[1] .and. nDestCol <= aSup[ 2 ],nCol,nlast )} )
endif
If nLast != nFirst
::lGrasp := .F.
CursorHand()
::lColDrag := ::lCaptured := ::lMouseDown := .F.
endif
endif
If ::lGrasp // avoid dragging between header & rows
::lGrasp := .F.
CursorArrow() // restore default cursor
EndIf

If ::lColDrag
CursorSize()
Else
If ::lLineDrag
::VertLine( nColPix )
CursorWE()
Else
If AScan( ::GetColSizes(), { | nColumn | nColPixPos += nColumn, ;
nColPix >= nColPixPos - 2 .and. nColPix <= nColPixPos + 2 }, ::nColPos ) != 0
CursorWE()
Else
CursorHand()
EndIf
EndIf
EndIf
ElseIf ::lGrasp
::lCaptured := ::lColDrag := .F. // to avoid collision with header/column dragging
::lMouseDown := .T. // has to be down until dragging finishes
::Super:MouseMove( nRowPix, nColPix, nKeyFlags )
Else
CursorArrow()
EndIf
Else
If ::lDontChange
CursorStop()
Else
CursorArrow()
EndIf
EndIf

Return 0


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




Пост N: 942
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 18:22. Заголовок: Haz пишет:А что дума..


Haz пишет:
 цитата:
А что думаешь про смену алгоритма ::MouseMove


По мне лучше метод (думаю пригодиться в использовании). У себя сделал так на базе твоего алгоритма:
 
METHOD nAtColReal( nColPixel ) CLASS TSBrowse

Local nColumn := 0, ;
aSizes := ::GetColSizes(), ;
nI := 0, ;
nColPix := 0

For nI := 1 To ::nFreeze
IF nColPixel > nColPix
nColumn := nI
ENDIF
nColPix += aSizes[ nI ]
Next

For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPixel > nColPix
nColumn ++
ENDIF
nColPix += IF(::IsColVis2(nI), aSizes[ nI ], 0 )
ENDIF
Next

Return nColumn

тогда в MouseMove
Local nCol := Max( 1, ::nAtColReal( nColPix ) )
...

у себя проверил - нормальненько вроде

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