Jup. Der Wert wird somit nur einmal via Windows-API-Call ausgelesen und intern gespeichert. Das Problem dabei ist, dass wenn während der Laufzeit des Programms sich die Anzahl der Monitore ändert, der Wert falsch ist und falsch bleibt.
Hab hier totalen Käse geschrieben. Die Zeile mit der Windows-
API-Aufruf ist nur eine Fallback-Methode, wenn beim Konstrutor von TScreen das hier wohl nicht geklappt hat:
Delphi-Quellcode:
{$IF DEFINED(CLR)}
EnumDisplayMonitors(0, nil, TMonitorEnumerator.Create(FMonitors).FEnumProc, 0);
{$ELSE}
EnumDisplayMonitors(0, nil, @EnumMonitorsProc, LongInt(FMonitors));
{$IFEND}
FMonitors ist vom Typ
TList und beinhaltet TMonitor-Instanzen. TMonitorEnumerator ist eine "Hilfs"-Klasse mit einer Callback-Methode, die von der Windows-
API aufgerufen wird, eine TMonitor-Instanz erzeugt und diese in FMonitors wirft.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)