Автор | Сообщение |
|
| |
Пост N: 1949
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.11 15:51. Заголовок: Тормозок
Имеем Бровс , создаем какой нибудь диалог (или окно) и таскаем его по бровсу. Двигается он с заметными тормозами. Это особенность FW ? Как то лечится ? Ни чего подобного не видел в любых других программах под Windows , где так же юзаются таблицы.
|
|
|
Ответов - 97
, стр:
1
2
3
4
5
All
[только новые]
|
|
|
| Администратор
|
Пост N: 1763
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.01.11 16:00. Заголовок: Наверное, при этом в..
Наверное, при этом вызывается WM_PAINT, перерисовка бровса, а бровс при этом перечитывает данные. Это причина навскидку, я не смотрел кишки xbrowse Если это так, то надо что-то думать, например, как-то кешировать данные
|
|
|
|
| |
Пост N: 1950
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.11 16:05. Заголовок: xbrows это как приме..
xbrows это как пример был. Потягать диалог можно например по окну в котором выведена какая то картинка. То же будет тормоз , но не такой как в случае с xbrowse. Pasha пишет: цитата: | например, как-то кешировать данные |
| Например как ?!
|
|
|
|
| |
Пост N: 65
Зарегистрирован: 17.06.10
|
|
Отправлено: 06.01.11 16:55. Заголовок: А ты пробни перед от..
А ты пробни перед открытием диалога сделать этот бровс disable (ну и , соответственно, при закрытии enable)
|
|
|
|
| |
Пост N: 1951
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.11 17:28. Заголовок: fil Неа не помогает..
|
|
|
|
| |
Пост N: 1952
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.11 17:54. Заголовок: Собственно не помога..
Собственно не помогает ни один блок кода , бровс все равно перерисовывается когда по нему диалог таскаю , а делает он это медленно. obrw:blostfocus:={||LOCKWINDOWUPDATE( oBrw:hWnd )} // не помогает obrw:blostfocus:={||oBrw:disable() )} Вот если бы ему можно было как то сказать что если потерян фокус то не перерисовывать...Вопрос как !?
|
|
|
|
| Администратор
|
Пост N: 1764
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.01.11 18:13. Заголовок: Dima пишет: цитата:..
Dima пишет: цитата: | цитата: например, как-то кешировать данные Например как ?! |
| Я для этого грид под себя специально делал, долго возился. А принцип такой же, как у клипперовского tbrowse: данные по всем отображаемым строкам надо кешировать, и для их перевывода надо не перечитывать их из источника, а брать из кэша. Так же работает xHarbour TBrowse. Harbour TBrowse кеш не поддерживает. А насчет чуваков, nageswaragunupudi дал неплохую идею, советую попробовать.
|
|
|
|
| |
Пост 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()
|
|
|
|
| Администратор
|
Пост 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()
|
|
|
|
| |
Пост N: 66
Зарегистрирован: 17.06.10
|
|
Отправлено: 06.01.11 23:14. Заголовок: Перехватил перерисов..
Перехватил перерисовку бровса при таскании по нему диалога. В этом случае диалог работает как большой ластик. Наверное если PAINT картинку экрана, а не бровс, то перерисовка будет шустрее.
|
|
|
|
| |
Пост N: 1954
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.11 23:44. Заголовок: Pasha Попробую. fi..
Pasha Попробую. fil пишет: цитата: | В этом случае диалог работает как большой ластик |
| Именно. Всем спасибо и с наступающим рождеством !
|
|
|
|
| |
Пост N: 1955
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.01.11 12:53. Заголовок: Pasha Таки да метод..
Pasha Таки да метода работает и диалоги (окна) не тормозят при движении их по бровсу. Но сразу в проге сломался поисковый GET (и часть функционала других контролов работащих с бровсом) , оно и понятно почему. Ранее в нем набирался текст и тут же происходил поиск по базе и обновление бровса. Теперь рефреш не работает , так как бровс не в фокусе.
|
|
|
|
|
| Администратор
|
Пост N: 1767
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.11 15:24. Заголовок: А что если еще прове..
А что если еще проверять, в фокусе ли и родительское окно ? где-то так: Local nFocus := GetFocus() if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd ...
|
|
|
|
| |
Пост 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() не срабатывает
|
|
|
|
| Администратор
|
Пост 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
|
|
|
|
| Администратор
|
Пост 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.
|
|
|
|
| |
Пост N: 1957
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.01.11 16:22. Заголовок: Pasha пишет: А где ..
Pasha пишет: цитата: | А где этот поисковый get расположен ? В том же окне, что и бровс ? |
| Да в нем же. Сейчас попробуем.
|
|
|
|
| |
Пост 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 |
| Вот теперь то что надо :) Спасибо !!!
|
|
|
|
| |
Пост N: 1959
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.01.11 16:38. Заголовок: Все равно не все в н..
Все равно не все в норме.... Правый клик мышки на записи в бровсе , вылезает диалог а курсор в бровсе улетает на другую запись. При закрытии диалога курсор возвращается на место.
|
|
|
|
| Администратор
|
Пост N: 1770
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.11 16:58. Заголовок: А что за диалог ? po..
А что за диалог ? popup-меню ? И как видно, что курсор улетает ? Курсор это подсветка строки ?
|
|
|
|
| |
Пост N: 1960
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.01.11 17:10. Заголовок: Бровс в окне. Курсор..
Бровс в окне. Курсор - да подсветка строки (текущей записи) Стою скажем на товаре с кодом 33 , жму правый клик мышки на этой записи и курсор улетает на другую запись c кодом 21 Закрываем диалог. Снова делаем то же самое и вот только тогда все нормально.
|
|
|
Ответов - 97
, стр:
1
2
3
4
5
All
[только новые]
|
|