VCL Styles - Problem z odrysowaniem interfejsu

VCL Styles - Problem z odrysowaniem interfejsu
Pepe
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 minuty
  • 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:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12168
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:3 minuty
  • 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:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12168
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:3 minuty
  • 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:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12168
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:około 18 godzin
  • 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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)