Похоже, это довольно старый вопрос, в любом случае, вот единственное решение этой проблемы во Вселенной: используйте метод определения размеров Windows в старом стиле, используя API-интерфейсы WM_SIZE и WM_SIZING, это непогрешимый и будет работать в каждой Windows узнаю.
Конечно, это означает, что вы должны использовать главным образом GetClientRect () для определения ширины и высоты, а затем изменять размеры элементов управления на основе таких значений, что может показаться попыткой зажечь космический корабль, но это лучше.
В противном случае вы можете сделать что-то более практичное и быстрое в процедуре изменения размера, например:
Control1.Left := Control2.Left + (buttonControl.Width div 2) - (buttonControl3.Width div 2);
//for example widths
Control4.Width := (Control.Width * 4) + (Control.Left * 8) + 54 ;
Я делаю такого рода кодирование и функции только во всех Windows, независимо от того, какая версия будет.
Вам нужны только некоторые значения в разрешении экрана для справки, делающей что-то вроде этого:
iCXSCREEN := GetSystemMetrics(SM_CXSCREEN);
iCYSCREEN := GetSystemMetrics(SM_CYSCREEN);
if ((iCXSCREEN = 1280) and (iCYSCREEN = 720)) or ((iCXSCREEN = 1280) and (iCYSCREEN = 700)) or ((iCXSCREEN = 1280) and (iCYSCREEN = 600)) then begin
// blah blah
end;
Надежда помогает кому-то еще!
Ура!