Форум » FiveWin » Тормозок » Ответить

Тормозок

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

Ответов - 97, стр: 1 2 3 4 5 All

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

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

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


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

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

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

Dima: Pasha пишет: nageswaragunupudi дал неплохую идею, советую попробовать Идею видел , но пока не пойму как это применить. Прилинковал тот исходник. В проге у меня Xbrowse объявлен так [pre2] obrw := xbrowsenew( ownds, 73, 5, ownds:nwidth()-20, ownds:nHeight-105,,,,,,, ofont2,,,,, .F., "znomen",, .F.,, .T., nil, .F., .F. ,,,,, .F., .F., .T., .T., ) [/pre2] ну или так [pre2] @ 73,5 Xbrowse obrw ; Size ownds:nwidth()-20,ownds:nHeight-105 ; of ownds PIXEL font ofont2 CELL LINES ALIAS "znomen" [/pre2] Не очень понял как заюзать класс TXBR3 Собственно исходник [pre2] #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() [/pre2]

Pasha: Надо сделать модуль для класса txpbr3 - txpbr3.prg, скопировать туда функцию xbrowsenew, переименовать ее, например в xbr3new В этой функции заменить вызов TXBrowse():New( oWnd ) на TXBr3():New( oWnd ) тоже самое можно сделать с командами: сделать файл xbr3.ch скопировать туда команду xbrowse, изменить ее имя и заменить в ней вызов xbrowsenew() на xbr3new()

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

Dima: Pasha Попробую. fil пишет: В этом случае диалог работает как большой ластик Именно. Всем спасибо и с наступающим рождеством !

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

Pasha: А что если еще проверять, в фокусе ли и родительское окно ? где-то так: Local nFocus := GetFocus() if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd ...

Dima: Pasha пишет: if ::hSaveScr != nil .and. nFocus != ::hWnd .and. nFocus != ::oWnd:hWnd что то не то (окно MDICHILD) при такой корректировке , диалог нормально ездит по бровсу (без особых тормозов) а вот в поисковом GET в ON CHANGE , obrw:refresh() не срабатывает

Pasha: А где этот поисковый 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

Pasha: Или сделать еще проще, делов то. Кувалда и напильник - наш инструмент Добавить к новому классу еще одно свойство 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.

Dima: Pasha пишет: А где этот поисковый get расположен ? В том же окне, что и бровс ? Да в нем же. Сейчас попробуем.

Dima: 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 Вот теперь то что надо :) Спасибо !!!

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

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

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

Dima: Счас картинку выложу ;)

Dima: До нажатия правой кнопки мышки После нажатия , курсор уехал на 253 код Закрываем диалог и все так как на первой картинке

Pasha: Ух ты ! Вкусно ! Думаем. На нажатие rclick что у нас ? Вызывается диалог с картинкой. При этом бровс теряет фокус, и на пайнт вызывается прорисовка экрана, то, что было сохранено на коде 253 Столичная. Почему так - непонятно Может быть, перед вызовом этого диалога отключить фокус с прорисовкой сохраненного экрана ? Т.е, добавить в класс lPaint, перед выводом диалога сбрасывать его, а потом восстанавливать ?

Pasha: Ага, имеем дело с рассинхровкой. Когда у бровса был фокус, был товар 253, и на нем сохранился экран. Мышкой кликнули на кровянке, при этом пайнт не вызвался. Брорвс потерял фокус, вызвался пайнт, и восстановилась столичная Надо добавлять lPaint, адназначна

Dima: Pasha пишет: Надо добавлять lPaint, адназначна Понял. Спасибо !

Pasha: Нет, при этом теряется смысл всей затеи. Ведь этот тот самый диалог. Лучше перед вызовом диалога вызвать refresh у бровса, чтобы он выдал paint, при этом сохранится нужный экран Или, еще лучше, напрямую вызвать DeleteObject( oBwr:hSaveScr ) oBwr:hSaveScr := WndBitMap( oBrw:hWnd )

Dima: Pasha Да refresh не помог. Напрямую сработало.

Dima: Pasha пишет: Или, еще лучше, напрямую вызвать DeleteObject( oBwr:hSaveScr ) oBwr:hSaveScr := WndBitMap( oBrw:hWnd ) Поигрался. Пришел к выводу что этот вызов проще будет прописать в blostfocus бровса

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

Andrey: fil пишет: Приспособил сию штуку под TSBROWSE. А картинку показать можно ? Как это выглядит ?

Pasha: fil пишет: blostfocus делать не стал, а просто активизирую глобальный флаг перед вызовом любого диалога Но по бровсу может ездить не только свой диалог, но и чужой, поэтому отслеживать фокус было бы правильнее

Pasha: Pasha пишет: А картинку показать можно ? Как это выглядит ? Слушай, зачем картинка, да ? Включаем абстрактное мышление. Видим любой бровс/грид. По нему зачем-то ездит диалог. При этом бровс под диалогом медленно перерисовывается. Применяем предложенный трюк. Диалог так же ездит, но бровс перерисовывается мгновенно.

fil: Увы, колбасу я не учитываю http://pics.qip.ru/002oAm-201nmrK/

Andrey: Pasha пишет: Слушай, зачем картинка, да ? Включаем абстрактное мышление. Нужно переходить с терминалки ! А куда, пока не знаю. Вот и хочется посмотреть что люди делают ! fil пишет: Увы, колбасу я не учитываю Красиво тоже ! А при переключение на вкладки "Оплата", "Подрядчик" и др. - что происходит ?

fil: Это прога некоего документооборота. Основной бровс содержит документы. Бровс ниже контекстно показывает те или иные дополнительные реквизиты текущего документа. Соответственно, выбор вкладок "Оплата", "Подрядчик" и др. - позволяет выбрать тот или иной контекст

Pasha: Andrey пишет: Нужно переходить с терминалки ! А куда, пока не знаю. Вот и хочется посмотреть что люди делают ! Картинки - это конечно хорошо, но боюсь, что картинки мало о чем скажут. Чтообы определиться в своих предпочтениях, надо самому что-нибудь сделать на обоих продуктах. Оценить трудоемкость одного и другого

Dima: Pasha пишет: Чтообы определиться в своих предпочтениях, надо самому что-нибудь сделать на обоих продуктах +1

Dima: Снова засада :) Такой ход работает нормально [pre2] obrw:blostfocus:={||DeleteObject( oBrw:hSaveScr ),oBrw:hSaveScr := WndBitMap( oBrw:hWnd )} [/pre2] Но вот захотелось при открытии какого либо диалога , основное окно с бровсом делать полупрозрачным В диалоге вызываю SETTRANSPARENT(ownd:hWnd,220) Все в норме только бровс весь черный , как ночь (при повторном вызове диалога все нормально). Куда копать ? Исходник [pre2] #include "FiveWin.ch" #define _WIN32_IE 0x0500 #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #define WS_EX_LAYERED 0x80000 #define LWA_ALPHA 0x02 #define GWL_EXSTYLE (-20) #define LWA_COLORKEY 1 FUNCTION SetColorTransparency( hWnd, nColor ) LOCAL nRet, lRet := .F. SetWindowLong( hWnd, GWL_EXSTYLE, C_OR( GetWindowLong( hWnd, GWL_EXSTYLE ), WS_EX_LAYERED ) ) nRet := SetLayeredWindowAttributes( hWnd, nColor, 0, LWA_COLORKEY ) IF VALTYPE(nRet) == 'N' lRet := ( nRet > 0 ) ENDIF RETURN( lRet ) DLL32 Function SetLayeredWindowAttributes(hwnd as LONG, crkey as LONG,bAlpha as LONG ,dwFlags as DWORD) AS LONG ; PASCAL FROM "SetLayeredWindowAttributes" Lib "user32.dll" #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include<stdio.h> #include<string.h> #include<shellapi.h> HB_FUNC( SETTRANSPARENT) { typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND,COLORREF,BYTE,DWORD); PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL; HINSTANCE hLib = LoadLibrary("user32.dll"); if (hLib != NULL) { pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hLib,"SetLayeredWindowAttributes"); } if (pfnSetLayeredWindowAttributes) { SetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE,GetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE) | WS_EX_LAYERED); pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA); } if (!hLib) { FreeLibrary(hLib); } } #define HB_OS_WIN_32_USED /*#define _WIN32_WINNT 0x0400 */ #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" HB_FUNC ( SETWINDOWLONG ) { hb_retnl( SetWindowLong( (HWND) hb_parnl(1), hb_parni(2), hb_parnl(3) ) ); } HB_FUNC( C_AND ) { hb_retnl( hb_parnl(1) & hb_parnl(2) ) ; } HB_FUNC( C_OR ) { hb_retnl( hb_parnl(1) | hb_parnl(2) ) ; } HB_FUNC( C_NOT ) { hb_retnl( ~hb_parnl(1) ) ; } #pragma ENDDUMP [/pre2]

fil: Наверное моно сохранить экран с бровсом как картинку. Делать бровс Hide, а вместо него светить эту картинку - вроде есть примерчики по прозрачности

ММК: fil пишет: Наверное моно сохранить экран с бровсом как картинку. Делать бровс Hide, а вместо него светить Можно :) А вообще зачем это делать? Для себя я нашел только одно объяснение , т.к. ни на полупразрачном бровсе особо не поймешь что есть , то видимо это для того что бы подчеркнуть ( выделить) важность того что есть на диалоге. Если так то огород годить , а потом бороться с "следами" "жетами" смысла нет - можно использовать стандартный код: #include 'fivewin.ch' #include 'ord.ch' #include 'xbrowse.ch' REQUEST DBFCDX static cBmpPath := 'c:\FWH\bitmaps\backgrnd\' function Main() local oWnd, oBar, oBrw USE CUSTOMER DEFINE WINDOW oWnd TITLE 'Проба' @ 0, 0 XBROWSE oBrw OF oWnd ; ALIAS 'CUSTOMER' AUTOCOLS ; CELL LINES ; COLOR CLR_WHITE, CLR_BLUE DEFINE BUTTONBAR oBar OF oWnd SIZE 100,32 2007 DEFINE BUTTON OF oBar PROMPT 'TESTIK'; ACTION BlurEffect( oBrw ) SET MESSAGE OF oWnd TO FWVERSION 2007 oBrw:SetBackGround( cBmpPath + 'water3.bmp' ) oBrw:CreateFromCode() oWnd:oClient := oBrw ACTIVATE WINDOW oWnd MAXIMIZED return nil Function BlurEffect( oBrw ) local hBmp local hBlur oBrw:GetDC() hBmp := MakeBkBmp( oBrw:hWnd, oBrw:hDC ) hBlur := Blur( hBmp, 3 ) PalBmpDraw( oBrw:hDC, 0, 0, hBlur ) MsgStop( "Увлечение компом портит глаза!" ) DeleteObject( hBmp ) DeleteObject( hBlur ) oBrw:ReleaseDC() return nil Меняя в Blur( hBmp, 3 ) второй параметр можно усиливать или уменьшать эффект

Dima: ММК Идея хороша :) Есть только одна проблема , функция Blur появилась с версии 9.08 а у меня (считал что и у тебя такая же) 9.05 однако.

Dima: Pasha Сдвигаю диалог в сторонку а под ним портится изображение Куда копать ?

Dima: Dima пишет: Сдвигаю диалог в сторонку а под ним портится изображение Таки проблема осталась и возникает она только в случае использования класса TXBR3 , что то в нем не то :( Самому разобраться не по силам , так как я только в начальной стадии познания FW

fil: В TSBrowse аналогично. Т.ч. не то не только в TXBR3

ММК: fil пишет: Таки проблема осталась и возникает она только в случае использования класса TXBR3 , что то в нем не то :( Все правильно - Saving and restoring the bitmap is painting the saved image one pixel off from the original position. This can be fixed. Переводить не надо? TXBR3 выбрасывай, для твоего примера это лишнее. А потом начинай разбираться где "палка в колесе". Думаю если у тебя остался диалог с жетом встроенный в футер бровса - убери, похоже ты сразу ставишь несколько фильтров - убери . И т.д. Определишь проблему, можно будет искать решение. Найди первопричину :)

Dima: ММК пишет: Найди первопричину Все эти танцы с бубном начались из за того , что сторонний диалог или родной ежели его таскать по бровсу , жутко тормозил при перемещении , так как бровс под ним все время перерисовывался. Собственно есть аналогичная тема на форуме поддержки и способ ее решения а именно класс Txbr3 , в котором изначально были недочеты , которые помог решить Павел. Но одна проблемка все же еще осталась о чем и fil пишет. ММК пишет: Думаю если у тебя остался диалог с жетом встроенный в футер бровса - убери, Убрал уже давно :)

ММК: Dima пишет: Все эти танцы с бубном начались из за того , что сторонний диалог или родной ежели его таскать по бровсу , жутко тормозил при перемещении , так как бровс под ним все время перерисовывался Сделай пример , а там посмотрим Dima пишет: Собственно есть аналогичная тема на форуме поддержки и способ ее решения а именно класс Txbr3 за все время там один ( у которого проблема ) , ты второй :) и если ты прочитал эту тему то решения ( чистого ) пока так и не нашлось. Еще раз -Saving and restoring the bitmap is painting ... Сохранение и востановление как раз и вызывает то искажение которое ты видешь. пример или исходник , а так это все пустое

Dima: ММК пишет: пример или исходник , а так это все пустое Пример сделать не проблема. Ты же понял о чем речь ? :) Хочешь сказать что у тебя нет тормозов и шлейфа при перемещении диалога (окна) по бровсу ? Берем из примеров любой , скажем testxbr3. Вызываем там любой бровс и растягиваем окошко поширше. Затем берем любое открытое окно в винде и тянем его на наш открытый бровс и елозим его туда , сюда по бровсу. Тормоз и шлейф видно невооруженным глазом. Видео что ли выложить.... Касается это не только бровса . На тулбаре с кнопками тот же шлейф и тормоз. Мне лично по фиг , но клиенты меня достанут :)) PS Видеокарта у меня дай бог каждому такую , так что она тут не при чем :)

Dima: Вот и ролик приехал http://files.mail.ru/UREZ7A Фон бровса выбрал потемнее , что бы виднее было "эффект"

ММК: Dima пишет: Видеокарта у меня дай бог каждому такую , так что она тут не при чем :) Очень красиво , попросили бы так не сумел :) Dima пишет: Ты же понял о чем речь ? :) Хочешь сказать что у тебя нет тормозов и шлейфа при перемещении диалога (окна) по бровсу ? Теперь понял. А авишку ты чем делал? научи

Dima: Авишку делал с помощью Mr. Captor , есть там захват видео.

Dima: В принципе есть один ход что бы и фон под диалогом не портился и диалог не тормозил при перемещении. В INIT диалога прописать к примеру SETTRANSPARENT(odlg:hWnd,255) (сырцы выше в топике) , но есть побочный эффект , если в диалоге живет бровс , то он начинает тормозить

Pasha: Dima пишет: Вот и ролик приехал http://files.mail.ru/UREZ7A Фон бровса выбрал потемнее , что бы виднее было "эффект" Шлейф хороший, внушаетЬ :) Но у меня такого не получилось. Я взял тестовый пример samples\testxbrw, запустил его, и елозил по нему калькулятором. Очень небольшая задержка при перерисовке есть, но никакого шлейфа нет и в помине. Видеокарта у меня слабенькая, на борту. Так надо выяснить, в чем проблема. Дима, ты говоришь, что у тебя и тест из samples дает такой шлейф ? У меня этого примера нет, наверное он появился в fwh позже. А как у тебя с тестом testxbrw ? Эффект имеет место быть ? Можешь запустить этот пример для своего fwh и fwh 612 ?

Dima: Pasha пишет: А как у тебя с тестом testxbrw ? Точно так же :(

ММК: Dima пишет: В принципе есть один ход Да о чем ты говоришь?!! Это или машина или система, я на 95 винде такого не видел! Скачал какую-то Mr. Captor , так она даже не запустилась по семеркой. Хотел тебе "понавороченей" картинку сделать

Dima: OK , отдам клиенту , пусть он потестит и вынесет вердикт.

Pasha: Dima пишет: Pasha пишет: цитата: А как у тебя с тестом testxbrw ? Точно так же :( Дима, а выложи пример в виде exe с нужными дбф, который у тебя такой красивый шлейф дает. И prg теста можно. Я у себя его прогоню

Dima: Pasha http://files.mail.ru/B2KTHC Только базу Customer заполни чем то , в архиве она пустая

Dima: Опс. Базы http://files.mail.ru/CDAS4F

Pasha: У меня winxp sp2. Перетаскивание окна по бровсу выглядит так: 1. leftclick на заголовке окна 2. В процессе таскания окно не перерисовывается, а перерисовывается только его контур. Окно пока остается на месте, бровс тоже не перерисовывается. 3. Отпускаю мышку. Только после этого окно перерисовывается, заодно и бровс под ним. Шлейфа нет. У тебя окно и бровс под ним перерисовывается все время при движении мышки. В результате есть шлейф. То есть у меня при таскании окно с бровсом перерисовывается один раз, а у тебя - стотыщпицот раз, вот и получается медленно Что это за визуальный эффект windows ? Какая-то настройка ? Может убрать ее, и все дела ? Картинка: http://pics.qip.ru/002uxF-2001luA/

Dima: Pasha пишет: Что это за визуальный эффект windows ? Какая-то настройка ? Даже не знаю что за эффект. Сейчас покопаю. Спасибо !

Dima: Ага , стояла галка , Отображать содержимое окна при перетаскивании. Снял , шлейфа нет. Я проживу без этой галки а вот если у кого то она будет стоять..........то сделают мне дырку в голове :) PS Txbr3 отключил

Dima: Dima пишет: стояла галка , Отображать содержимое окна при перетаскивании Павел а поставь временно у себя эту галку , шлейф как и у меня будет ? :)

Pasha: Dima пишет: а вот если у кого то она будет стоять..........то сделают мне дырку в голове :) Дык за красоту надо платить.. вот пусть и платят, так и говори им А где эту галку хоть искать ?

Dima: Pasha пишет: А где эту галку хоть искать ? В оформлении -> эффекты

Dima: Теоретически нужно как то правильно изменить свойства диалога в программе что бы не было вот таких тормозов при включенной галке. Я уже писал выше , если в INIT диалога вызывать SETTRANSPARENT то в этом случае шлейф пропадает и все двигается очень даже хорошо , но это не выход конечно , так как если в диалоге живет бровс , то после SETTRANSPARENT он начинает жутко тормозить.

Pasha: Небольшой шлейф есть, заметно меньше чем у тебя. Но ты сделал пример с ado-access, а там выборка данных медленнее.

ММК: Pasha пишет: ado-access, а там выборка данных медленнее. Паша в FWH такая выборка если не быстрее то такая же. Вопрос в системе-есть сборки для ламеров; красивые заставочки , шлейф за мышкой , указатель полный писец... FWH использует системные вызовы, ну и результат налицо. Хотя я даже подумать не мог что у Димы настолько левая система. Извини , Дима, думал что ты настолько нахомутал в пр-ме. Такое бывает :))

ММК: Dima пишет: Ага , стояла галка Есть еще один ньюанс. Это рус.язык . Проблемы возникают при выгрузке , к примеру , в ексель. Т.е. вроде система нормальная, но рус-ция выполнена некоректно . Как с этим бороться я тебе писал. Это к тому что самое время тебе поставить семерку :)))

Dima: ММК пишет: Хотя я даже подумать не мог что у Димы настолько левая система Почему ты решил что у меня левая система ? Ни когда не ставил ни каких левых сборок , только официальные дистрибутивы + русский MUI ММК пишет: Извини , Дима, думал что ты настолько нахомутал в пр-ме. Нет это не так , у меня хорошие учителя ММК пишет: Это к тому что самое время тебе поставить семерку Поставить не проблема , только не пойму что мне эта семерка даст в отличие от XP , меня и XP вполне устраивает .

ММК: Dima пишет: только не пойму что мне эта семерка даст в отличие от XP , меня и XP вполне устраивает . Каюсь ( низко склонил голову ) корысти ради :( Дело в том что в этой системе есть своя "индивидуальность" . Хотелось бороться с этим не в одиночку...

Dima: ММК пишет: Все правильно - Saving and restoring the bitmap is painting the saved image one pixel off from the original position. This can be fixed. Это как то лечится ?! Достала эта проблема если честно. Отключил TXBR3 и дал поюзать клиенту. Поюзал он на 5 машинах ( на всех Windows XP ). Шлейф и тормоза при перемещении диалога (окна) по бровсу есть. Ему не понравилось. Понимаю что на форуме мало кто юзает FW , но вдруг есть у кого то решение. Нашел временное решение , устанавливая прозрачность родительского окна в котором живет бровс (меняя его SETLAYEREDWINDOWATTRIBUTES) при вызове диалога , странно но в этом случае нет ни каких тормозов при перемещениях диалога (окна) по бровсу. ММК Не пойму , ты закрываешь глаза на проблему или не желаешь ее увидеть ? :) Она ведь есть. Видео ты видел. Не стал бы я тут флуд разводить в многоэтажной теме , если бы не было проблемы. ММК пишет: Каюсь ( низко склонил голову ) корысти ради :( Дело в том что в этой системе есть своя "индивидуальность" . Хотелось бороться с этим не в одиночку... Чес слово , установлю семерку если решим проблему !

sashaBG: Попробуй с oBrw:lDontChange := .f. , когда теряет фокус правда ето из TSBROWSE Minigui , Но он же взаят из FWH

ММК: Dima пишет: Она ведь есть не сомневаюсь http://files.mail.ru/SX0JO5 Вот пример . Может статистика позволит найти причину. Смотрим для RDD В меню: Window -> RDD->ALL COLS получили окно с бровсом, теперь "накладывам" диалог с бросом Dialog ->RDD->Select Cols ну и двигаем

Dima: sashaBG пишет: Попробуй с oBrw:lDontChange := .f. Не увидел такого , в том числе Tsbrowse FWH Можешь выложить исходник Tsbrowse MiniGui ? ММК пишет: ну и двигаем Все по прежнему :( По ходу прога чудно падает , если все окошки развернуть на полный экран ( включая Window -> RDD->ALL COLS) и затем вызвать Dialog ->RDD->Select Cols

fil: Шлейф при таскании окна с бровсом у меня проявляется достаточно слабо(создается впечатле, что это зависит от типа окна по ком таскают) Есть, однако, еще такая фигня - ежели таскать диалог с бровсом и часть его загнать его за экран, то все строки броса стираются(кроме 3 первых) Для восстановления картинки приходится бровс рефрешить. Как с этим бороться? Видимо отлавливать Capture ?

sashaBG: Смотри в h_tbrowse.prg https://docs.google.com/leaf?id=0Bwyv76swZloxOTRkYjUzOGQtYTcwMi00YTdjLWI0MDktMGMxYjFmYWQwYjMy&sort=name&layout=list&num=50

ММК: fil пишет: Шлейф при таскании окна с бровсом у меня проявляется достаточно слабо(создается впечатле, что это зависит от типа окна по ком таскают) Есть, однако, еще такая фигня - ежели таскать диалог с бровсом и часть его загнать его за экран, то все строки броса стираются(кроме 3 первых) ну у меня его вообще нет(машина нормальная ) Вот сейчас сходил глянул на слабенькой. Виден шлейф , правда не такой , как в "кино" Если с бровса убрать градиент то строки вроде не стираются. Т.е. есть зависимость от машины. И от окон наверное. MDI не использую. Окно (диалог) фолдер

Pasha: sashaBG пишет: Смотри в h_tbrowse.prg Да толку то, это же совершенно разные классы - TSBROWSE и TXBROWSE Да и назначение у этого свойства другое: avoids user to change line with mouse or keyboard К тому же в TSBrowse для fwh этого свойства еще нет, по крайней мере в версии 8.0

ММК: fil пишет: создается впечатле, что это зависит от типа окна по ком таскают Да. На том же примере если запустить сначало Dialog , а потом "потаскать" по ним к приммеру фар, то видно что MDI перерысовывает гораздо "грубее" Очень наглядно

fil: А за экран, почему стирается часть бровса?

Dima: ММК пишет: MDI перерысовывает гораздо "грубее" у меня одинаково

ММК: Dima пишет: у меня одинаково http://files.mail.ru/0VCA6O А вот так?

Dima: ММК пишет: А вот так? Слишком маленький размер диалога что бы тестить , но все равно шлейф есть , при чем только в программах FWH

ММК: Dima пишет: но все равно шлейф есть , при чем только в программах FWH Если уж и на этом примере есть проблема , то можешь смело завязывать с FWH :)))

Dima: ММК Совет впечатляет.......

Dima: Dima пишет: устанавливая прозрачность родительского окна в котором живет бровс (меняя его SETLAYEREDWINDOWATTRIBUTES) при вызове диалога , странно но в этом случае нет ни каких тормозов при перемещениях диалога (окна) по бровсу ММК Как ты это сможешь прокомментировать ? Вероятно что то все таки сделать можно ;)

Pasha: Dima пишет: Dima пишет: цитата: устанавливая прозрачность родительского окна в котором живет бровс (меняя его SETLAYEREDWINDOWATTRIBUTES) при вызове диалога , странно но в этом случае нет ни каких тормозов при перемещениях диалога (окна) по бровсу ММК Как ты это сможешь прокомментировать ? Вероятно что то все таки сделать можно ;) Наверное, при этом windows вообще не посылает WM_PAINT этому контролу

Dima: Pasha пишет: Наверное, при этом windows вообще не посылает WM_PAINT этому контролу Вероятно так и есть , потому что ни каких тормозов и шлейфов нет и в помине. Возможно есть и какой то более цивилизованный подход , но он мне пока не по силам. Готов потестить другие варианты при котором windows не посылает WM_PAINT этому контролу

Dima: Pasha пишет: Наверное, при этом windows вообще не посылает WM_PAINT этому контролу Похоже он не посылает не что другое , вопрос что ??? Отключаем прорисовку (но это явно не то) #define WM_SETREDRAW 11 ownd:sendmsg(WM_SETREDRAW, 0, 0) Включаем снова ownd:sendmsg(WM_SETREDRAW, 1, 0)

Dima: 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 Похоже нужно еще усложнять......... Есть некоторые грабли. Сидим в бровсе. В этом же окне живет GET и TOOLBAR панель. Переходим в GET , бровс жив. Возвращаемся в бровс и жмем кнопку на панели TOOLBAR вызывая какой то диалог, бровс "Замерз" , все верно. Усложняем. Переходим в GET а из GET жмем ту же кнопку в TOOLBAR панели , бровс "Замерзает" только под диалогом. У бровса установлено obrw:blostfocus:={||DeleteObject( oBrw:hSaveScr ),oBrw:hSaveScr := WndBitMap( oBrw:hWnd )} Что то не то ........ Для наглядности в TXBR3 заменил DrawBitmap на ABPaint c уровнем прозрачности 120 Мы в GET Из бровса сразу жмем кнопку в ToolBar А вот тут находясь в GET жмем кнопку в Toolbar

Dima: Выкрутился :) В вызываемом диалоге бровсу делаем Refresh()

Dima: Прикол Открыл COMODO FIREWALL и поездил по нему другим окошком , следы и шлейф впечатляют. Тоже и в µTorrent если в нем "покататься" по панели кнопок :)

ММК: Dima пишет: Прикол FW разваливает все?!!!

Dima: ММК пишет: FW разваливает все?!!! К "приколу" FW не имеет отношения и потом на твоей Семерке этого просто не будет. Эффект хорошо видно в XP (есть еще такая системка )

Pasha: Dima пишет: Прикол Дык :) Кстати, тормозят (дают шлейф) все гуишные харборовские гриды во всех библиотеках. TSbrowse тормозит, мой грид тормозит И причина этого у всех одинакова. Основа грида - не стандартный контрол windows, а прорисовка всего - заголовков, области данных, футеров, линий и прочей красоты самостоятельно. Вот все это хозяйство и перерисовывается медленно. Я не считаю, что это какая-то проблема, которую надо решать. Я и не знал о ней ! За 10 с лишним лет никому не пришло в голову повозюкать чем-нибудь квадратным по моему гриду и пожаловаться мне на шлейф. А он есть, этот шлейф. И если бы не Дима, я так и пребывал бы в неведении. А так, скажите, зачем кататься окошком по гриду ? Разве что от скуки. Ну так это пустое, скука пройдет, скучающий начнет работать, и ему будет не до красивого шлейфа. Тем более этот шлейф легко убирается настройкой эффектов

ММК: Dima пишет: потом на твоей Семерке этого просто не будет. Эффект хорошо видно в XP (есть еще такая системка ) Будет , будет...



полная версия страницы