имеется главная форма, размер которой может меняться. надо что-бы форма "автоматом" центрировалась посреди экрана.
проперть отрабатывает только в момент запуска
- Код: Выделить всё
form_main.Position:=poScreenCenter;
на все остальные события не реагирует
- Код: Выделить всё
OnPaint()
OnResize()
OnShow()
пробовал "математику"
- Код: Выделить всё
form_main.Top := (Screen.WorkAreaRect.Height - form_main.Height) div 2;
form_main.Left:= (Screen.WorkAreaRect.Width - form_main.Width ) div 2;
form_main.Top := (Screen.DesktopRect.Height - form_main.Height) div 2;
form_main.Left:= (Screen.DesktopRect.Width - form_main.Width ) div 2;
// если будет находиться на 2м мониторе, то при перерисовки перенесется на 1й
form_main.Top := (Screen.Monitors[0].WorkareaRect.Height - form_main.Height) div 2;
form_main.Left:= (Screen.Monitors[0].WorkareaRect.Width - form_main.Width ) div 2;
form_main.Top := (Screen.Height - form_main.Height) div 2;
form_main.Left:= (Screen.Width - form_main.Width ) div 2;
// как-то корявинько
form_main.Top := (Screen.MonitorFromWindow().WorkareaRect.Height - form_main.Height) div 2;
form_main.Left:= (Screen.MonitorFromWindow().WorkareaRect.Width - form_main.Width ) div 2;
если юзать на основном мониторе, то проблем почти нет (не помню уже, что-то по мелочи бячит, но это по мелочи)
главное неудобство, что форму можно перенести на другой монитор и тогда на прорисовке она перенесется обратно на основной монитор
можно попробовать определить "текущий" монитор и использовать
- Код: Выделить всё
Screen.Monitors[]
но пока тоже не расковырял, как это сделать.
какие будут идеи?
спасибо