In der Klasse TCustomForm habe ich etwas Code aufgespürt, wie die
VCL auf Veränderungen der Monitore reagiert:
Delphi-Quellcode:
for i := 0
to Screen.MonitorCount-1
do
TMonitor(Screen.FMonitors[i]).Free;
Screen.FMonitors.Clear;
// EnumDisplayMonitors ist ein Funktionszeiger in Unit MultiMon
EnumDisplayMonitors(0,
nil, @EnumMonitorsProc, LongInt(Screen.FMonitors));
Das ist natürlich sehr unfein, was da in
function TCustomForm.GetMonitor
gemacht wird.
Borland hätte der TScreen-Klasse eine "RefreshMonitors"-Methode spendieren sollen.
PS: Ahhh..es fehlt natürlich auch noch lokaler Code aus
Unit Forms:
Delphi-Quellcode:
function EnumMonitorsProc(hm: HMONITOR;
dc: HDC; r: PRect; Data: Pointer): Boolean;
stdcall;
var
L: TList;
M: TMonitor;
begin
L := TList(Data);
M := TMonitor.Create;
M.FHandle := hm;
M.FMonitorNum := L.Count;
L.Add(M);
Result := True;
end;