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




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


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 69 , стр: 1 2 3 4 All [только новые]


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




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


Кто то плотно еще работает с Tsbrowse ?
Хочется этот отличный но слегка кривоватый в некоторых моментах инструмент довести
до "совершенства"
По ходу кое чего еще исправили с Has , в частности курсор более не моргает при достижении верхней и нижней
видимых границ бровса.
Но вот глюк с прорисовкой лишней строки в бровсе не очень ясен , скрины в этой теме , пост 5026.
Понятно что он лечится с помощью метода Paint или Display. Но это не наш метод ;)
Где еще эта бяка вылезет не понятно.
Хочется понять где рисуется и почему эта лишняя строка.
nRowCount() четко показал 33 строки , тем не менее при первом вызове наблюдается фантомная строка 34.
На которую попасть нельзя. Спинной мозК подсказывает что глюк в каком то методе...........


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




Пост N: 738
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 17:53. Заголовок: Dima Модифицировал ..


Dima
Модифицировал свою бяку из поста 698, с учетом HScroll:
 
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
LOCAL nBrwH := GetwindowHeight(oBrw:hWnd)
LOCAL nDelta

nHeight := nHeightSuper + ;
nHeightHead + ;
nHeightSpecHd + ;
nRowHeight + ;
nHeightFoot + 1

IF ! oBrw:lNoHScroll
nDelta := nBrwH - nHeight
IF nDelta > 0 .and. nHeightCell > nDelta
nHeight += nHeightCell - nDelta - 2
ENDIF
ENDIF

SetProperty(oBrw:cParentWnd, oBrw:cControlName, 'Height', nHeight)

RETURN nHeight

Использовать до END WINDOW или перед ACTIVATE WINDOW
sTBrwHeight(oBrw5, 'Form_1')


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




Пост N: 5115
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.07.15 18:02. Заголовок: SergKis пишет: Моди..


SergKis пишет:

 цитата:
Модифицировал свою бяку из поста 698, с учетом HScroll:


Проверил.
Получил в nRowCount() 32 строки , на экране вижу 33 , 33-ая фантом и не перейти на нее.
Повторить то что у меня получилось будет сложно , так как разные разрешения у нас.

И да , высота гор скрола 17 вроде.

До кучи , даже если мы установим некую правильную высоту то все сойдет на НЕТ
при вызове метода PAINT , DISPLAY в одном из методов. Все перейдет на круги своя.

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




Пост N: 739
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 18:20. Заголовок: Dima пишет:Получил в..


Dima пишет:
 цитата:
Получил в nRowCount() 32 строки , на экране вижу 33 , 33-ая фантом и не перейти на нее.
Повторить то что у меня получилось будет сложно , так как разные разрешения у нас.


Не очень понял, проверил на 11' и 15' - все нормально и HScroll и без него.
Без бяки (с HScroll) есть 32 фантомная строка, с бякой она дотягивается до полноценной.


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




Пост N: 740
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 18:34. Заголовок: Dima пишет:До кучи ,..


Dima пишет:
 цитата:
До кучи , даже если мы установим некую правильную высоту то все сойдет на НЕТ
при вызове метода PAINT , DISPLAY в одном из методов. Все перейдет на круги своя.


Возмо у тебя что то сложное. У меня узкое окно, широкий TBrowse (HScroll), коректировка в строке (на части колонок), реакция на click в header и footer с Refresh(.T.) - и не сбивается выравненная (фантомная) строка

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




Пост N: 5116
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.07.15 18:45. Заголовок: Сергей попробуй посл..


Сергей попробуй после sTBrwHeight( oBrw ) сделать сразу obrw:display() и ты увидишь
что от заданной высоты установленной в sTBrwHeight ни чего не осталось и все пересчиталось.

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




Пост N: 741
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 19:00. Заголовок: Дима, у меня так: ..


Дима, у меня так:
sTBrwHeight(oBrw5)
oBrw5:Refresh(.F.)
// oBrw5:Display()
oBrw5:GoPos(5,2)

CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Все ok!и разницы с Display или Refresh нет, но по мне refresh больше нравиться


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




Пост N: 5117
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.07.15 19:16. Заголовок: Странно. Работает зн..


Странно. Работает значит по разному.
Можно пойти другим путем ...я было начал но не закончил тесты.
Вычисляем высоту "дырки" в низу бровса , то что он не использовал.
 
Func GetHole()
local WorkHeight := oBrw:nHeight-oBrw:nHeightHead-oBrw:nHeightSuper-;
oBrw:nHeightFoot-oBrw:nHeightSpecHd-if(!oBrw:lNoHScroll,16,0)
RETURN WorkHeight-Int(WorkHeight/oBrw:nHeightCell)*oBrw:nHeightCell

И затем значение что вернется добавляем к высоте хидера или суперхилера.

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




Пост N: 742
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 19:25. Заголовок: Dima пишет:И затем з..


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


Бяка практически это и делает, меняя размер бровсе, можно достричь до хидера, суперхидера.
IF oBrw:nHeightSuper > 0
oBrw:nHeightSuper += nDelta
ELSE
oBrw:nHeightHead += nDelta
ENDIF

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




Пост N: 5118
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.07.15 19:57. Заголовок: Фуф...... Сергей нуж..


Фуф......
Сергей нужно обмениваться примерами , что бы понять что не так.
Я менял сырец бровса в методах GoUP и GoDown а так же TSBRWSCROLL из c_TBrowse.c ,
но это все ради того что бы курсор не мигал при достижении границ и тут дело не в этом.
Чуть позже выложу сырец примера и EXE.
Не против ?

PS
Пример самодостаточный , если что и можно его собрать. Но мой EXE все же пощупай и ощути
разницу поведения курсора на текущей строке если нажимая стрелку вниз достиг последней строки
видимой на экране , тож самое и верхней касается. У тебя будет мерцать ( блымать и тд курсор) а в EXE
моем нет.


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




Пост N: 5119
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.07.15 21:27. Заголовок: SergKis https://clo..

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




Пост N: 743
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.07.15 22:29. Заголовок: Dima пишет: EXE все ..


Dima пишет:
 цитата:
EXE все же пощупай и ощути
разницу поведения курсора на текущей строке если нажимая стрелку вниз достиг последней строки
видимой на экране , тож самое и верхней касается. У тебя будет мерцать ( блымать и тд курсор) а в EXE
моем нет.


Согласен, смотрится лучше.

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




Пост N: 5120
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 10:11. Заголовок: И что , у тебя нет ф..


И что , у тебя нет фантомной строки если запустить мой EXE ?
У меня есть...34-я
А если пересобрать пример (ни чего не меняя) тоже нет ?

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




Пост N: 744
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 10:23. Заголовок: Дима, дырка 5, строк..


Дима, дырка 5, строк 26, со сборкой и без одинаково. Пробовал только на 11' на 15' позже гляну.


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




Пост N: 5121
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 10:30. Заголовок: То есть фантома нет ..


То есть фантома нет , да ?
СтрЯнно........
У меня так

Разрешение экрана у меня 1440 x 900

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




Пост N: 745
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 10:52. Заголовок: Dima пишет:То есть ф..


Dima пишет:
 цитата:
То есть фантома нет


Совсем нет, все достойно, только с моей сборкой помаргивает курсор и усе.

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




Пост N: 5122
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 10:53. Заголовок: Понял, косяк где то...


Понял, косяк где то..........
Или в методе NEW или DEFAULT

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




Пост N: 746
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 11:25. Заголовок: Дима, косяк получил,..


Дима, косяк получил, при
MAGAZIN.oBrw.Height := MAGAZIN.oBrw.Height - 12
т.е. дырка 15, строк 25, а в показу +0.5 от 26

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




Пост N: 747
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 11:40. Заголовок: Дима, на первый взгл..


Дима, на первый взгляд, кажется лечится
PRIV nGetHole
....
END WINDOW
MAGAZIN.oBrw.Height -= nGetHole
Func GetHole() 
local WorkHeight := oBrw:nHeight-oBrw:nHeightHead-oBrw:nHeightSuper-;
oBrw:nHeightFoot-oBrw:nHeightSpecHd-if(!oBrw:lNoHScroll,16,0)
LOCAL nHole := WorkHeight-Int(WorkHeight/oBrw:nHeightCell)*oBrw:nHeightCell

nGetHole := nHole

RETURN nHole

в. показе 26 и фанома нет, но такое чувство, что есть 27 строка и сделав pgdn - попадаем на 27 (а должны были на 26, 1-ая сверху)

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




Пост N: 4378
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.07.15 12:45. Заголовок: Я немного модифициро..


Я немного модифицировал пример, поставил показ разрешения экрана и проверку на LargeFonts(), получилось так:

Разрешение: 1920х1080

Ширину колонок надо бы делать так (сразу под разные разрешения экрана):
oBrw:aColumns[ 4 ]:cHeading :="накладной"
nTxtWidth := GetTxtWidth( "1накладной1", nFontSize, cFont)
oBrw:SetColSize( 4, nTxtWidth )

Определение nFontSize, cFont - задать выше. Функцию GetTxtWidth() дал SergKis, можно взять из http://clipper.borda.ru/?1-1-0-00000454-000-60-0 Пост N: 4373


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

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