Вариант 1
Я использую данный код при создании формы (событие FormCreate), но, может быть, стоит попробовать поместить его в обработчик события OnPaint, который вызывается при каждом изменении размера формы?
Form1.Left := (Screen.Width div 2) - (Form.Width div 2);Form1.Top := (Screen.Height div 2) - (Form.Height div 2); |
Вариант 2
Если вы используете SetBounds, форма не будет перерисована дважды (один раз при изменении горизонтального размера, второй - вертикального, если это происходит одновременно). Попробуйте:
|
procedure CenterForm(AForm:TForm); var ALeft,ATop:Integer; begin ALeft := (Screen.Width - AForm.Width) div 2;ATop := (Screen.Height - AForm.Height) div 2;AForm.SetBounds(ALeft, ATop, AForm.Widht, AForm.Height);end; |
Вариант 3
Procedure CenterForm(aForm: TForm); Begin aform.left := (screen.width - aform.width) shr 1;aform.top := (screen.height - aform.height) shr 1;End; |
[000105]