Ammesso che tu stia parlando di Windows ... potrebbe essere che lo stesso codice funzioni anche in Linux (anche se Wayland non aiuta).
Vedi l'immagine, sono due righe di codice ... ma funzionano solo in Delphi.
In Lazarus l'api di windows sembra non fare effetto ...
Qualcuno sicuramente più ferrato di me ti può dare una dritta.
Comunque essenzialmente si tratta di convertire le coordinate della Form in coordinate "schermo" poi sommando la posizione del pulsante (che è in relazione alla Form) e un Delta di 10 pixel si riposiziona la dialog.
Questo è il codice che và eseguito nell'evento OnShow della dialog (la si abbina a DesignTime.
rocedure TForm1.ColorDialog1Show(Sender: TObject);
Var F: TPoint;
begin
//La Form si trova sempre a 0,0 ---> F conterrà la posizione assoluta in pixel nello schermo
F := Form1.ClientToScreen(Point(0,0));
SetWindowPos(ColorDialog1.Handle, 0, F.X+Button1.Left, F.Y+Button1.Top+Button1.Height+10, 0, 0, 5);
//Il valore 5 finale fà ignorare l'analisi della dimensione e l'eventuale nuovo handle.
end;