Автор | Сообщение |
|
| постоянный участник
|
Пост 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
|
|
|
|
| |
Пост N: 5035
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 15:39. Заголовок: SergKis Собственно ..
SergKis Собственно я пока играюсь что бы понять как и что Конструкция примерно такая Func NEW_Magaz(nmag,cTitle) DEFINE WINDOW MAGAZIN.......... if nmag==1 Magaz_po("MAGAZIN") // а тут в этой функции дефайню бровс который живет в окне MAGAZIN // и как бы не хотелось находясь в функции NEW_Magaz дергать сам бровс //после END WINDOW и все хотел сделать в Magaz_po() endif END WINDOW DoMethod("MAGAZIN","Activate") Return nil
|
|
|
|
|
| постоянный участник
|
Пост N: 705
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 15:52. Заголовок: Попробуй через метод..
Попробуй через метод resize перед action nSizeType := 0 nWidth := Form_1.oBrw5.Width nHeight := Form_1.oBrw5.Height oBrw:ReSize( nSizeType, nWidth, nHeight ) в нем пересчет идет с учетом nAdjColumn
|
|
|
|
| |
Пост N: 5036
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 16:03. Заголовок: SergKis пишет: Попр..
SergKis пишет: цитата: | Попробуй через метод resize перед action |
| Сработало но как то "криво".......ладно бог с ним гориз.скролом , пусть живет ;)
|
|
|
|
| постоянный участник
|
Пост N: 706
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 16:15. Заголовок: Dima пишет:Конструкц..
Dima пишет: цитата: | Конструкция примерно такая |
| Строю примерно так: Function Wnd_Child_Kassa(...) или Wnd_Modal_Kassa(...) Before_Wnd() // действия перед окном подчитываем что надо для работы Create_Wnd(...) // DEFINE WINDOW ... IF lErr MsgStop("Чего то не сраслось", "ERROR") ELSE Create_Menu() // созд.меню Create_TBar()// созд.toolbar Create_SBar() // statusbar Create_Brw1() Create_Brw2() или для окна ввода данных Create_Lbl_Get() ENDIF After_Create_Wnd() Show() After_Wnd() RETURN Static function Before_Wnd() ... Static function Create_Wnd() ... Static function Create_Menu() ... Static function Create_TBar() ... Static function Create_SBar() ... Static function Create_Brw1() ... Static function Create_Brw2() ... Static function Create_Lbl_Get() ... Static function After_Create_Wnd() END WINDOW действия перед ACTIVATE ... Static function Show() ACTIVATE ... ... Static function After_Wnd() ...
|
|
|
|
| |
Пост N: 5037
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 16:21. Заголовок: SergKis Понял. Сенк..
SergKis Понял. Сенкс !
|
|
|
|
| |
Пост N: 5038
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 16:53. Заголовок: До кучи так сказать...
До кучи так сказать. Это я исключительно про TSBrowse. Как в обычном не знаю , да и не нужно пока. Вот такое присвоение делать не следует если использовать nAdjColumn oBrw:aColumns[ 1 ]:nWidth:=470 Правильно вот так oBrw:SetColSize( 1, 470 )
|
|
|
|
| постоянный участник
|
Пост N: 707
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 17:03. Заголовок: Dima пишет: делать н..
Dima пишет: цитата: | делать не следует если использовать nAdjColumn |
| я делал без nAdjColumn (и горизонт. scroll) так (TsBrowse) w := oBrw5:GetAllColsWidth() Form_1.Width := w+GetVScrollBarWidth()+GetBorderWidth()+10 // 10 - отступ справа, слева такой тоже есть Form_1.oBrw5.Width := w
|
|
|
|
| |
Пост N: 5039
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 17:10. Заголовок: SergKis пишет: w :=..
SergKis пишет: цитата: | w := oBrw5:GetAllColsWidth() |
| Так тоже не совсем правильно , так как учтены будут все колонки в том числе скрытые и ширина установится не правильно. SergKis пишет: что бы делать с ним корректно надо чуть поправить сырец h_tbrowse.prg в METHOD TSBrowse:ReSize()
|
|
|
|
| постоянный участник
|
Пост N: 708
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 17:15. Заголовок: Dima Ты прав, я же ..
Dima Ты прав, я же у себя окно притягиваю к tsbrowse (колонки все на окне), но где то видел как получить только видимые колонки
|
|
|
|
| |
Пост N: 5041
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 17:18. Заголовок: SergKis Это правка ..
SergKis Это правка сырца AEval( ::aColumns, {|n| IF( n:lVisible, nTotPix += n:nWidth, nil ) } ) Copyright Has
|
|
|
|
| постоянный участник
|
Пост N: 709
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 17:23. Заголовок: Dima пишет:Это правк..
Dima пишет: а она решает проблемку при oBrw5:lNoHScrol := .T.
|
|
|
|
|
| |
Пост N: 5042
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 17:31. Заголовок: SergKis пишет: а он..
SergKis пишет: цитата: | а она решает проблемку при oBrw5:lNoHScrol := .T. |
| Нет. Это решает проблему корректного выравнивания. Это установка у меня живет в коменте // oBrw5:lNoHScrol := .T.
|
|
|
|
| постоянный участник
|
Пост N: 710
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 17:41. Заголовок: т.е. :Resize(...) Ср..
т.е. :Resize(...) цитата: | Сработало но как то "криво".......ладно бог с ним гориз.скролом , пусть живет |
|
|
|
|
|
| |
Пост N: 5043
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 17:43. Заголовок: SergKis пишет: т.е...
|
|
|
|
| постоянный участник
|
Пост N: 711
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 17:50. Заголовок: Dima Спасибо..
Dima Спасибо
|
|
|
|
| |
Пост N: 5044
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 18:00. Заголовок: Сергей полный текст ..
Сергей полный текст правки // AEval( ::aColSizes, {|n| nTotPix += n } ) // это было AEval( ::aColumns, {|n| IF( n:lVisible, nTotPix += n:nWidth, nil ) } ) // добавлено do events // добавлено , удивительно но в ряде случаев без этого не работает
|
|
|
|
| постоянный участник
|
Пост N: 712
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 18:13. Заголовок: Dima пишет:Сергей по..
Dima пишет: цитата: | Сергей полный текст правки |
| Спасибо. Загнал к себе. Правда TsBrowse отложил пока. Вроде пару недель прошло, а отключился от него сильно, да еще жара 31 ...
|
|
|
|
| |
Пост N: 5045
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 18:36. Заголовок: Да в жару сложно дум..
Да в жару сложно думать и работать. Включи кондей ! ЗЫ У нас дождик , прохладно....красота. В этом году кондей еще не включал ;)
|
|
|
|
| постоянный участник
|
Пост N: 713
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.07.15 19:22. Заголовок: Dima Включил, но ещ..
Dima Включил, но еще первый раз в этом году (еще 2-а дня назад было прохладно). Но пока со второго этажа дойдет ... (я на огороде) Наверно надо перенести посты по общим вопр. TsBrowse (крайние) в тему TsBrowse. А то плавно засорили эту темеу др. вопросами, ну флуд удали, если возможно
|
|
|
|
| |
Пост N: 5046
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.07.15 19:41. Заголовок: Кому надо тот найдет..
Кому надо тот найдет. Тем более тут в названии фигурирует TSBROWSE. Поиск по TSBROWSE покажет и эту тему. А не много флуда это нормально ;)
|
|
|
|
| |
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 748
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 13:49. Заголовок: Андрей, это понятно,..
Андрей, это понятно, мы боремся с фантомной (заполненной) строкой. В твоем мод. примере она тоже просматривается, если бы она (фантомная строка) была пуста - это, по мне, было бы нормой. Получается тбровсе говорит (у меня) о 26 строках, а прорисовывает 27 и листает из расчета 27
|
|
|
|
| |
Пост N: 606
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.07.15 14:50. Заголовок: SergKis пишет: мы б..
SergKis пишет: цитата: | мы боремся с фантомной (заполненной) строкой |
| Сергей , мне кажется этот фантом - результат разбалансировки высот заданных при инициализации и высот получаемых при первой пририсовке Высоты шапки подвала и строк корректируются при END TSBROSE вызовом SetHeights( Self ) и число строк расчитывается из этих условий скорее всего и формируется значение nRowCount() при первой прорисовке бровса, Затем назначая заголовки футинги и хидеры , или прямо меняя высоту строки через :nHeighCell := вызова SetHeights( Self ) не производится В этом и есть моя догадка ( не проверял ), а при вызове ::Display() или ::Paint() - опять вызов SetHeights( Self ) и все встает в норму. PS позже поковыряю, пока не могу, на работе плотно буду занят
|
|
|
|
| постоянный участник
|
Пост N: 750
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 15:08. Заголовок: Haz пишет:В этом и е..
Haz пишет: цитата: | В этом и есть моя догадка ( не проверял ), а при вызове ::Display() или ::Paint() |
| в самую точку MAGAZIN.oBrw.Height -= 12 // nGetHole oBrw:Paint() // Display() решают проблему прорисовки (Refresh нет), а с листанием, может мой глюк, новый лист от nRowCount+1 в TsBrowse
|
|
|
|
| |
Пост N: 5123
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 15:27. Заголовок: SergKis пишет: oBrw..
SergKis пишет: цитата: | oBrw:Paint() // Display() решают проблему прорисовки (Refresh нет) |
| Да я про это ранее писал что решает )) Хотелось понять "кто" рисует фантомную (заполненную) строку.
|
|
|
|
| постоянный участник
|
Пост N: 755
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.15 15:40. Заголовок: Dima пишет:Да я про ..
Dima пишет: цитата: | Да я про это ранее писал что решает )) |
| В моем примере (не твой модифицированный) с реальным скролингом, фантомная строка есть, но она пустая, а тут HScroll есть, а скролинга нет происходит накладка и ты писал, когда я со своим возился, ну и сам понимаешь склероз догнал Haz разложил по полочкам
|
|
|
|
| |
Пост N: 5124
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 15:41. Заголовок: SergKis пишет: ну и..
SergKis пишет: цитата: | ну и сам понимаешь склероз догнал |
| аналогично + Остеохондроз
|
|
|
|
| |
Пост N: 607
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.07.15 15:44. Заголовок: Dima пишет: Да я пр..
Dima пишет: цитата: | Да я про это ранее писал что решает |
| На основе твоих записей догадка и появилась Dima пишет: Скорее всего это END TSBROWSE Видимо пересчет высот надо делать после любого изменения высоты строк или значений заглловков и футингов. Может потребуется все назначения делать через новые методы типа ::SetHeightCell () и пр. которые должны вызавать этот пересчет
|
|
|
|
| |
Пост N: 5125
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.15 15:51. Заголовок: Haz Следующее покол..
Оффтоп: Haz Следующее поколение ("Клинского , Пепси и 1С") читая этот форум ни черта не поймет о чём мы это тут трём
|
|
|
|
| постоянный участник
|
Пост N: 4379
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.07.15 22:40. Заголовок: Dima пишет: Следующ..
Dima пишет: цитата: | Следующее поколение ("Клинского , Пепси и 1С") читая этот форум ни черта не поймет о чём мы это тут трём |
| Это поколение просто отрицает само существование всех xBase языков... Им подавай только те языки , которые в топе всяких опросов и рекомендаций всяких центров...
|
|
|
Ответов - 69
, стр:
1
2
3
4
All
[только новые]
|
|