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




Пост 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 
ПрофильЦитата Ответить
администратор




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


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




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


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




Пост N: 5036
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 16:03. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Попробуй через метод resize перед action


Сработало но как то "криво".......ладно бог с ним гориз.скролом , пусть живет ;)

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




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


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




Пост N: 5037
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 16:21. Заголовок: SergKis Понял. Сенк..


SergKis
Понял. Сенкс !

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




Пост N: 5038
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 16:53. Заголовок: До кучи так сказать...


До кучи так сказать. Это я исключительно про TSBrowse.
Как в обычном не знаю , да и не нужно пока.
Вот такое присвоение делать не следует если использовать nAdjColumn
oBrw:aColumns[ 1 ]:nWidth:=470

Правильно вот так
oBrw:SetColSize( 1, 470 )

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




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


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




Пост N: 5039
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 17:10. Заголовок: SergKis пишет: w :=..


SergKis пишет:

 цитата:
w := oBrw5:GetAllColsWidth()


Так тоже не совсем правильно , так как учтены будут все колонки в том числе скрытые и ширина
установится не правильно.

SergKis пишет:

 цитата:
я делал без nAdjColumn


что бы делать с ним корректно надо чуть поправить сырец h_tbrowse.prg в
METHOD TSBrowse:ReSize()

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




Пост N: 708
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 17:15. Заголовок: Dima Ты прав, я же ..


Dima
Ты прав, я же у себя окно притягиваю к tsbrowse (колонки все на окне), но где то видел как получить только видимые колонки

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




Пост N: 5041
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 17:18. Заголовок: SergKis Это правка ..


SergKis
Это правка сырца
 
AEval( ::aColumns, {|n| IF( n:lVisible, nTotPix += n:nWidth, nil ) } ) Copyright Has


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




Пост N: 709
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 17:23. Заголовок: Dima пишет:Это правк..


Dima пишет:
 цитата:
Это правка сырца


а она решает проблемку при
oBrw5:lNoHScrol := .T.


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




Пост N: 5042
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 17:31. Заголовок: SergKis пишет: а он..


SergKis пишет:

 цитата:
а она решает проблемку при
oBrw5:lNoHScrol := .T.


Нет. Это решает проблему корректного выравнивания.
Это установка у меня живет в коменте
// oBrw5:lNoHScrol := .T.

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




Пост N: 710
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 17:41. Заголовок: т.е. :Resize(...) Ср..


т.е. :Resize(...)
 цитата:
Сработало но как то "криво".......ладно бог с ним гориз.скролом , пусть живет



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




Пост N: 5043
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 17:43. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. :Resize(...)


Да

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




Пост N: 711
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 17:50. Заголовок: Dima Спасибо..


Dima
Спасибо

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




Пост 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 // добавлено , удивительно но в ряде случаев без этого не работает



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




Пост N: 712
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 18:13. Заголовок: Dima пишет:Сергей по..


Dima пишет:
 цитата:
Сергей полный текст правки


Спасибо. Загнал к себе. Правда TsBrowse отложил пока. Вроде пару недель прошло, а отключился от него сильно, да еще жара 31 ...



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




Пост N: 5045
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 18:36. Заголовок: Да в жару сложно дум..


Да в жару сложно думать и работать. Включи кондей !

ЗЫ
У нас дождик , прохладно....красота. В этом году кондей еще не включал ;)

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




Пост N: 713
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.15 19:22. Заголовок: Dima Включил, но ещ..


Dima
Включил, но еще первый раз в этом году (еще 2-а дня назад было прохладно). Но пока со второго этажа дойдет ... (я на огороде)
Наверно надо перенести посты по общим вопр. TsBrowse (крайние) в тему TsBrowse.
А то плавно засорили эту темеу др. вопросами, ну флуд удали, если возможно

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




Пост N: 5046
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 19:41. Заголовок: Кому надо тот найдет..


Кому надо тот найдет. Тем более тут в названии фигурирует TSBROWSE. Поиск по TSBROWSE покажет и эту тему.
А не много флуда это нормально ;)

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост N: 748
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 13:49. Заголовок: Андрей, это понятно,..


Андрей, это понятно, мы боремся с фантомной (заполненной) строкой. В твоем мод. примере она тоже просматривается, если бы она (фантомная строка) была пуста - это, по мне, было бы нормой. Получается тбровсе говорит (у меня) о 26 строках, а прорисовывает 27 и листает из расчета 27

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




Пост 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 позже поковыряю, пока не могу, на работе плотно буду занят



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




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


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




Пост N: 5123
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 15:27. Заголовок: SergKis пишет: oBrw..


SergKis пишет:

 цитата:
oBrw:Paint() // Display()
решают проблему прорисовки (Refresh нет)


Да я про это ранее писал что решает ))
Хотелось понять "кто" рисует фантомную (заполненную) строку.

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




Пост N: 755
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.15 15:40. Заголовок: Dima пишет:Да я про ..


Dima пишет:
 цитата:
Да я про это ранее писал что решает ))


В моем примере (не твой модифицированный) с реальным скролингом, фантомная строка есть, но она пустая, а тут HScroll есть, а скролинга нет происходит накладка и ты писал, когда я со своим возился, ну и сам понимаешь склероз догнал
Haz разложил по полочкам

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




Пост N: 5124
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 15:41. Заголовок: SergKis пишет: ну и..


SergKis пишет:

 цитата:
ну и сам понимаешь склероз догнал


аналогично + Остеохондроз

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




Пост N: 607
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.07.15 15:44. Заголовок: Dima пишет: Да я пр..


Dima пишет:

 цитата:
Да я про это ранее писал что решает


На основе твоих записей догадка и появилась
Dima пишет:

 цитата:
Хотелось понять "кто"


Скорее всего это END TSBROWSE
Видимо пересчет высот надо делать после любого изменения высоты строк или значений заглловков и футингов.
Может потребуется все назначения делать через новые методы типа ::SetHeightCell () и пр. которые должны вызавать этот пересчет

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




Пост N: 5125
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.07.15 15:51. Заголовок: Haz Следующее покол..


Оффтоп:
Haz
Следующее поколение ("Клинского , Пепси и 1С") читая этот форум ни черта не поймет о чём мы это тут
трём


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




Пост N: 4379
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.07.15 22:40. Заголовок: Dima пишет: Следующ..


Dima пишет:

 цитата:
Следующее поколение ("Клинского , Пепси и 1С") читая этот форум ни черта не поймет о чём мы это тут
трём


Это поколение просто отрицает само существование всех xBase языков...
Им подавай только те языки , которые в топе всяких опросов и рекомендаций всяких центров...

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

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