Wyświetlanie tekstów w gridzie w wysokiej rozdzielczości

0

W aplikacji używam kilku okien z gridami (TStringGrid lub TDrawGrid). W obu przypadkach teksty wypisuję za pomocą metod TextOut lub TextRect (TCanvas). Używam monitora 4K i Delphi XE3. Skalę w systemie mam ustawioną na 400%. Wszystkie okna mają wspólnego przodka więc są tworzone w podobny sposób, różnią się tylko gridami. Teksty na starych oknach są wyświetlane z rozdzielczością monitora (1 na obrazku). Niedawno utworzyłem nowe okno (2 na obrazku) i tekst w nim jest wyświetlany z inną rozdzielczością. Analizowałem ustawienia okien i gridów i nie potrafię znaleźć przyczyny. Może macie jakieś sugestie?

Używam również TSynEdit i tekst jest wyświetlany z niską rozdzielczością. Czy można sprawić aby również był wyświetlany z rozdzielczością monitora?

Dziękuję za wszelkie sugestie.

1

A dobrze masz ustawione właściwości Form.Scaled, czyli wszędzie na True?

1
furious programming napisał(a):

A dobrze masz ustawione właściwości Form.Scaled, czyli wszędzie na True?

Znalazłem winowajcę. Jeśli StringGrid ma ustawioną wartość DoubleBuffered=False, to teksty są wyświetlane z rodzielczością High DPI (w moim przypadku 4K). Parametry DoubleBuffered i Scaled formy nie mają wpływu.

3

Czyli wychodzi na to, że podwójne buforowanie wykorzystuje bitmapę-bufor w rozmiarze nie uwzględniającym skalowania, a więc dużo mniejszym niż fizyczny rozmiar kontrolki na ekranie. Bufor ma mniejszy rozmiar niż kontrolka, więc jej zawartość renderowana jest w niskiej rozdzielczości, a następnie bitmapa skalowana jest w górę — stąd pikseloza. Działa to trochę jak silniki do gier w stylu retro. 😉

Być może embarcadero jeszcze nie zaimplementowało wsparcia dla skalowania we wszystkich kontrolkach z VCL, a przynajmniej tego wsparcia brakuje w przypadku TStringGrid pod Windows.

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