Der Hinweis auf das SetFocusControl und die DPI Umrechnung ist ja durchaus hilfreich. Ohne einen reproduzierbaren Testfall ist es aber nahezu unmöglich den Fehler zu lokalisieren und zu beheben.
Jepp, das sehe ich ähnlich, daher habe ich auch noch nichts bei Emba gemeldet bisher. Da es in einem anderen Thread (nicht von mir) Thema war, bei dem es auch um die Kombination Rio+Win8.1 ging, hier noch der Hinweis, dass es der VMware Workstation Player in der Version 12 ist. Windows ist die Version 6.3 Build 9600.
Weitere Tests, die ich gerade noch gemacht habe: ändere ich in der VM die Skalierung von den aktuell 125% auf 150%, dann tritt der Effekt ebenfalls auf. Ändere ich die Skalierung auf 100%, dann tritt der Effekt nicht auf.
Ändere ich im Form das Scaled auf "false" (Danke an Edelfix für den Querverweis), dann tritt das Problem nicht mehr auf.
Und die Codestelle, die, wenn das Problem auftritt, letztlich verantwortlich ist, ist die folgende Funktion in
VCL.Forms:
Delphi-Quellcode:
procedure TCustomForm.ScaleNormalSize(M, D: Integer);
var
WindowPlacement: TWindowPlacement;
begin
if WindowState = wsMaximized
then
begin
WindowPlacement.length := SizeOf(WindowPlacement);
if GetWindowPlacement(
Handle, @WindowPlacement)
then
begin
WindowPlacement.rcNormalPosition.Right := WindowPlacement.rcNormalPosition.Left
+ MulDiv(WindowPlacement.rcNormalPosition.Width, M, D);
WindowPlacement.rcNormalPosition.Bottom := WindowPlacement.rcNormalPosition.Top
+ MulDiv(WindowPlacement.rcNormalPosition.Height, M, D);
SetWindowPlacement(
Handle, @WindowPlacement);
end;
end;
end;
Die letzte Zeile, also das SetWindowPlacement, ist ein
WinAPI-Aufruf, durch den dann letztlich das vorzeitige Activate vom Formular ausgelöst wird.
Soweit mein Stand der Forschung.