On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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: 1067
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.02.17 19:50. Заголовок: i3t4j6 пишет: стала..


i3t4j6 пишет:

 цитата:
стала появляться такая ошибка


Благодарю за сообщение!
Добавил дополнительную проверку в строке 9981

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




Пост N: 1069
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.03.17 13:18. Заголовок: Григорий можно пра..


Григорий
можно правочку небольшую в METHOD TSBrowse:Edit()

Было:

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



Хочу:
 
3749: If oCol:bPrevEdit != Nil
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays
ElseIf nKey != VK_RETURN // GF 15-10-2015
IF !Eval( oCol:bPrevEdit, uValue, Self )
nKey := VK_RETURN
END
EndIf
EndIf


PS Привык пользовать ::PrevEdit() и если он возвращает F не пускать в редактирование. В случае с чекбоксом этот прием не работает пока не внести изменения в код


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




Пост N: 1073
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.03.17 15:04. Заголовок: Haz пишет: пользова..


Haz пишет:

 цитата:
пользовать ::PrevEdit() и если он возвращает F не пускать в редактирование


Благодарю за Ваше предложение!

Добавил это изменение со следующим комментарием:

 цитата:
- a cell with checkbox will respect of return value of bPrevEdit block
in the method Edit().
Suggested and contributed by Igor Nazarov.



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




Пост N: 1380
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.03.17 15:35. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Добавил это изменение


возможно, делать надо как в методе KeyDown :
 
Local uVal
...
Line 6562
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self )
If ValType( uVal ) == "L" .and. ! uVal
nKey := VK_RETURN
EndIf



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




Пост N: 1381
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.03.17 15:38. Заголовок: PS uVal := Eval( ::a..


PS
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uValue, Self )

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




Пост N: 1074
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.03.17 16:12. Заголовок: SergKis пишет: дела..


SergKis пишет:

 цитата:
делать надо как в методе KeyDown


Благодарю за внимание!

Именно так и сделал (с проверкой типа возвращаемого блоком значения):
... 
uVar := Eval( oCol:bPrevEdit, uValue, Self )
If ValType( uVar ) == "L" .and. ! uVar
nKey := VK_RETURN
EndIf


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




Пост N: 1382
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.03.17 19:59. Заголовок: gfilatov2002 такую ..


gfilatov2002
такую правку предлагаю
 
METHOD GoToRec( nRec ) CLASS TSBrowse
...
If ( ::cAlias )->( EoF() )
...
Else
( ::cAlias )->( DbGoTo( nRecNo ) )
::nLastPos := nRecNo
::nAt := ::nLogicPos()

While ::nRowPos > 1
::Skip( -1 )
::nRowPos --
EndDo
While nRecNo != ( ::cAlias )->( RecNo() )
::Skip( 1 )
::nRowPos ++
EndDo

EndIf
...


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




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


SergKis пишет:

 цитата:
такую правку предлагаю


Сергей, а зачем аверх вниз гонять?
PS просто из любопытства спрашиваю)))

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




Пост N: 6334
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 22:32. Заголовок: Haz пишет: Сергей, ..


Haz пишет:

 цитата:
Сергей, а зачем аверх вниз гонять?


Тоже не понял....

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




Пост N: 1383
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.17 00:21. Заголовок: Для правильной устан..


Для правильной установки ::nRowPos
Просмотр по тегу, ::nRowPos = 18 (::nRowCount() = 20)
Добавили запись или переходим на recno выше, к примеру ::nRowPos должен стать 3
Без добавки сейчас (у меня так) запись добавилась выше, а ::nRowPos остался 18

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




Пост N: 1071
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.03.17 08:51. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для правильной установки ::nRowPos


В принципе пробег туда - сюда делается оч быстро и если это снимает проблему то почему бы и нет.
У меня новая запись почти всегда не в конец добавляется т. к. используется механизм выбора из удаленных.

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




Пост N: 1384
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.17 09:26. Заголовок: Haz пишет т. к. испо..


Haz пишет
 цитата:
т. к. используется механизм выбора из удаленных.


У меня так же, и если тег по наименованию и ситуация как выше, то nRowPos не становился на новую запись,
а оставался где были. Два цикла можно, наверно оптимизировать

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




Пост N: 1072
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.03.17 12:16. Заголовок: SergKis пишет: nRow..


SergKis пишет:

 цитата:
nRowPos не становился на новую запись




Сергей а так ?
oBrw:nLen := Eval( oBrw::bLogicLen )
oBrw:Refresh(.T., .T.) // <------------------ на счет этого не уверен тут может моргать таблица
oBrw:GotoRecNo( nRec )

Скинь самодостаточный, но проверить смогу под RDDADS тк только им пользуюсь из за SQL


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




Пост N: 1385
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.03.17 20:28. Заголовок: Haz пишет Скинь само..


Haz пишет
 цитата:
Скинь самодостаточный


Наконец сделал пример. GotoRec работатет нормально в тек. версии, немного не привычно - выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью, т.е. с GotoRec - в моей версии что то не так (так что исправление это только у меня) - это хорошо.
Пример тут http://my-files.ru/vooru4


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




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


SergKis пишет:

 цитата:
сделал пример. GotoRec работает нормально в тек. версии


Благодарю за интересный пример

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




Пост N: 1386
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.17 09:48. Заголовок: gfilatov2002 надо п..


gfilatov2002
надо подправить строки (не работает конструкция oCol:cFooting := {|nKol,oBr| ... })
 
Static Function SetHeights( oBrw )
...
line 13090
cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading ), oColumn:cHeading )
на
cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading, nEle, oBrw ), oColumn:cHeading )

line 13137
cHeading := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting ), oColumn:cFooting )
на
cHeading := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nEle, oBrw ), oColumn:cFooting )

Григорий, может функ. SetNoHoles(...) сделать методом TsBrowse ? Скрытый текст




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




Пост N: 1073
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.03.17 12:04. Заголовок: SergKis пишет: выта..


Сергей - отличный пример
я бы сказал что он не сколько на ::GotoRec() сколько на понимание подхода к TS и его составляющим как к объектам

SergKis пишет:

 цитата:
выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью


Выталкивает вверх потому что подбирается к нужной записи снизу
If ( ::cAlias )->( EoF() ) означает что ниже нужной записи нет их необходимого количества чтоб заполнить весь бровс начиная с верхней строки
Вот тут
( ::cAlias )->( DbSkip( nLines - ::nRowPos ) )  

при этом ::nRowPos всегда 1 после ::Reset() выше
и если записей недостаточно то встает на самый конец и скипает вверх.
в принципе можно подумать как переделать чтобы всегда подбирался сверху. т.е. проверять есть ли достаточное количество записей перед и после чтобы ::RowPos остался прежним
Не знаю насколько это принципиально, но технически исполнимо
Алгоритм зависит от воросов
1) Какой ::nRowPos ставить если перед нужной ( той куда идем) записей меньше чем текущий ::nRowPos - вариантов два - ::nRowPos == 1 или логический новой номер нужной записи
2) Какой ::nRowPos ставить если после нужной ( той куда идем) записей меньше чем текущий ::nRowCount - вариантов три - ::nRowPos == 1 (с обрезанием бровса), поледний ::nRowPos == nRowCount или как сейчас текущий с выпихиванием верха

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




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


SergKis пишет:

 цитата:
надо подправить строки


Сделал, конечно (поправил функцию SetHeights() и добавил новый метод SetNoHoles(), и Ваш новый пример).

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

P.S. Выход новой мартовской сборки запланирован на следующей неделе

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




Пост N: 1387
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.17 12:58. Заголовок: Haz пишет Не знаю на..


Haz пишет
 цитата:
Не знаю насколько это принципиально


Для пользователя это может быть важным, т.к. имея сорт. по наим.
А1
А2
...
А7
Б1
Б2
добавляя А8, А9 выталкиваться будет А1 и А2 вместо Б...
а с др. стороны при полном экране на А... верх будет выдавливаться так же

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




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


gfilatov2002 пишет
 цитата:
и Ваш новый пример


там убрать над лишнее
 
STATIC FUNC Add_Rec( oBrw )
Local cBrw, hBrw, cAls, cPic
Local nHgh, nWdt, nPos, cCol, oCol, nLen
Local nRow, nCol, oCel, cGet, cVal, nRec
Local cKods, cName, cKodP, cNamP, lRefr
Local nY , nX , nW , nH
Local nX1, nW1, nH1
Local nX2, nW2, nH2
Local cWnd := oBrw:cParentWnd
Local hWnd := GetFormHandle(cWnd)
Local hInpl := _HMG_InplaceParentHandle

_HMG_InplaceParentHandle := hWnd

PRIVATE aResult

WITH OBJECT oBrw

cBrw := :cControlName
cAls := :cAlias
hBrw := GetWindowRow(GetControlHandle(cBrw, cWnd))



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