Aqui eu uso a propriedade "Scaled" dos forms, o resto o delphi basicamente faz sozinho.
Se você utiliza devexpress, ela tem o conceito de estilos, esses estilos não são afetados pelo scaled, então ai eu fiz a escala deles a mão.
const
ScreenWidth: LongInt = 800;
....
if (Screen.Width <> ScreenWidth) then
begin
// aqui faz a escala de todos os componentes do form, o scaled precisa estar true
Self.ScaleBy(Screen.Width, ScreenWidth);
// aqui eu forço a escala para os estilos do devexpress, se você não utiliza não precisa
for I := ComponentCount - 1 downto 0 do
begin
if (Components[I] is TcxStyle) then
TcxStyle(Components[I]).Font.Size := Trunc(TcxStyle(Components[I]).Font.Size * (Screen.Width / ScreenWidth));
end;
end;