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?

War es hilfreich?

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.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top