Wie kann ich die nutzbaren Koordinaten des Bildschirms in Delphi Get
Frage
Mit Screen.DesktopHeight und Screen.DesktopWidth, kann ich die Größe des „virtuellen“ Desktop erhalten und ich glaube, dass für einen oder mehrere Monitore funktioniert.
ich speichern Sie die Position (oben und links) und Größe (Höhe und Breite) von meiner Anwendung in die Registrierung, wenn es geschlossen wird. Wenn sie sich öffnet, möchte ich, damit es vollständig sichtbar ist, da es außerhalb des sichtbaren Bereichs teilweise verschoben wurden, oder die Bildschirmgröße beispielsweise über Bildschirmeinstellungen oder das Entfernen eines Monitors verändert haben.
Das kann ich es im Grunde mit diesem Code:
if MyForm.Width > screen.DesktopWidth then
MyForm.Width := screen.DesktopWidth;
if MyForm.Height > screen.DesktopHeight then
MyForm.Height := screen.DesktopHeight;
if (MyForm.Left + MyForm.Width) > screen.DesktopWidth then
MyForm.Left := screen.DesktopWidth - MyForm.Width;
if MyForm.Left < 0 then MyForm.Left := 0;
if (MyForm.Top + LogoAppForm.Height) > screen.DesktopHeight then
MyForm.Top := screen.DesktopHeight - LogoAppForm.Height;
if MyForm.Top < 0 then MyFormTop := 0;
Das funktioniert gut, außer es berücksichtigt nicht nehmen Sie die Taskleiste, die in der Regel (aber nicht immer) am unteren Rand des Desktops. Also, wenn die Taskleiste in der Art und Weise meines Anwendungsfensters ist, wird meine Anwendung verdeckt.
Wie kann ich die verwendbare Position und Größe Einstellungen des Bildschirms erhalten, die die Position der Taskleiste ausschließen?
Lösung
Ich bin mir nicht sicher, dass Windows wirklich so funktioniert, Sie denken, es tut - ich mehrere Monitore haben, aber sie haben nicht die gleiche Höhe haben - so mein Desktop nicht eine einheitliche Höhe über alle Monitore hat
Was ich tue, ist Screen.MonitorCount und die Screen.Monitors Array zu verwenden, herauszufinden, welcher Monitor größte Teil des Fensters enthält und dann ein geeignetes Rechteck auf diesem Bildschirm finden. Die WorkareaRect Eigenschaft TMonitor gibt Ihnen die Grenzen des Arbeitsbereichs auf einem bestimmten Monitor, der alle Taskleisten oder Symbolleisten ausschließt.
Andere Tipps
Sie sollten Screen.WorkArea * Eigenschaften verwenden:
Screen.WorkAreaRect
Screen.WorkAreaHeight
Screen.WorkAreaLeft
Screen.WorkAreaTop
Screen.WorkAreaWidth
oder
Screen.Monitors[I].WorkareaRect
Um den Arbeitsbereich für das aktuelle Formular zu bestimmen, verwenden Monitor.WorkareaRect. z.
BoundsRect := Monitor.WorkareaRect;
, um die Formulargröße auf den maximalen Bereich zu setzen, ohne es zu maximieren.
Sie sollten auch ein href Blick auf die <= "http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/delphivclwin32/Forms_TCustomForm_MakeFullyVisible.html" rel = "nofollow noreferrer" > TCustomForm.MakeFullyVisible Methode.
Von D2006 Hilfe:
„Makefullyvisible prüft, ob das Formular vollständig auf dem angegebenen Monitor paßt. Wenn nicht, es repositioniert die Form, so dass sie paßt, wenn möglich.“