Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fensterposition zurücksetzen (https://www.delphipraxis.net/203461-fensterposition-zuruecksetzen.html)

himitsu 22. Feb 2020 16:51

AW: Fensterposition zurücksetzen
 
In der VCL gibt es auch direkt TForm.Monitor für den Monitor wo die Form zum größten Teil drauf ist, (also der Monitor auf dem der Mittelpunkt der Form liegt)
aber im FMX nicht und in FMX.Forms gibt es nicht so eine Screen-Klasse, wie in VCL.Forms.

Gut, man kann natürlich problemlos via den APIs in Winapi.Windows selber das mit den Monitoren machen, aber natürlich nur im Windows.

haentschman 27. Feb 2020 10:05

AW: Fensterposition zurücksetzen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...:P

Meine neue Logic funktioniert nicht. :evil:

Die einzelnen Monitore haben nicht die erwarteten Größen. (siehe Bilder)
Kann jemand logisch erklären?

Danke...:wink:

TigerLilly 27. Feb 2020 10:12

AW: Fensterposition zurücksetzen
 
Die Koordinaten geben an, welchen Bereich des Desktops ein Monitor abdeckt.

himitsu 27. Feb 2020 10:13

AW: Fensterposition zurücksetzen
 
Hab jetzt nur in der VCL geguckt, da gibt es Delphi-Referenz durchsuchenTMonitor.MonitorNum? und .Primary für den Ersten.
Und die Reihenfolge in der Liste ist einfach entsprechend dem, wie MSDN-Library durchsuchenEnumDisplayMonitors das liefert.

[edit]
Nee, MonitorNum ist List.Count beim Einfügen, also das Gleiche. :oops:
Tja, dann ist Windows böse zu dir.

PS: https://docs.microsoft.com/de-de/win...-display-setup

haentschman 27. Feb 2020 10:24

AW: Fensterposition zurücksetzen
 
Zitat:

Und die Reihenfolge in der Liste ist einfach entsprechend dem, wie MSDN-Library durchsuchenEnumDisplayMonitors das liefert.
...das erklärt nicht die verschobene Reihenfolge und Größen.

Das sind die Werte die im Tool zu sehen sind.
Delphi-Quellcode:
procedure TfoMonitor.FormShow(Sender: TObject);
begin
  grpMonitor.Caption := 'Monitornummer ' + IntToStr(Monitor.MonitorNum + 1);
  lbl5.Caption := IntToStr(Monitor.Left);
  lbl6.Caption := IntToStr(Monitor.Top);
  lbl7.Caption := IntToStr(Monitor.Height);
  lbl8.Caption := IntToStr(Monitor.Width);
end;

himitsu 27. Feb 2020 10:29

AW: Fensterposition zurücksetzen
 
PS: Hatte meine Antwort oben nochmal revidiert.
Delphi übernimmt einfach die Reihenfolge von der WinAPI und GetMonitorInfo(Monitor.Handle, ...) liefert auch keine zusätzlichen Infos. (nur Primary und die Rects)
Wenn Windows das schon falsch rausgibt, dann kannst da über die TScreen-Klasse nichts weiter machen.

Falls du die Reihenfolge zur Laufzeit geändert hast, dann "sollte" Delphi eigenlich drauf reagieren und die Daten neu einlesen.

haentschman 27. Feb 2020 10:38

AW: Fensterposition zurücksetzen
 
Daß heist, daß man sich auf die Monitoranordnung, was aus dem System kommt, nicht verlassen kann. :evil: Darauf baut aber die Logik. :roll:

himitsu 27. Feb 2020 10:54

AW: Fensterposition zurücksetzen
 
Zumindestens nicht komplett.
Primary = 1, not Primary = >1 und die Positionen sollten ja stimmen.

bist nicht der Einzige:
https://www.vb-paradise.de/index.php...dentifizieren/
https://living-sun.com/c/132927-a-re...tors-edid.html
...

> Wie Sie vielleicht wissen, listet Windows dieAnzeigegeräte in der Reihenfolge, in der Sie sie verbinden (oder in der Tat überhaupt nicht auf einer Regel basieren?).

https://docs.microsoft.com/de-de/win...nelement-value
> Beachten Sie, dass sich einige Teile dieser Muster abhängig von der Installations Reihenfolge ändern können.

vielleicht noch
https://www.delphipraxis.net/184581-...-auslesen.html

haentschman 27. Feb 2020 11:03

AW: Fensterposition zurücksetzen
 
Zitat:

bis nicht der Einzige:
...da bin ich aber froh. :stupid:

Ich werde meine Logik anpassen. Ich werde mir die Monitore separat auslesen und die linke Seite passend setzen. :?

himitsu 27. Feb 2020 11:22

AW: Fensterposition zurücksetzen
 
Ich hab die Lösung:

Du löst das Monitor identifizieren vom OS aus und via OCR liest du dann die Numern vom Screenshot ab. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz