Mit dem Bildschirm arbeiten
Nach oben zu Anwendungsverhalten steuern
In jedem neuen Projekt wird automatisch eine globale Variable namens Screen mit dem Typ TScreen erstellt. Screen kapselt den Status des Bildschirms, auf dem die Anwendung angezeigt wird. Von Screen durchgeführte, allgemeine Aufgaben:
- Verwalten der Liste und Parameter von mehreren Bildschirmen, auf die die Anwendung zugreifen kann.
- Die Größe des Fensters, in dem die Anwendung ausgeführt wird.
- Eine Liste der für den Bildschirm verfügbaren Schriften.
- Das Aussehen des Cursors.
Wenn Ihre VCL-Anwendung auf mehreren Monitoren ausgeführt wird, verwaltet die VCL das Layout der Benutzeroberfläche der Anwendung auf mehreren Monitoren. Beispielsweise werden Menüs, Dialogfelder und andere Popup-Steuerelemente auf demselben Monitor wie das übergeordnete Formular geöffnet. Mit der Variable Screen rufen Sie eine Liste der Monitore und deren Abmessungen ab. Die Eigenschaft Monitors ermöglicht den Zugriff auf alle Monitore, aus denen sich der Desktop zusammensetzt, und MonitorCount gibt die Anzahl der Monitore zurück. Alle Koordinaten sind relativ zum primären Monitor. Sie können beispielsweise die folgenden Informationen ermitteln:
procedure TForm2.Button1Click(Sender: TObject);
var
I : integer;
ScreenCount : integer;
P: TPoint;
begin
Memo1.Clear;
ScreenCount := Screen.MonitorCount;
P := Mouse.CursorPos;
Memo1.Lines.Add('Monitor number: ' + IntToStr(ScreenCount) );
for I := 0 to ScreenCount-1 do begin
Memo1.Lines.Add('Screen.Width: ' + IntToStr(Screen.Width));
Memo1.Lines.Add('Monitor: '+IntToStr(Screen.Monitors[I].MonitorNum) );
Memo1.Lines.Add('Top: '+IntToStr(Screen.Monitors[I].Top) );
Memo1.Lines.Add('Left: '+IntToStr(Screen.Monitors[I].Left) );
Memo1.Lines.Add('Width: '+IntToStr(Screen.Monitors[I].Width) );
Memo1.Lines.Add('Height: '+IntToStr(Screen.Monitors[I].Height) );
Memo1.Lines.Add('MonitorFromRect(mdNearest): '
+ IntToStr( (Screen.MonitorFromRect(
TRect.Create(P,100,100), mdNearest)).MonitorNum) );
Memo1.Lines.Add( 'Mouse.CursorPos: ' + IntToStr(P.X)
+ ' ' + IntToStr(P.Y) );
end;
end;