VCL Styles - Problem z odrysowaniem interfejsu

VCL Styles - Problem z odrysowaniem interfejsu
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:10 minut
  • Postów:496
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


edytowany 2x, ostatnio: Pepe
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Tuchów
  • Postów:12175
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:10 minut
  • Postów:496
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


edytowany 1x, ostatnio: Pepe
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Tuchów
  • Postów:12175
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:10 minut
  • Postów:496
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).


Pepe
Sprawdziłem to demo... rzeczywiście możliwości imponujące. Ale kontrolki są płatne co je eliminuje. Poza tym, staram się unikać zewnętrznych komponentów (jeśli tylko mogę). Ale przynajmniej pokazali, że można zrobić porządne kontrolki stylujące aplikacje... jakoś od zawsze mam wrażenie, że VCL Styles działają źle. Są w wiecznej fazie beta :P
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Tuchów
  • Postów:12175
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
robertz68
  • Rejestracja:ponad 18 lat
  • Ostatnio:7 minut
  • Lokalizacja:Zielona Góra
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.