AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Formular für alle Monitore, Hilfe bitte

Ein Thema von KodeZwerg · begonnen am 26. Aug 2020 · letzter Beitrag vom 27. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 08:30
Guten morgen,

ich benötige ein Formular das sich auf allen Monitoren ausbreitet. Da dies komplettes Neuland für mich ist habe ich leider noch gar keinen Ansatz wie man so etwas bewerkstelligt.
Wenn jemand einen Tipp oder gar eine Lösung hat, bitte teile Dein Wissen mit mir
Vielen Dank für's Lesen!

Mein aktueller Quelltext der leider nur für den primären Monitor funktioniert:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  Self.Left := 0;
  Self.Top := 0;
  Self.ClientHeight := Screen.Height;
  Self.ClientWidth := Screen.Width;
end;
Ps: Dies ist ein Borderless Window
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 09:24
Wie soll das mit einem rechteckigen Formular gehen wenn ich meine Monitore z.B. so angeordnet habe?
screenshot-2020-08-26-092350.png

Mach doch einfach eins für jeden Monitor.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 09:56
Was Du suchst ist der Desktop, nicht der Screen.

Aber, wie Günther schon sagte: es gibt "unendlich" viele Kombinationen an möglichen Bildschirmen. Portrait und Landscape und Dutzende mögliche Auflösungen. Und selbst bei zwei identischen hat oft nur einer die Windows-Startleiste.

Wenn ich mich recht erinnere, hat TApplication ein array aller Screens, darüber lässt sich Plazierung der einzelnen Formulare (und vorige Regelung, wie viele es gibt) gut regeln.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 10:04
Ist doch ganz einfach und bei unterschíedlichen Bildschirmgrößen oder Bildschirmauflösungen garantiert unbrauchbar

Gehen wir davon aus, dass die Bildschirme nebeneinander stehen:
Delphi-Quellcode:
  Self.Width := 0;
  Self.Height := Screen.Heigth;
  for i := 0 to Screen.MonitorCount -1 do begin
    Self.Width := Self.Width + Screen.Monitors[i].Width;
    Self.Height := Min(Self.Height,Screen.Monitors[i].Height);
  end;
Sind sie übereinander angeordnet, müssen Width und Height vertauscht werden.
Bei 'ner aus mehreren Bildschirmen neben- und übereinander aufgebauten Fläche, klappt das natürlich nicht. Dann muss man wissen, wieviele Bildschirme über- bzw. nebeneinander angeordnet sind.

Beschreibe doch bitte einfach erstmal, wofür Du die Problemlösung suchst und von welchen Gegebenheiten wir bei der Lösungssuche ausgehen müssen.

Zahl der Bildschirme, Art der Bildschirme?

z. B. Aus Bildschirmen bestehende "Leinwand" von 8 * 4 Bildschirmen, wobei alle Bildschirme vom gleichen Hersteller und vom gleichen Typ sind.

Wild zusammengewürfeltes Sammelsorium von Bildschirmen.

Keine Ahnung, über wieviele Bildschirme der Softwarenutzer verfügt, welche Modelle und / oder wie sie angeordnet sind.

...
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
129 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 10:14
Hallo,

wie wäre es mit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Self.Left := 0;
   Self.Top := 0;
   Self.Height := Screen.DesktopHeight;
   Self.Width := Screen.DesktopWidth;
end;
Ich habe zwei Bildschirme nebeneinander stehen, und es funktioniert.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 10:35
Ich hab' den Bildschirm 1 rechts stehen (den mit der Taskbar) und Bildschirm 2 links. Passt das dann auch noch?

Die Admins haben den Bildschirm 1 in der Mitte, Bildschirm 2 steht links und Bildschirm 3 steht rechts.

Klappt das dann auch noch?

Die Lösungssuche läuft letztlich auf die gleiche Problematik hinaus, die auch hier beim ScreenShot zur Diskussion führte.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 10:44
Beschreibe doch bitte einfach erstmal, wofür Du die Problemlösung suchst und von welchen Gegebenheiten wir bei der Lösungssuche ausgehen müssen.
Sehr gerne, ich habe ein Programm entwickelt was bei Ausführung bereits alle Monitore "überdecken" soll, das erzeugte dynamische Formular ist halbtransparent und ermöglicht mir den Cursor zu ändern (Cross) damit man sich letzten Endes einen Teil des Bildschirms mit einem Rechteck was per Maus erzeugt wird, abfotographieren kann.

Da Bilder mehr sagen als Worte, im Anhang ist eine GIF Animation die ich als Vorlage für mein Projekt nahm.

(tut mir leid, ich musste es komprimieren da:
Die Datei, die du anhängen möchtest, ist zu groß. Die maximale Dateigröße für diesen Dateityp beträgt 32,0 KB. Deine Datei ist 148,4 KB groß)

Desweiteren ist mein momentaner Stand der Dinge in Binärform angehangen.
Angehängte Dateien
Dateityp: 7z RAPTURE_DEMO.7z (134,6 KB, 7x aufgerufen)
Dateityp: 7z RaptureReplica.7z (536,5 KB, 7x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
129 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 11:12
Hallo,
@Delphi.Narium

Ja, das funktioniert (zumindest hier bei mir).
Ich habe das mal folgendermaßen getestet:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Left:=Screen.DesktopLeft;
  Top:=Screen.DesktopTop;
  Height:=Screen.DesktopHeight;
  Width:=Screen.DesktopWidth;
  FormStyle:=fsStayOnTop;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Label1.Caption:='Left: ' + IntToStr(Left);
  Label2.Caption:='Top: ' + IntToStr(Top);
  Label3.Caption:='Height; ' + IntToStr(Height);
  Label4.Caption:='Width: ' + IntToStr(Width);
end;
HauptMonitor links: Left=0, Top=0, Height=1200, Width=3200
HauptMonitor rechts: Left= -1600, Top=0, Height=1200, Width=3200
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#9

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 11:23
@Kodezwerg
Da das Formular transparent ist, sieht man es ja auch nicht.

Damit wäre es doch wurscht, wenn es größer als alle Bildschirme ist. Mit der Maus kann man nur in dem Bereich navigieren, der sichtbar ist. (ok, nicht ganz, man kann die Maus auch aus dem Bildschirm rausschieben. Für den Fall würd' ich noch 'ne Action, 'nen ShortCut oder so einbauen, mit dem man den Cursor (ohne die Maus zu betätigen) in die Desktopmitte setzen kann, da weiß der User immer, wo die ist und kann sich von dort aus neu orientieren.)

Wäre es ein Ansatz in 'ner Schleife nach dem höchsten Bildschirm zu suchen und Self.Height auf den höchsten der gefundenen Werte zu setzen und desgleichen auch für die Breite:
Delphi-Quellcode:
  Self.Height := 0;
  for i := 0 to Screen.MonitorCount -1 do Self.Height := Max(Self.Height,Screen.Monitors[i].Height);
  Self.Width := 0;
  for i := 0 to Screen.MonitorCount -1 do Self.Width := Max(Self.Width,Screen.Monitors[i].Width);
Guck aml hier https://www.delphipraxis.net/53820-m...monitoren.html ob's weiterhilft.

Und dann mal mit der Suchmaschine Deiner Wahl: delphi screen.left multi monitor
Da scheint es noch etliches zu geben, was eventuell hilfreich sein könnte.

Wobei:

Die Idee von ghubi01, statt Self.Left, Self.Width ... Screen.DesktopLeft ... zu nehmen, erscheint mir die deutlich intelligentere Variante zu sein. Da nimmt einem wohl das Betriebsystem das ganze "Bildschirmanordnungsgewusel" ab.

Screen.DesktopLeft ist halt immer links, Screen.DesktopWidth ist immer die Breite.

Am Ende müsste das FormCreate von ghubi01 für die Problemlösung ausreichen.

@ghubi01
Danke für's testen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: Ein Formular für alle Monitore, Hilfe bitte

  Alt 26. Aug 2020, 11:25
Ist dein Fenster Vollbild, über dem Screen und vor der/den Taskleisten,
oder nur maximiert im "Arbeitsbereich" (WorkArea) ?

Drum gibt es auch mehrere Positionen auszulesen.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.DesktopRect // Alles und bei unterschiedlich großen oder verschobenen Screens inkl. der schwarzen nicht sichtbaren Bereiche
  Screen.Monitors[0].BoundsRect // der gesamte Screen
  Screen.Monitors[0].WorkareaRect // der Screen ohne Taskbar und ahnliche ToolBars

  Self.Monitor.BoundsRect // dieser Monitor ist jener, wo die Form ihren Mittelpunkt drauf hat
  Self.Monitor.WorkareaRect

  Self.Position := poDesktopCenter poScreenCenter poMainFormCenter poOwnerFormCenter ...
end;
Siehe das Bild vom schönen Günther.
Oben rechts und unten links gehört mit zum Desktop, auch wenn da nichts ist.
Bei Einem Fenster über Allem muß man auch aufpassen wo die Titelleiste hängt und ob rechts das [X] oder links das [Icon/Menü] außerhalb eines Bildschirms sind, denn Windows verschiebt gern die Fenster, damit das nicht passiert.


wie wäre es mit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Self.Left := 0;
   Self.Top := 0;
...
Ich habe zwei Bildschirme nebeneinander stehen, und es funktioniert.
Hmmmmmmm nein.

https://www.delphipraxis.net/205298-screenshot.html

Position 0:0

Bei mir geht es nicht, da der Hauptbildschirm rechts steht und nicht links. (0:0 ist in der Mitte)
Und der Linke eine zwar gleichgroße Auflösung hat, aber durch höhere DPI um ein viertel tiefer steht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2020 um 11:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz