Unit Center; {**************************************************************************} {* Center by Daniel Thomas CIS 72301,2164 *} {* *} {* This code is hereby donated to the public domain. Enjoy. *} {* *} {* This unit contains a procedure, CenterPopup, which will center a *} {* Popup window (i.e. a dialog) in it's parent's window. If it won't *} {* fit inside the parent's window, then it will be centered on top of *} {* the parent. *} {* *} {* Also, if the dialog would be positioned off the screen, it is forced *} {* within the visible screen. *} {* *} {* There are a few descendant objects - tCenteredDialog and *} {* tCenteredInputDialog - that make using it a snap. Just replace an *} {* occurrance of pDialog with pCenteredDialog, and you've got a centered *} {* dialog! *} {**************************************************************************} Interface USES WinTypes,WinProcs,WObjects,StdDlgs; Type pInteger=^integer; pCenteredDialog=^tCenteredDialog; tCenteredDialog=object(tDialog) Procedure SetupWindow; virtual; end; pCenteredInputDialog=^tCenteredInputDialog; tCenteredInputDialog=object(tInputDialog) Procedure SetupWindow; virtual; end; Procedure CenterPopup(aPopup,aParent: hWnd); Implementation Procedure CenterPopup(aPopup,aParent: hWnd); var PopupR,ParentR : tRect; ScreenW,ScreenH : integer; x,y, PopupW,PopupH, ParentW,ParentH : word; procedure SetupValues(Wnd: hWnd; var R: tRect; var W,H : word); begin GetWindowRect(Wnd,R); W := R.Right-R.Left; H := R.Bottom-R.Top; end; {SetupValues} procedure SetupLocation(PopupSize,ScreenSize,ParentSize,ParentStart : word; var PopupStart: word); begin if PopupSize > ScreenSize then PopupStart := 0 else begin if PopupSize <= ParentSize then PopupStart := ParentStart+((ParentSize-PopupSize) div 2) else PopupStart := ParentStart-((PopupSize-ParentSize) div 2); if PopupStart > ScreenSize then PopupStart := 0 else if PopupStart+PopupSize > ScreenSize then PopupStart := ScreenSize-PopupSize; end; end; {SetupLocation} begin {CenterPopup} ScreenW := GetSystemMetrics(sm_CXScreen); ScreenH := GetSystemMetrics(sm_CYScreen); SetupValues(aPopup,PopupR,PopupW,PopupH); SetupValues(aParent,ParentR,ParentW,ParentH); SetupLocation(PopupW,ScreenW,ParentW,ParentR.Left,x); SetupLocation(PopupH,ScreenH,ParentH,ParentR.Top,y); MoveWindow(aPopup,x,y,PopupW,PopupH,false); end; {CenterPopup} Procedure tCenteredDialog.SetupWindow; begin tDialog.SetupWindow; CenterPopup(HWindow, Parent^.HWindow); end; {tAniOptionsDialog.SetupWindow} Procedure tCenteredInputDialog.SetupWindow; begin tInputDialog.SetupWindow; CenterPopup(HWindow, Parent^.HWindow); end; {tAniOptionsDialog.SetupWindow} end.