У меня была проблема с центровкой формы после того, как во время выполнения программы я изменил некоторые ее размеры. poScreenCenter работает только в момент показа формы. Но если вы изменяете размеры во время выполнения, форма автоматически не центрируется.
Вариант 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]