VCL Styles - Problem z odrysowaniem interfejsu

0

Hej,
Mam pytanie czy można jakoś zoptymalizować działanie aplikacji z ustawionym stylem VCL Styles (Carbon w moim przypadku).
Otóż, gdy aplikacja używa domyślnego stylu Windows (VCL Styles są wyłączone) to interfejs działa płynnie i wydajnie (przy dużej ilości kontrolek też widać jak są odrysowywane, ale minimalnie). Jeśli włączę używanie VCL Styles to wyraźnie widać wolniejsze rysowanie interfejsu.

Proszę sprawdzić o czym mówię na przykładowym filmie (1.5MB): http://www.meggamusic.co.uk/shup/1566217015/VCL_STYLES.mp4

Jak widać, w normalnym trybie wszystko śmiga (kolory są trochę wyblakłe, ale to wina Active Presentera, aplikacji do nagrywania pulpitu). Przełączenie na VCL Styles wyraźnie powoduje spadek wydajności renderowania interfejsu (zwłaszcza jak jest nawalone dużo kontrolek - patrz zakładka "Pasek Przycisków").

Jak można się tego pozbyć? Czy istnieje prosty sposób na uniknięcie tego typu wizualnej masakry?

-Pawel

0

Możesz podesłać testowy program do sprawdzenia go lokalnie?

Pytam, dlatego że sam zauważyłem problem związany z efektywnością renderowania interfejsu, ale nie dla okien ostylowanych, a dla wszystkich okien i kontrolek w Win10 dla natywnego schematu. Program nad którym obecnie pracuję ma główne okno z dużą liczbą kontrolek rozmieszczonych w zakładkach i podczas przełączania pomiędzy zakładkami widać powolne rysowanie przycisków. Nawet blokowanie/odblokowywanie zwykłego przycisku zamula. Tego problemu nie ma ani w Win7, ani nawet w WinXP (choć sprzęt na którym ten system stoi ma 12 lat).

Okno z ustawionym własnym stylem i tak będzie renderowane wolniej, ale jednocześnie podejrzewam, że na innych systemach takiej zamuły nie będzie. Z tego co zauważyłem, Win10 ma skopany interfejs i renderowany jest najwolniej ze wszystkich testowanych przeze mnie systemów, choć jest najmniej skomplikowany wizualnie. Ale aby to potwierdzić, przydałaby się demówka.

0

Wydaje mi się, że to wynika z VCL Styles, które są w mojej opinii zabugowane i napisane po łebkach (ale nie mam też dużej wiedzy więc nie wypowiadam się autorytarnie). Rodrigo Ruz stworzył nawet cały pakiet poprawek (https://theroadtodelphi.com/2019/03/27/vcl-styles-utils-new-version-released/), ale NIE używam go (tyko to co oferuje środowisko Delphi).

Aplikacja, którą pokazałem na filmie to tylko przykład - mam tak z każdą inną, którą zbudowałem przy użyciu Delphi.
Zasyłam demo (to aplikacja z projektu TC UP):
http://www.meggamusic.co.uk/shup/1566223730/TCUPNew.zip

-Pawel

0
Pepe napisał(a):

Wydaje mi się, że to wynika z VCL Styles, które są w mojej opinii zabugowane i napisane po łebkach (ale nie mam też dużej wiedzy więc nie wypowiadam się autorytarnie).

Nie używam Delphi, więc w tej kwestii się nie wypowiem – nie wiem jak wyglądają źródła biblioteki stylów. W każdym razie ten program działa u mnie pod WinXP dokładnie tak samo wolno co u Ciebie – zakładka Button Bar pojawia się w sposób animowany, dobre 300ms.

Kolejnym problemem jest zmiana stanu komponentów. W zakładce Button Bar zaznaczenie pierwszego checkboxa (o treści Use button bar with […]) powoduje odblokowanie wszystkich przycisków niżej jego. Zmiana stanu zablokowania wygląda tragicznie – nie dość że trwa ze 400ms dla całej zawartości zakładki, to w dodatku fizyczne odmalowanie komponentów wykonywane jest wielokrotnie. Najpierw checkboxy renderowane są zgodnie ze schematem systemu (u mnie białe z zielonym tickiem), a następnie kolejny raz już jako ostylowane (czyli czarne). Ogólny efekt jest katastrofalny, nie do przyjęcia.

Jeśli nie masz możliwości włączenia dodatkowego buforowania to wątpię aby dało się coś z tym zrobić.


Sprawdziłem z ciekawości czy tak samo zamula biblioteka Alpha Controls. No i nie zamula – działa o niebo lepiej, pomimo tego, że oprócz stylowania okien, wspiera także różne efekty przejść i animacje. Jeśli chcesz to pobierz AlphaControls mega demo i sam zobacz.

0

Niestety, nie wygląda to dobrze. Dlatego założyłem ten wątek... a przecież ta strona opcji nic nie robi, tylko zmienia stan kontrolek (stan enabled na disabled i checked na true lub false).
Oczywiście, istnieje szansa, że coś popsułem, ale problem jest taki, że nie miałem szansy! Po prostu te kontrolki tak się zachowują przy włączonych stylach VCL...

Ps: Sprawdzę te twoją bibliotekę.
Ps2: Dziwne, że ten program zadziałał na Win XP (ja operuje tylko na Win7 i 10).

1
Pepe napisał(a):

Oczywiście, istnieje szansa, że coś popsułem, ale problem jest taki, że nie miałem szansy! Po prostu te kontrolki tak się zachowują przy włączonych stylach VCL...

No dokładnie.

Ps2: Dziwne, że ten program zadziałał na Win XP (ja operuje tylko na Win7 i 10).

Jeśli ten program nie używa funkcji z systemowego API, które zostały wprowadzone w późniejszych wersjach systemu, to nie ma prawa nie działać. Tym bardziej że Delphi nie jest zależne od zewnętrnych frameworków, takich jak .NET.

I tak samo to wygląda w przypadku Lazarusa (jeśli chodzi o kompilator i bibliotekę komponentów), tyle że ten jest kompatybilny z całą linią NT, nie tylko z samym WinXP.

0

mam to samo, mam formę a na niej 150 komponentów (chekboxy, edity) i pojawienie się ich chwilę trwa (o dziwo pojawiają się od dołu?). Chętnie poznałbym sposób na szybsze obrysowywanie kontrolek. Acha. Nie potrzeba żadnego kodu, samo rysowanie komponentów tyle trwa. System Windows 10.

1 użytkowników online, w tym zalogowanych: 0, gości: 1