From: Peter T. <pe...@us...> - 2002-11-28 10:50:24
|
Update of /cvsroot/jvcl/jvcl/source In directory sc8-pr-cvs1:/tmp/cvs-serv29264/source Modified Files: JvFormPlace.pas Log Message: Mantis #491: better multi monitor support Index: JvFormPlace.pas =================================================================== RCS file: /cvsroot/jvcl/jvcl/source/JvFormPlace.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** JvFormPlace.pas 20 Jul 2002 11:52:35 -0000 1.2 --- JvFormPlace.pas 28 Nov 2002 10:50:22 -0000 1.3 *************** *** 53,56 **** --- 53,58 ---- implementation + uses + MultiMon, JvMaxMin; resourcestring *************** *** 102,109 **** --- 104,171 ---- {**************************************************} + function MinMonitorLeft:integer; + var i:integer; + begin + Result := 0; + with Screen do + for i := 0 to MonitorCount - 1 do + Result := Min(Result,Monitors[i].Left); + end; + + function MaxMonitorRight:integer; + var i:integer; + begin + with Screen do + begin + Result := Width; + for i := 0 to MonitorCount - 1 do + Result := Max(Result,Monitors[i].Left + Monitors[i].Width); + end; + end; + + function MinMonitorTop:integer; + var i:integer; + begin + with Screen do + begin + Result := 0; + for i := 0 to MonitorCount - 1 do + Result := Min(Result,Monitors[i].Top); + end; + end; + + function MaxMonitorBottom:integer; + var i:integer; + begin + with Screen do + begin + Result := Height; + for i := 0 to MonitorCount - 1 do + Result := Max(Result,Monitors[i].Top + Monitors[i].Height); + end; + end; + + function MonitorFromPoint(APoint:TPoint):TMonitor; + {$IFNDEF COMPILER6_UP}var H:HMONITOR;i:integer;{$ENDIF} + begin + {$IFDEF COMPILER6_UP} + Result := Screen.MonitorFromPoint(APoint); + {$ELSE} + H := MultiMon.MonitorFromPoint(APoint,MONITOR_DEFAULTTOPRIMARY); + Result := nil; + for i := 0 to Screen.MonitorCount - 1 do + if Screen.Monitors[i].Handle = H then + begin + Result := Screen.Monitors[i]; + Exit; + end; + {$ENDIF} + end; + procedure TJvFormPlace.Rememb(Sender: TObject); var nam: string; fleft, ftop, fwidth, fheight: Integer; + M:TMonitor; begin Ftimer.Enabled := False; *************** *** 160,169 **** else fheight := Screen.Height + 1; ! if (fleft > Screen.Width) or (ftop > Screen.Height) or (fleft < 0) or (ftop < 0) then begin fwidth := FForm.Width; fheight := FForm.Height; ! fleft := (Screen.Width - fwidth) div 2; ! ftop := (Screen.Height - fheight) div 2; end; end; --- 222,241 ---- else fheight := Screen.Height + 1; ! if (fleft > MaxMonitorRight) or (ftop > MaxMonitorBottom) or ! (fleft < MinMonitorLeft) or (ftop < MinMonitorTop) then begin fwidth := FForm.Width; fheight := FForm.Height; ! M := MonitorFromPoint(Point(fleft,ftop)); ! if M <> nil then ! begin ! fleft := M.Left + (M.Width - fwidth) div 2; ! ftop := M.Top + (M.Height - fheight) div 2; ! end ! else ! begin ! fleft := (Screen.Width - fwidth) div 2; ! ftop := (Screen.Height - fheight) div 2; ! end; end; end; |