Автор | Сообщение |
|
| постоянный участник
|
Пост N: 178
Зарегистрирован: 27.07.08
|
|
Отправлено: 15.11.11 03:06. Заголовок: TSBROWSE - "цепляется" последняя строка
Обьясните пожалуйста, почему при прокрутке TSBROWSE последняя строка часто не обновляется, а зависает, и её значение остаётся неизменным при прокрутке. В зависимости от установленного числа пикселей высоты, эта строка может быть в половину и в четверть нормальной высоты.
|
|
|
Ответов - 69
, стр:
1
2
3
4
All
[только новые]
|
|
|
| moderator
|
Пост N: 292
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.11.11 12:15. Заголовок: Dr. Oldwarez пишет: ..
Dr. Oldwarez пишет: цитата: | почему при прокрутке TSBROWSE последняя строка часто не обновляется |
| Да, есть такая бяка Известно даже, как ее победить: надо добавить несколько вызовов Refresh(.T.) в методы, влияющие на прокрутку Но после таких поправок оригинального кода резко увеличится мигание экрана и замедлится скорость прокрутки, что весьма критично при работе в сети. Поэтому предлагается делать небольшую настройку (тюнинг ) высоты ячеек для устранения этого неприятного эффекта. Для демонстрации этой техники посмотрите/изучите/используйте (нужное подчеркнуть) пример ниже: #include 'minigui.ch' #include "TSBrowse.ch" procedure main dbcreate('test',{{'nazwa','C',30,0},; {'ilosc','N',12,2},; {'cena','N',14,2}}) dbusearea(.t.,,'test') for i := 1 to 100 test->(dbappend()) test->nazwa := str(i) test->ilosc := test->(recno()) test->cena := (test->ilosc * HB_Random(100)) next test->(dbgotop()) DEFINE WINDOW o_dlu AT 0,0 WIDTH 600 HEIGHT 400; TITLE ' test' MAIN ICON "MAIN" ; FONT 'ARIAL' SIZE 12 @ 50,500 SPINNER Sp RANGE 0,100 value 26 WIDTH 60 ON CHANGE (br_zaw:nHeightHead := o_dlu.sp.value,br_zaw:reset()) ON KEY ESCAPE OF o_dlu ACTION o_dlu.RELEASE DEFINE TBROWSE Br_zaw AT 15, 10 OF o_dlu ALIAS "test" WIDTH 450 HEIGHT 330 br_zaw:SetColor( { 2 }, { { | | IIf( test->(OrdKeyNo()) % 2 = 0,Rgb(255,255,255),rgb(230, 230, 230) ) }}) ADD COLUMN TO br_zaw DATA {|| test->nazwa } ALIGN DT_LEFT, DT_CENTER, DT_CENTER TITLE 'Nazwa' SIZE 150 FOOTER 'Pozycji '+LTrim( str(test->(lastrec())) ) ADD COLUMN TO br_zaw DATA {|| test->ilosc } ALIGN DT_RIGHT, DT_CENTER,DT_CENTER TITLE 'Ilosc' SIZE 100 ADD COLUMN TO br_zaw DATA {|| test->cena } ALIGN DT_RIGHT, DT_CENTER, DT_CENTER TITLE 'Cena' SIZE 100 br_zaw:nHeightCell += 6 br_zaw:nHeightFoot += 4 br_zaw:nHeightHead += 10 br_zaw:nWheelLines := 1 br_zaw:reset() br_zaw:setfocus() br_zaw:DrawSelect() br_zaw:Gotop() END TBROWSE END WINDOW o_dlu.br_zaw.setfocus ACTIVATE WINDOW o_dlu return
|
|
|
|
| постоянный участник
|
Пост N: 179
Зарегистрирован: 27.07.08
|
|
Отправлено: 15.11.11 18:35. Заголовок: Большое вам спасибо ..
Большое вам спасибо
|
|
|
|
| moderator
|
Пост N: 322
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.02.12 14:12. Заголовок: Dr. Oldwarez пишет: ..
Dr. Oldwarez пишет: цитата: | почему при прокрутке TSBROWSE последняя строка часто не обновляется, а зависает |
| Удалось корректно устранить эту проблему с помощью польских пользователей библиотеки Скоро ждите новую сборку с включенными исправлениями
|
|
|
|
| постоянный участник
|
Пост N: 192
Зарегистрирован: 27.07.08
|
|
Отправлено: 18.03.12 09:55. Заголовок: Всё равно тот же глюк
Я уже поставил новую версию и тестирую её в своих программах. В большинстве случаев TBROWSE работают нормально. Но если установлен DESCENDING (сортировка по убывающей), то при прокрутке TBROWSE вообще зависает программа. Подскажите, пожалуйста, что делать в этом случае.
|
|
|
|
| |
Пост N: 5026
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 09:48. Заголовок: Не знаю что правили ..
Не знаю что правили польские юзеры но проблема осталась. Начальный вход в бровс , внизу живет половина строки с номером 34 , переход на нее не возможен. Стоит переключится на любое другое окно в винде и потом снова вернутся в свою прогу от 34 строки и следа не осталось (так и должно быть). Пробовал Refresh , не помог. Так же то что советовал Григорий - результат ноль. Скрины
|
|
|
|
| постоянный участник
|
Пост N: 698
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 10:02. Заголовок: Dima я себе сооруди..
Dima я себе соорудил такую бяку: FUNCTION sTBrwHeight( oBrw ) // уст. реальный размер TBrowse LOCAL nHeightCell := oBrw:nHeightCell LOCAL nHeightHead := oBrw:nHeightHead LOCAL nHeightFoot := oBrw:nHeightFoot LOCAL nHeightSpecHd := oBrw:nHeightSpecHd LOCAL nHeightSuper := oBrw:nHeightSuper LOCAL nLineStyle := oBrw:nLineStyle LOCAL nRowHeight := oBrw:nRowCount() * nHeightCell nHeight := nHeightSuper + ; nHeightHead + ; nHeightSpecHd + ; nRowHeight + ; nHeightFoot + 1 IF GetwindowHeight(oBrw:hWnd) > nHeight SetProperty(oBrw:cParentWnd, oBrw:cControlName, 'Height', nHeight) ENDIF RETURN nHeight может что то и не учел.
|
|
|
|
| |
Пост N: 5027
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 10:10. Заголовок: Спасибо Сергей , поп..
Спасибо Сергей , попробую ! PS Вроде решил так По ходу если в конце выдать Obrw:Paint() то все нормально и лишней строки нет.
|
|
|
|
| |
Пост N: 5028
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 10:17. Заголовок: А как лечить к приме..
А как лечить к примеру oBrw:gopos(2,5) , вызов идет сразу после того как бровс появился на экране. В 5-ю колонку я попал а вот строка осталась первой.
|
|
|
|
| постоянный участник
|
Пост N: 699
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 10:49. Заголовок: Dima пишет:А как леч..
Dima пишет: цитата: | А как лечить к примеру oBrw:gopos(2,5) , вызов идет сразу после того как бровс появился на экране. |
| oBrw:Gotop() oBrw:GoPos(2,5)
|
|
|
|
| |
Пост N: 5029
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 10:54. Заголовок: Нет не катит. Попал ..
Нет не катит. Попал туда если перенести oBrw:GoPos(2,5) и вставить после END WINDOW , перед активацией окна. А этого делать не хотелось бы.
|
|
|
|
| постоянный участник
|
Пост N: 700
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 11:04. Заголовок: а в On init ? часто..
а в On init ? часто же надо позиционировать по ранее запомненному месту при входе в просмотр
|
|
|
|
|
| постоянный участник
|
Пост N: 701
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 11:41. Заголовок: Dima пишет:вставить ..
Dima пишет: цитата: | вставить после END WINDOW , перед активацией окна. А этого делать не хотелось бы. |
| sTBrwHeight( oBrw ) тоже перед активацией надо ставить (уберет половинчатую строку) для каждого TsBrowse окна
|
|
|
|
| |
Пост N: 5030
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 11:49. Заголовок: Да это понятно все С..
Да это понятно все Сергей. Не понятно почему при gopos(2,5) попадаю в нужную колонку все таки а вот в строку нет. Я бы еще понял если бы gopos(2,5) совсем не сработал а тут какая то половинчатая реакция у него. SergKis пишет: Предлагаешь бровс описывать в ON INIT окна ? Я делаю внутри описания окна пока что. Полагал что это без разницы. А она есть ?
|
|
|
|
| постоянный участник
|
Пост N: 702
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 12:08. Заголовок: Dima пишет:Предлагае..
Dima пишет: цитата: | Предлагаешь бровс описывать в ON INIT окна ? Я делаю внутри описания окна пока что. |
| Я тоже мах в окне (често on init не люблю - уже окно в нем нарисовано и если что перерисовать надо - может моргать) многое переношу после end window до activate (modal окна). Например расчитать окончательные размеры связанных контролов, самого окна от размеров контролов, позиционирование по таблицам, запомненное ранее или заданное как scope снаружи окна (загрузка массивов, связанная с данными на входе окна), ... Т.е. я часто разрушаю окна, а не перевожу в hide, но запоминаю где был на окне и просто потом создаю такое же окно с предыдущим позиционированием.
|
|
|
|
| |
Пост N: 5031
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 12:11. Заголовок: Понял !..
Понял !
|
|
|
|
| постоянный участник
|
Пост N: 703
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 12:14. Заголовок: Dima пишет: у меня т..
Dima пишет:[quote]` у меня так: ... ADD COLUMN TO oBrw5 DATA {|| iif(KOPER > 0, aOper[KOPER], hb_ntos(KOPER)) } ; TITLE aHdr[ i ] ; FOOTER aFot[ i ] ; COMBOBOX ; EDITABLE ; LOOK3D .F., .F., .F. oBrw5:aColumns[ i ]:Cargo := { aFld[ i ], nAls, { aOper, aKod } } oBrw5:SetData ( i, NIL, { aOper, aKod } ) oBrw5:aColumns[ i ]:bEditing := { |uVar,oBrw| oBrw:aColumns[oBrw:nCell]:oEdit:LButtonDown() } oBrw5:aColumns[ i ]:bEditEnd := { |uVal,oBrw,lSave| lSave := lSave .and. RLock(), ; iif(lSave, FieldPut(FieldPos('KOPER'), uVal+1), NIL), ; iif(lSave, dbUnLock(), NIL) } HdrClick(0) // oBrw5:bUserKeys := {|nK,nF,oB| UserKeyDown(nK, nF, oB) } oBrw5:lCellBrw := .T. oBrw5:lEditable := .T. oBrw5:lNoHScroll := .T. oBrw5:lNoMoveCols := .T. oBrw5:lNoLiteBar := .F. oBrw5:lNoResetPos := .F. oBrw5:nFreeze := 1 oBrw5:aColumns[ 1 ]:lEdit := .F. // LACC not Edit oBrw5:aColumns[ 4 ]:lEdit := .F. // адрес not Edit oBrw5:GoPos(2, 3) до end window и попадаю как надо
|
|
|
|
| |
Пост N: 5032
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 12:26. Заголовок: SergKis пишет: oBr..
SergKis пишет: цитата: | oBrw5:GoPos(2, 3) до end window и попадаю как надо |
| Чудеса да и только .....а я не попал ;) Буду разбираться чего ему надо.
|
|
|
|
| |
Пост N: 5033
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 15:16. Заголовок: Кстати попал вот так..
Кстати попал вот так ;) oBrwM:Display() oBrwM:gopos(3,5)
|
|
|
|
| постоянный участник
|
Пост N: 704
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 15:25. Заголовок: Dima пишет:Кстати по..
Dima пишет: у меня END WINDOW oBrw5:nHeightHead := 25 // высота строки заоловка oBrw5:nHeightFoot := 25 // высота строки подвала oBrw5:aColumns[ 3 ]:cFooting := "Итог 3 " // установить значение подвала колонки 3 // oBrw5:Display() попробовал разкоментировал - одинаково ставит правильно oBrw5:goto(2,3)
|
|
|
|
| |
Пост N: 5034
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 15:27. Заголовок: а вот еще "стран..
а вот еще "странный" вопрос ;) если oBrwM:lNoHScroll := TRUE вот в таком положении то выравнивание через nAdjColumn не работает. как можно избавится от горизонтального скрола и при этом не сломать выравнивание ? SergKis пишет: цитата: | попробовал разкоментировал - одинаково ставит правильно oBrw5:goto(2,3) |
| Сергей это я делал до END WINDOW , работает. Хотя я мысль понял что по уму делать надо конечно же после END WINDOW
|
|
|
Ответов - 69
, стр:
1
2
3
4
All
[только новые]
|
|