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




Пост N: 1949
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 15:51. Заголовок: Тормозок


Имеем Бровс , создаем какой нибудь диалог (или окно) и таскаем его по бровсу. Двигается он с заметными
тормозами. Это особенность FW ? Как то лечится ?
Ни чего подобного не видел в любых других программах под Windows , где так же юзаются таблицы.


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


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




Пост N: 1763
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.01.11 16:00. Заголовок: Наверное, при этом в..


Наверное, при этом вызывается WM_PAINT, перерисовка бровса, а бровс при этом перечитывает данные.
Это причина навскидку, я не смотрел кишки xbrowse
Если это так, то надо что-то думать, например, как-то кешировать данные

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




Пост N: 1950
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 16:05. Заголовок: xbrows это как приме..


xbrows это как пример был. Потягать диалог можно например по окну в котором выведена какая то картинка.
То же будет тормоз , но не такой как в случае с xbrowse.
Pasha пишет:

 цитата:
например, как-то кешировать данные


Например как ?!

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



Пост N: 65
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 06.01.11 16:55. Заголовок: А ты пробни перед от..


А ты пробни перед открытием диалога сделать этот бровс disable (ну и , соответственно, при закрытии enable)

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




Пост N: 1951
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 17:28. Заголовок: fil Неа не помогает..


fil
Неа не помогает :)
Вот тут чуваки терли про это , но нормального итога я не увидел , или не заметил.
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=19212&start=0&hilit=slow+dialog+move<\/u><\/a>

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




Пост N: 1952
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 17:54. Заголовок: Собственно не помога..


Собственно не помогает ни один блок кода , бровс все равно перерисовывается когда по нему диалог таскаю , а
делает он это медленно.
obrw:blostfocus:={||LOCKWINDOWUPDATE( oBrw:hWnd )} // не помогает
obrw:blostfocus:={||oBrw:disable() )}

Вот если бы ему можно было как то сказать что если потерян фокус то не перерисовывать...Вопрос как !?

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




Пост N: 1764
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.01.11 18:13. Заголовок: Dima пишет: цитата:..


Dima пишет:

 цитата:
цитата:
например, как-то кешировать данные



Например как ?!



Я для этого грид под себя специально делал, долго возился. А принцип такой же, как у клипперовского tbrowse: данные по всем отображаемым строкам надо кешировать, и для их перевывода надо не перечитывать их из источника, а брать из кэша. Так же работает xHarbour TBrowse. Harbour TBrowse кеш не поддерживает.
А насчет чуваков, nageswaragunupudi дал неплохую идею, советую попробовать.

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




Пост N: 1953
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 18:55. Заголовок: Pasha пишет: nagesw..


Pasha пишет:

 цитата:
nageswaragunupudi дал неплохую идею, советую попробовать


Идею видел , но пока не пойму как это применить.
Прилинковал тот исходник.
В проге у меня Xbrowse
объявлен так
 
obrw := xbrowsenew( ownds, 73, 5, ownds:nwidth()-20, ownds:nHeight-105,,,,,,, ofont2,,,,, .F., "znomen",, .F.,, .T., nil, .F., .F. ,,,,, .F., .F., .T., .T., )


ну или так
 
@ 73,5 Xbrowse obrw ;
Size ownds:nwidth()-20,ownds:nHeight-105 ;
of ownds PIXEL font ofont2 CELL LINES ALIAS "znomen"


Не очень понял как заюзать класс TXBR3

Собственно исходник
 
#include 'fivewin.ch'
#include 'xbrowse.ch'

#xtranslate DelObj <o> => If <o> != nil; DeleteObject( <o> ); endif; <o> := nil

CLASS TXBR3 FROM TXBROWSE

CLASSDATA lRegistered AS LOGICAL // used internally

DATA hSaveScr

METHOD Paint()
METHOD Destroy()

ENDCLASS

METHOD Paint() CLASS TXBR3

local aInfo

if ::hSaveScr != nil .and. GetFocus() != ::hWnd
aInfo := ::DispBegin()
DrawBitmap( ::hDC, ::hSaveScr, 0, 0 )
::DispEnd( aInfo )
else
Super:Paint()
DelObj ::hSaveScr
::hSaveScr := WndBitMap( ::hWnd )
endif


return nil

METHOD Destroy() CLASS TXBR3

DelObj ::hSaveScr

return Super:Destroy()


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




Пост N: 1766
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.01.11 21:00. Заголовок: Надо сделать модуль ..


Надо сделать модуль для класса txpbr3 - txpbr3.prg, скопировать туда функцию xbrowsenew, переименовать ее, например в
xbr3new
В этой функции заменить вызов

TXBrowse():New( oWnd )

на

TXBr3():New( oWnd )

тоже самое можно сделать с командами: сделать файл xbr3.ch
скопировать туда команду xbrowse, изменить ее имя и заменить в ней вызов xbrowsenew() на xbr3new()


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



Пост N: 66
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 06.01.11 23:14. Заголовок: Перехватил перерисов..


Перехватил перерисовку бровса при таскании по нему диалога. В этом случае диалог работает как большой ластик. Наверное если PAINT картинку экрана, а не бровс, то перерисовка будет шустрее.

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




Пост N: 1954
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.01.11 23:44. Заголовок: Pasha Попробую. fi..


Pasha
Попробую.

fil пишет:

 цитата:
В этом случае диалог работает как большой ластик


Именно.

Всем спасибо и с наступающим рождеством !

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




Пост N: 1955
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 12:53. Заголовок: Pasha Таки да метод..


Pasha
Таки да метода работает и диалоги (окна) не тормозят при движении их по бровсу.
Но сразу в проге сломался поисковый GET (и часть функционала других контролов работащих с бровсом) , оно и понятно почему. Ранее в нем набирался текст и тут же происходил поиск по базе и обновление бровса. Теперь рефреш не работает ,
так как бровс не в фокусе.



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




Пост N: 1767
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.11 15:24. Заголовок: А что если еще прове..


А что если еще проверять, в фокусе ли и родительское окно ?

где-то так:

Local nFocus := GetFocus()

if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd
...

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




Пост N: 1956
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 15:37. Заголовок: Pasha пишет: if ::h..


Pasha пишет:

 цитата:
if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd


что то не то (окно MDICHILD)

при такой корректировке , диалог нормально ездит по бровсу (без особых тормозов)
а вот в поисковом GET в ON CHANGE , obrw:refresh() не срабатывает

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




Пост N: 1768
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:15. Заголовок: А где этот поисковый..


А где этот поисковый get расположен ? В том же окне, что и бровс ?

Тогда можно усложнить проверку

Local nFocus := GetFocus()
Local lFocus := .f.
AEval(::oWnd:aControls, {|o| if(o:hWnd==nFocus, lFocus := .t., )})
if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd .and. ! lFocus


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




Пост N: 1769
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:21. Заголовок: Или сделать еще прощ..


Или сделать еще проще, делов то. Кувалда и напильник - наш инструмент

Добавить к новому классу еще одно свойство

CLASS TXBR3 FROM TXBROWSE

CLASSDATA lRegistered AS LOGICAL // used internally

DATA lPaint AS LOGICAL INIT .t.

в методе Paint проверку написать так:

if ::hSaveScr != nil .and. GetFocus() != ::hWnd .and. lPaint

а в поисковом get refresh делать так:

obrw:lPaint := .f.
obrw:refresh()
obrw:lPaint := .t.


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




Пост N: 1957
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:22. Заголовок: Pasha пишет: А где ..


Pasha пишет:

 цитата:
А где этот поисковый get расположен ? В том же окне, что и бровс ?


Да в нем же.

Сейчас попробуем.

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




Пост N: 1958
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:26. Заголовок: Pasha пишет: Local ..


Pasha пишет:

 цитата:
Local nFocus := GetFocus()
Local lFocus := .f.
AEval(::oWnd:aControls, {|o| if(o:hWnd==nFocus, lFocus := .t., )})
if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd .and. ! lFocus


Вот теперь то что надо :)

Спасибо !!!

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




Пост N: 1959
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:38. Заголовок: Все равно не все в н..


Все равно не все в норме....
Правый клик мышки на записи в бровсе , вылезает диалог а курсор в бровсе улетает на другую запись.
При закрытии диалога курсор возвращается на место.

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




Пост N: 1770
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.11 16:58. Заголовок: А что за диалог ? po..


А что за диалог ? popup-меню ? И как видно, что курсор улетает ? Курсор это подсветка строки ?

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




Пост N: 1960
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.01.11 17:10. Заголовок: Бровс в окне. Курсор..


Бровс в окне. Курсор - да подсветка строки (текущей записи)
Стою скажем на товаре с кодом 33 , жму правый клик мышки на этой записи и курсор улетает на другую запись c кодом 21
Закрываем диалог. Снова делаем то же самое и вот только тогда все нормально.


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

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