Автор | Сообщение |
|
| постоянный участник
|
Пост N: 178
Зарегистрирован: 27.07.08
|
|
Отправлено: 15.11.11 03:06. Заголовок: TSBROWSE - "цепляется" последняя строка
Обьясните пожалуйста, почему при прокрутке TSBROWSE последняя строка часто не обновляется, а зависает, и её значение остаётся неизменным при прокрутке. В зависимости от установленного числа пикселей высоты, эта строка может быть в половину и в четверть нормальной высоты.
|
|
|
Ответов - 69
, стр:
1
2
3
4
All
[только новые]
|
|
|
| |
Пост N: 5114
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.15 14:15. Заголовок: Кто то плотно еще ра..
Кто то плотно еще работает с Tsbrowse ? Хочется этот отличный но слегка кривоватый в некоторых моментах инструмент довести до "совершенства" По ходу кое чего еще исправили с Has , в частности курсор более не моргает при достижении верхней и нижней видимых границ бровса. Но вот глюк с прорисовкой лишней строки в бровсе не очень ясен , скрины в этой теме , пост 5026. Понятно что он лечится с помощью метода Paint или Display. Но это не наш метод ;) Где еще эта бяка вылезет не понятно. Хочется понять где рисуется и почему эта лишняя строка. nRowCount() четко показал 33 строки , тем не менее при первом вызове наблюдается фантомная строка 34. На которую попасть нельзя. Спинной мозК подсказывает что глюк в каком то методе...........
|
|
|
|
| постоянный участник
|
Пост 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')
|
|
|
|
| |
Пост N: 5115
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.15 18:02. Заголовок: SergKis пишет: Моди..
SergKis пишет: цитата: | Модифицировал свою бяку из поста 698, с учетом HScroll: |
| Проверил. Получил в nRowCount() 32 строки , на экране вижу 33 , 33-ая фантом и не перейти на нее. Повторить то что у меня получилось будет сложно , так как разные разрешения у нас. И да , высота гор скрола 17 вроде. До кучи , даже если мы установим некую правильную высоту то все сойдет на НЕТ при вызове метода PAINT , DISPLAY в одном из методов. Все перейдет на круги своя.
|
|
|
|
| постоянный участник
|
Пост N: 739
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.07.15 18:20. Заголовок: Dima пишет:Получил в..
Dima пишет: цитата: | Получил в nRowCount() 32 строки , на экране вижу 33 , 33-ая фантом и не перейти на нее. Повторить то что у меня получилось будет сложно , так как разные разрешения у нас. |
| Не очень понял, проверил на 11' и 15' - все нормально и HScroll и без него. Без бяки (с HScroll) есть 32 фантомная строка, с бякой она дотягивается до полноценной.
|
|
|
|
| постоянный участник
|
Пост N: 740
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.07.15 18:34. Заголовок: Dima пишет:До кучи ,..
Dima пишет: цитата: | До кучи , даже если мы установим некую правильную высоту то все сойдет на НЕТ при вызове метода PAINT , DISPLAY в одном из методов. Все перейдет на круги своя. |
| Возмо у тебя что то сложное. У меня узкое окно, широкий TBrowse (HScroll), коректировка в строке (на части колонок), реакция на click в header и footer с Refresh(.T.) - и не сбивается выравненная (фантомная) строка
|
|
|
|
| |
Пост N: 5116
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.15 18:45. Заголовок: Сергей попробуй посл..
Сергей попробуй после sTBrwHeight( oBrw ) сделать сразу obrw:display() и ты увидишь что от заданной высоты установленной в sTBrwHeight ни чего не осталось и все пересчиталось.
|
|
|
|
| постоянный участник
|
Пост 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 больше нравиться
|
|
|
|
| |
Пост 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 И затем значение что вернется добавляем к высоте хидера или суперхилера.
|
|
|
|
| постоянный участник
|
Пост N: 742
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.07.15 19:25. Заголовок: Dima пишет:И затем з..
Dima пишет: цитата: | И затем значение что вернется добавляем к высоте хидера или суперхилера. |
| Бяка практически это и делает, меняя размер бровсе, можно достричь до хидера, суперхидера. IF oBrw:nHeightSuper > 0 oBrw:nHeightSuper += nDelta ELSE oBrw:nHeightHead += nDelta ENDIF
|
|
|
|
| |
Пост N: 5118
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.15 19:57. Заголовок: Фуф...... Сергей нуж..
Фуф...... Сергей нужно обмениваться примерами , что бы понять что не так. Я менял сырец бровса в методах GoUP и GoDown а так же TSBRWSCROLL из c_TBrowse.c , но это все ради того что бы курсор не мигал при достижении границ и тут дело не в этом. Чуть позже выложу сырец примера и EXE. Не против ? PS Пример самодостаточный , если что и можно его собрать. Но мой EXE все же пощупай и ощути разницу поведения курсора на текущей строке если нажимая стрелку вниз достиг последней строки видимой на экране , тож самое и верхней касается. У тебя будет мерцать ( блымать и тд курсор) а в EXE моем нет.
|
|
|
|
| |
Пост N: 5119
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.15 21:27. Заголовок: SergKis https://clo..
|
|
|
|
|
| постоянный участник
|
Пост N: 743
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.07.15 22:29. Заголовок: Dima пишет: EXE все ..
Dima пишет: цитата: | EXE все же пощупай и ощути разницу поведения курсора на текущей строке если нажимая стрелку вниз достиг последней строки видимой на экране , тож самое и верхней касается. У тебя будет мерцать ( блымать и тд курсор) а в EXE моем нет. |
| Согласен, смотрится лучше.
|
|
|
|
| |
Пост N: 5120
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 10:11. Заголовок: И что , у тебя нет ф..
И что , у тебя нет фантомной строки если запустить мой EXE ? У меня есть...34-я А если пересобрать пример (ни чего не меняя) тоже нет ?
|
|
|
|
| постоянный участник
|
Пост N: 744
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 10:23. Заголовок: Дима, дырка 5, строк..
Дима, дырка 5, строк 26, со сборкой и без одинаково. Пробовал только на 11' на 15' позже гляну.
|
|
|
|
| |
Пост N: 5121
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 10:30. Заголовок: То есть фантома нет ..
То есть фантома нет , да ? СтрЯнно........ У меня так Разрешение экрана у меня 1440 x 900
|
|
|
|
| постоянный участник
|
Пост N: 745
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 10:52. Заголовок: Dima пишет:То есть ф..
Dima пишет: Совсем нет, все достойно, только с моей сборкой помаргивает курсор и усе.
|
|
|
|
| |
Пост N: 5122
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 10:53. Заголовок: Понял, косяк где то...
Понял, косяк где то.......... Или в методе NEW или DEFAULT
|
|
|
|
| постоянный участник
|
Пост N: 746
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 11:25. Заголовок: Дима, косяк получил,..
Дима, косяк получил, при MAGAZIN.oBrw.Height := MAGAZIN.oBrw.Height - 12 т.е. дырка 15, строк 25, а в показу +0.5 от 26
|
|
|
|
| постоянный участник
|
Пост 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-ая сверху)
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
Ответов - 69
, стр:
1
2
3
4
All
[только новые]
|
|