![]() |
Fehler TPageControl und TPanel!
Hallo,
ich habe hier einen blöden Fehler: Auf einem TPageControl liegt ein TPanel mit Anchors [akLeft,akTop,akRight,akBottom]. Dieses wird nur bei einer Bildschirmanzeige in Windows 10 von 100% korrekt dargestellt, bei 125 oder 150% ist es viel zu groß, größer als das Pagecontrol! Diese falsche Darstellung ändert sich auch nicht durch Ändern der Bildschirmeinstellung, erst nach Programmneustart bei 100% ist das Panel in der korrekten Größe! Kann das jemand nachstellen (Berlin 10.1 Update 2) und viel wichtiger, wie bekomme ich das korrigiert? Ciao Stefan |
AW: Fehler TPageControl und TPanel!
Ist das Problem in der 10er immer noch drin? Unfassbar.
Du musst dich um die Skalierung selbst kümmern. Setze die Property "Scaled" der Form auf False. Danach berechnest du den Skalierungsfaktor und machst selbst ein ScaleBy im OnCreate der Form. Für den Skalierungsfaktor habe ich mir eine kleine Funktion geschrieben:
Delphi-Quellcode:
Im OnCreate steht dann:
Function GetScaleFactor : Integer;
var Reg : TRegistry; begin Reg := TRegistry.Create(KEY_READ); try if Reg.OpenKeyReadOnly('\Control Panel\Desktop') then begin if Reg.ValueExists('LogPixels') then Result := Reg.ReadInteger('LogPixels') else Result := 96; end else begin Result := 96; end; Reg.CloseKey; Result := Round(Result * 100 / 96); finally Reg.Free; end; end;
Delphi-Quellcode:
Das hat bei mir bisher immer gut funktioniert.
ScaleBy(GetScaleFactor, 100);
|
AW: Fehler TPageControl und TPanel!
Danke, aber das kann doch alles gar nicht wahr sein, oder?
Auf dem Panel sitzt ein anderes Control (Align = alClient) und icvh habe einen halben Tag gesucht warum das keine Scrollbars anzeigt (warum auch wenn sein ParentPanel riesig ist...)! Ciao Stefan |
AW: Fehler TPageControl und TPanel!
Zitat:
|
AW: Fehler TPageControl und TPanel!
Zitat:
Scaled ist selbstverständlich auf False. |
AW: Fehler TPageControl und TPanel!
Muss ich daraus schlussfolgern, dass es weitere Controls gibt die solche Fehler haben?
Gibt es irgendwo eine Liste dieser betroffenen Kandidaten? Ich verwende gern Alignment, Anchors, Margins um Elemente bei Formgrößenänderungen entsprechend anzupassen, muss man dafür jetzt den gesamten Code selbst schreiben? Zur Entwurfszeit sieht man ja nicht dass die Skalierung nicht stimmt, da wird alles ordentlich dargestellt, wenn man die Form vergrößert / verkleinert, die Fehldarstellung kommt dann ja erst zur Laufzeit! Ciao Stefan |
AW: Fehler TPageControl und TPanel!
Ja, auch andere Controls haben da Probleme.
TButton und TEdit sind solche Kandidaten, wenn ich mich richtig erinnere. Aber dafür musst du keinen Extra-Code schreiben. Mit der oben beschriebenen Lösung wird das berücksichtigt. |
AW: Fehler TPageControl und TPanel!
@Jasocul: Deine Lösung scheint aber nur die Desktop-Auflösung zu berücksichtigen. LTE5 ist da korrekter - es muss natürlich spezifisch für den Monitor, auf dem die Form liegt, umgerechnet werden.
|
AW: Fehler TPageControl und TPanel!
Stimmt.
|
AW: Fehler TPageControl und TPanel!
Zitat:
100% od er 100 DPI? Ich habe deine Funktion eben an einem existieren Projekt mit 150% Skalierung Windows 7 getestet. Bei Übergabe von 100 für D wird vieles falsch dargestellt. Übergebe ich 96, die ursprüngliche Größe unter der ich entwickle, ist alles korrekt. Ich denke hier sollte man also eher die Original-DPI des Entwickler-Rechners angeben statt 100. Ich nutze da pro Formular eher
Delphi-Quellcode:
Und dann noch Anpassungen pro Control. Aufwändige Anwendungen sehen unter DPI >100 nämlich sonst schäbig aus.
uFormX.ScaleBy(Screen.PixelsPerInch, "Original-DPI");
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz