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




Пост N: 178
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 15.11.11 03:06. Заголовок: TSBROWSE - "цепляется" последняя строка


Обьясните пожалуйста, почему при прокрутке TSBROWSE последняя строка часто не обновляется, а зависает, и её значение остаётся неизменным при прокрутке. В зависимости от установленного числа пикселей высоты, эта строка может быть в половину и в четверть нормальной высоты.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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


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




Пост N: 179
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 15.11.11 18:35. Заголовок: Большое вам спасибо ..


Большое вам спасибо

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 322
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.02.12 14:12. Заголовок: Dr. Oldwarez пишет: ..


Dr. Oldwarez пишет:

 цитата:
почему при прокрутке TSBROWSE последняя строка часто не обновляется, а зависает


Удалось корректно устранить эту проблему с помощью польских пользователей библиотеки
Скоро ждите новую сборку с включенными исправлениями

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




Пост N: 192
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 18.03.12 09:55. Заголовок: Всё равно тот же глюк


Я уже поставил новую версию и тестирую её в своих программах. В большинстве случаев TBROWSE работают нормально. Но если установлен DESCENDING (сортировка по убывающей), то при прокрутке TBROWSE вообще зависает программа. Подскажите, пожалуйста, что делать в этом случае.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5026
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 09:48. Заголовок: Не знаю что правили ..


Не знаю что правили польские юзеры но проблема осталась.
Начальный вход в бровс , внизу живет половина строки с номером 34 , переход на нее
не возможен. Стоит переключится на любое другое окно в винде и потом снова вернутся
в свою прогу от 34 строки и следа не осталось (так и должно быть).
Пробовал Refresh , не помог. Так же то что советовал Григорий - результат ноль.
Скрины



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




Пост 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

может что то и не учел.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5027
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 10:10. Заголовок: Спасибо Сергей , поп..


Спасибо Сергей , попробую !

PS
Вроде решил так
По ходу если в конце выдать Obrw:Paint() то все нормально
и лишней строки нет.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5028
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 10:17. Заголовок: А как лечить к приме..


А как лечить к примеру oBrw:gopos(2,5) , вызов идет сразу после того как бровс появился
на экране.
В 5-ю колонку я попал а вот строка осталась первой.

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




Пост N: 699
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 10:49. Заголовок: Dima пишет:А как леч..


Dima пишет:
 цитата:
А как лечить к примеру oBrw:gopos(2,5) , вызов идет сразу после того как бровс появился
на экране.


oBrw:Gotop()
oBrw:GoPos(2,5)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5029
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 10:54. Заголовок: Нет не катит. Попал ..


Нет не катит.
Попал туда если перенести oBrw:GoPos(2,5) и вставить после END WINDOW , перед активацией окна.
А этого делать не хотелось бы.

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




Пост N: 700
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 11:04. Заголовок: а в On init ? часто..


а в On init ?
часто же надо позиционировать по ранее запомненному месту при входе в просмотр

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




Пост N: 701
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 11:41. Заголовок: Dima пишет:вставить ..


Dima пишет:
 цитата:
вставить после END WINDOW , перед активацией окна. А этого делать не хотелось бы.


sTBrwHeight( oBrw ) тоже перед активацией надо ставить (уберет половинчатую строку) для каждого TsBrowse окна

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5030
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 11:49. Заголовок: Да это понятно все С..


Да это понятно все Сергей. Не понятно почему при gopos(2,5) попадаю в нужную колонку все таки а вот в строку нет.
Я бы еще понял если бы gopos(2,5) совсем не сработал а тут какая то половинчатая реакция у него.

SergKis пишет:

 цитата:
а в On init ?


Предлагаешь бровс описывать в ON INIT окна ?
Я делаю внутри описания окна пока что.
Полагал что это без разницы. А она есть ?

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




Пост N: 702
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 12:08. Заголовок: Dima пишет:Предлагае..


Dima пишет:
 цитата:
Предлагаешь бровс описывать в ON INIT окна ?
Я делаю внутри описания окна пока что.


Я тоже мах в окне (често on init не люблю - уже окно в нем нарисовано и если что перерисовать надо - может моргать) многое переношу после end window до activate (modal окна). Например расчитать окончательные размеры связанных контролов, самого окна от размеров контролов, позиционирование по таблицам, запомненное ранее или заданное как scope снаружи окна (загрузка массивов, связанная с данными на входе окна), ...
Т.е. я часто разрушаю окна, а не перевожу в hide, но запоминаю где был на окне и просто потом создаю такое же окно с предыдущим позиционированием.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5031
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 12:11. Заголовок: Понял !..


Понял !

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




Пост 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 и попадаю как надо

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5032
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 12:26. Заголовок: SergKis пишет: oBr..


SergKis пишет:

 цитата:
oBrw5:GoPos(2, 3)

до end window и попадаю как надо



Чудеса да и только .....а я не попал ;) Буду разбираться чего ему надо.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5033
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 15:16. Заголовок: Кстати попал вот так..


Кстати попал вот так ;)
oBrwM:Display()
oBrwM:gopos(3,5)


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




Пост 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)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5034
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 15:27. Заголовок: а вот еще "стран..


а вот еще "странный" вопрос ;)
если oBrwM:lNoHScroll := TRUE вот в таком положении то выравнивание через nAdjColumn
не работает.
как можно избавится от горизонтального скрола и при этом не сломать выравнивание ?

SergKis пишет:

 цитата:
попробовал разкоментировал - одинаково ставит правильно oBrw5:goto(2,3)


Сергей это я делал до END WINDOW , работает.
Хотя я мысль понял что по уму делать надо конечно же после END WINDOW

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 69 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 637
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет