![]() |
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 ![]() 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.
mit nur einem Monitor ist das gar nicht so einfach herauszufinden :-( Danke für die Antworten. MaBuSE |
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:
zur 4. Frage
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 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:
das ganze gilt für W2K und Matrox-Treiber.
+--------------------------+
|+-------+ Desktop | || | | || | +--------------+| || | | || || Moni2 | | Moni 1 || |+-------+ | || | | || | +--------------+| +--------------------------+ |
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:
Mach einfach mal einen Screenshot von so einer Konfiguration, und du wirst wissen was ich meine ;)
+----------+ +-----------+
| | | | | M1 | | M2 | | | | | +----------+ | | | | +-----------+ Zum Theme: ich hatte das gleiche "Problem" bei einem Screensaver, der alle Monitore fuellen sollte. Ich habs dann so geloest:
Delphi-Quellcode:
So, und was ist das? Tja...wenn ichs noch wuesste :mrgreen:
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 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 |
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ß |
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 |
Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
scheint wie ein Clipping-rect zu sein
|
Re: Multi Monitor Unterstützung - Was tun bei mehreren Monit
Zitat:
ich will auch 3 Monitore haben ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr. |
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 by Thomas Breitkreuz