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

Тормозок

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

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

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 ) второй параметр можно усиливать или уменьшать эффект



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