Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Multi Monitor Unterstützung - Was tun bei mehreren Monitoren (https://www.delphipraxis.net/53820-multi-monitor-unterstuetzung-tun-bei-mehreren-monitoren.html)

MaBuSE 23. Sep 2005 06:57


Multi Monitor Unterstützung - Was tun bei mehreren Monitoren
 
derpepe schrieb in http://www.delphipraxis.net/internal_redirect.php?p=431916#431916
an den Autor:
Das Proggi füllt nicht den gesamten Desktop, sondern immer nur den aktuellen Screen :-(
Bitte änder das doch noch.


Ich würde das ja gerne in bounce einbauen, aber ...

Dazu habe ich mal eine Frage:

Es gibt das Screen: TScreen Objekt. Hier kann ich erfahren welche Width und Height der Bildschirm hat.
(Für mich als Einbildschirm-Besitzer war das bisher ausreichend.)

Ich kann wohl mit Screen.DesktopWidth und Screen.DesktopHeight die Größe des gesammten Desktops erfahren.
Mit Screen.DesktopLeft und Screen.DesktopTop kann ich die linke obere Ecke relativ zum Primary Monitor des Desktop ermitteln.
  • Habe ich folgendes richtig verstanden?
    Beisp.
    2 Bildschirme á 800x600 -> Screen.DesktopWidth = 1600 und Screen.DesktopHeight = 600

    1. Bildschirm = primary -> Screen.DesktopLeft = 0 und Screen.DesktopTop = 0
    mit Form1.Left := 500; bin ich auf dem 1. Bildschirm (primary)
    mit Form1.Left := 1000; bin ich auf dem 2. Bildschirm

    2. Bildschirm = primary -> Screen.DesktopLeft = -800 und Screen.DesktopTop = 0
    mit Form1.Left := -500; bin ich auf dem 1. Bildschirm
    mit Form1.Left := 500; bin ich auf dem 2. Bildschirm (primary)
  • Müssen alle Bildschirme die gleiche Auflösung haben?
  • Wie verhält sich das mit 1. Monitor = 800x600, 2. Monitor (primary) = 1280x1024 ?
    Ist Screen.DesktopWidth dann 2080 und Screen.DesktopHeight = 1624 ?
  • Wie erkenne ich wie die Monitore angeordnet sind?
    Screen.MonitorCount = 4
    Screen.Monitor[i].Width bzw. Height

    Die 4 Monitore können 2 oben 2 unten oder alle 4 in einer Reihe angeordnet sein.
  • Wird ein TV Ausgang auch angezeigt? (als Teil vom Desktop oder "nur" als weiterer Monitor)
  • Wie teste ich "Multi-Monitor" Funktionalität, wenn ich nur einen Monitor habe ;-)
    Gibt es sowas wie virtuelle Monitore, die frei konfigurierbar sind? (Anordnung und Auflösung)
  • Gibts zu dem Thema ein Tutorial oder so?
Es gibt so viele Fragen aber
mit nur einem Monitor ist das gar nicht so einfach herauszufinden :-(

Danke für die Antworten.
MaBuSE

Leuselator 23. Sep 2005 07:59

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
zur 2.+3. Frage: Nein, die Monis können individuelle Auflösungen haben, allerdings hat der Desktop dann eine Größe, die dem mehrfachen der größten Moniauflösung entspricht. Zu erkennen ist das, wenn man einen Screenshot macht - die von den Monis mit geringerer Auflösung nicht abgedeckten Bereiche erscheinen schwarz.
Beispiel:
Delphi-Quellcode:
wenn Moni1 der Primäre ist und Moni2 rechts davon, beide an oberer Kante ausgerichtet:
Moni 1 : 1280x1024 Left:   0 Top: 0 Right: 1279 Bottom: 1023
Moni 2 : 1600x1200 Left: 1280 Top: 0 Right: 2879 Bottom: 1199
Desktop: 2880x1200 Left:   0 Top: 0 Right: 2879 Bottom: 1199

wenn Moni2 der Primäre ist und Moni1 links davon, beide an unterer Kante ausgerichtet:
Moni 1 : 1280x1024 Left:-1280 Top:176 Right:  -1 Bottom: 1199
Moni 2 : 1600x1200 Left:   0 Top: 0 Right: 1279 Bottom: 1199
Desktop: 3200x1200 Left:-1280 Top: 0 Right: 1279 Bottom: 1199
zur 4. Frage
Es gibt auch eine diagonale oder L-förmige Anordnung (macht aber wenig Sinn).
Die Desktopgröße definiert sich immer aus der Differenz aus den extremen (linkester Monirand zu rechtestem, oberster Monirand zu unterstem), der Primärbildschirm (der wo die Taskleiste sitzt) definiert dabei immer mit seiner linken oberen Ecke den Ursprung des Koordinatensystems (Left:0 Top: 0).
Delphi-Quellcode:
+--------------------------+
|+-------+   Desktop      |
||       |                 |
||       | +--------------+|
||       | |              ||
|| Moni2 | |   Moni 1     ||
|+-------+ |              ||
|          |              ||
|          +--------------+|
+--------------------------+
das ganze gilt für W2K und Matrox-Treiber.

alcaeus 23. Sep 2005 08:26

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
Moin Leuselator,

nur teilweise richtig. Wenn ich auf einem Monitor Pivot-Mode einschalte, hab ich folgenden Desktop:
Code:
+----------+ +-----------+
|          | |           |
|   M1     | |    M2     |
|          | |           |
+----------+ |           |
             |           |
             +-----------+
Mach einfach mal einen Screenshot von so einer Konfiguration, und du wirst wissen was ich meine ;)

Zum Theme: ich hatte das gleiche "Problem" bei einem Screensaver, der alle Monitore fuellen sollte. Ich habs dann so geloest:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var
   MinLeft, MinTop: Integer;
   TotalWidth, TotalHeight: Integer;
   i, j: Integer;
   PaintBoxStartPoint: TPoint;
begin
   Self.PaintBoxList := TPaintBoxList.Create(True);
   Self.BorderStyle := bsNone;
   Self.FormStyle := fsStayOnTop;
   Self.MonitorCount := Screen.MonitorCount;

   MinLeft := 0;
   MinTop := 0;
   TotalWidth := 0;
   TotalHeight := 0;
   for i := 0 to Self.MonitorCount-1 do
   begin
      MinLeft := Min(MinLeft, Screen.Monitors[i].Left);
      MinTop := Min(MinTop, Screen.Monitors[i].Top);
      TotalWidth := Max(TotalWidth, Screen.Monitors[i].Left + Screen.Monitors[i].Width);
      TotalHeight := Max(TotalHeight, Screen.Monitors[i].Top + Screen.Monitors[i].Height);
   end; //   for i := 0 to Self.MonitorCount-1 do
   Self.Top := MinTop;
   Self.Left := MinLeft;
   Self.Height := TotalHeight;
   Self.Width := TotalWidth;
   for i := 0 to Self.MonitorCount-1 do
   begin
      PaintBoxStartPoint := ScreenToClient(Point(Screen.Monitors[i].Left, Screen.Monitors[i].Top));
      with PaintBoxList[PaintBoxList.Add(TPaintBox.Create(Self))] do
      begin
         Left := PaintBoxStartPoint.X;
         Top := PaintBoxStartPoint.Y;
         Width := Screen.Monitors[i].Width;
         Height := Screen.Monitors[i].Height;
         Parent := Self;
         Tag := i;
         Visible := True;
         OnPaint := PaintBoxPaint;
         OnClick := FormClick;
      with PaintBoxList[PaintBoxList.Add(TPaintBox.Create(Self))] do
   end; //   for i := 0 to Self.MonitorCount-1 do
So, und was ist das? Tja...wenn ichs noch wuesste :mrgreen:
Ne, im Ernst: Das Programm vergroessert sich auf den extremsten Desktop, und erstellt dann eine PaintBox fuer jeden Monitor, genau mit den entsprechenden Koordinaten. Ich weiss nicht inwiefern dir das nuetzlich ist, aber wer weiss :zwinker:

Greetz
alcaeus

Leuselator 23. Sep 2005 08:33

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
Liste der Anhänge anzeigen (Anzahl: 2)
versteh nicht ganz, was Du meinst - habe drei Monis-alle auf Pivot und es verhält sich genau so, wie von mir oben beschrieben.
Gruß

alcaeus 23. Sep 2005 09:14

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
Joa, in den schwarzen bereich kannst du afair nicht reinzeichnen, das meinte ich. Es sieht auf Screenshots zwar so aus, aber die effektive Zeichenflaeche ist (jedenfalls bei mir) nicht so gross wie die maximalen Ausmessungen der Monitore.

Greetz
alcaeus

Leuselator 23. Sep 2005 09:54

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
scheint wie ein Clipping-rect zu sein

MaBuSE 23. Sep 2005 10:12

Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
 
Zitat:

Zitat von Leuselator
scheint wie ein Clipping-rect zu sein

Danke Jungs,
ich will auch 3 Monitore haben ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 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