From 78c3da20fa379487f9e69269df2c4dbb79006c32 Mon Sep 17 00:00:00 2001 From: bart <9132501-flyingsheep@users.noreply.gitlab.com> Date: Sat, 19 Sep 2015 14:22:00 +0000 Subject: [PATCH] LCL: TimePopupForm: keep the form in view when switchin to non-simple layout. git-svn-id: trunk@49851 - --- lcl/forms/timepopup.pas | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lcl/forms/timepopup.pas b/lcl/forms/timepopup.pas index 49ceccabdb..c4214fab86 100644 --- a/lcl/forms/timepopup.pas +++ b/lcl/forms/timepopup.pas @@ -40,10 +40,12 @@ type FClosed: Boolean; FOnReturnTime: TReturnTimeEvent; FSimpleLayout: Boolean; + FPopupOrigin: TPoint; procedure ActivateDoubleBuffered; procedure CalcGridHeights; function GetTime: TDateTime; procedure Initialize(const PopupOrigin: TPoint; ATime: TDateTime); + procedure KeepInView(const PopupOrigin: TPoint); procedure ReturnTime; procedure SetLayout(SimpleLayout: Boolean); procedure SetTime(ATime: TDateTime); @@ -76,6 +78,7 @@ begin if not SimpleLayout then NewForm.SetTime(ATime); //update the row and col in the grid; NewForm.Show; + NewForm.KeepInView(Position); end; procedure TTimePopupForm.SetTime(ATime: TDateTime); @@ -205,6 +208,7 @@ begin end; CalcGridHeights; FSimpleLayout := SimpleLayout; + KeepInView(FPopupOrigin); finally MinutesGrid.EndUpdate(True); end; @@ -245,6 +249,13 @@ begin end; procedure TTimePopupForm.Initialize(const PopupOrigin: TPoint; ATime: TDateTime); +begin + FPopupOrigin := PopupOrigin; + KeepInView(PopupOrigin); + SetTime(ATime); +end; + +procedure TTimePopupForm.KeepInView(const PopupOrigin: TPoint); var ABounds: TRect; begin @@ -257,7 +268,8 @@ begin Top := ABounds.Bottom - Height else Top := PopupOrigin.Y; - SetTime(ATime); + //store the fitting point, so the form won't move if it layout is changed back to simple + FPopupOrigin := Point(Left, Top); end; procedure TTimePopupForm.ReturnTime;