Centrare il tutto con il cambio di forma della form non è una cosa così semplice.
Se la tua Form in fase di disegno è simile alla dimensione a runtime, poi provare a settare le proprietà Anchor di tutti i componenti con tutte è quattro le proprietà attivate (top, left, bottom, right).
La proprietà Anchor insieme a BorderSpacing controllano il posizionamento a runtime dei componenti.
Io non uso, ne ho usato in realtà mai quelle proprietà per ragioni storiche (malfunzionamenti storici ...), invece a runtime uso la funzione ScaleBy della Form per scalare tutti i componenti.
//Non chiamarla nel costruttore della form ma ad esempio in un timer che parte 1 decimo di secondo dopo che la costruzione della form è terminata.
//Questo metodo scala tutti i componenti, cercando di mantenere la "leggibilità".
//A seconda che il tuo schermo a runtime sia più largo o più alto della Form a designt time, uso uno o l'altro delle due righe
Formxxx.Scaleby(Screen.Width, Formxxx.Width);
//Oppure
Formxxx.Scaleby(Screen.Height, Formxxx.Height);
EDIT: ehmmm, puoi sostituire fMonitor con 0 se usi un solo schermo. E' una proprietà che creo io a runtime per cercare il monitor principale o secondario o terzo, etc ......
EDIT2: ..... Lazarus non ha la proprietà Monitors.... quindi usa solo Screen... ... codice già corretto.
Ciao