Seite 2 von 2
Re: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 01:43
von tft
Hallo,
mit der Desktop Lib lässt sich kein Fenster expliziet an einen Desktop festmachen. Auch lässt sich nicht herausfinden welches Fenster sich auf welchem Desktop befindet.
Hier nochmal meinen Dank an Fabio und Ernst für die ausführliche Beschreibung der Problematik. Das werde ich mir nicht antun
Zur Info an diejenigen die es Interessiert in der kurz Fassung. Seit Windows xp werden mullti Desktop Anwendungen sehr unterschiedlich vom System unterstützt. Daher ist die Desktop Lib auch so rudimentär. Fenster lassen sich beliebig verschieben und könne auch negative offsets vertragen. Die Zuordnung geschied über eine Berechnung der möglichen X Offsets je nach Auflösung der einzelnen Monitore. Bei einem 3 Fach FullHD Setup ist es einfach, X=0 ist der Center Bildschirm, X=-1980 ist der linke Bildschirm und grösser als 1980 ist der rechte. Es können aber je nach Grifikkarte und alter des System immense Probleme auftauchen. Daher wurde mir geraten die simpelste Möglichkeit zu verwenden und die Fenster mit MoveWindow_() zu verschieben und sie nicht an einen Desktop anzubinden.
Re: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 02:38
von Derren
X=0 wird durch die Reihenfolge in der Systemsteuerung festgelegt. Habe hier kein Multimonitorsetup, kann es daher nicht demonstrieren, aber in der Systemsteuerung kannst du auch solche Setups erstellen. Was du bei DesktopX(DesktopID) als ID eingeben musst korrespondiert mit der Zahl, die angezeigt wird wenn man "Desktop identifizieren" drückt in er Systemsteuerung.
W(n) soll hier DesktopWidth(#Desktop) sein und x' und y' sind halt die Fensterposition relativ zum Desktop Nullpunkt.
Keine Ahnung was du mit "an Desktop anbinden" meinst.
Kenne keinen PB-Befehl, der ein Fenster an einem Desktop festkettet oder was auch immer. Zumal der User doch bitte selber entscheiden soll, ob er deinen Player links oder rechts sehen möchte.
Re: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 03:17
von tft
Hallo,
ja auch solche Konfigurationen sind möglich, diese werde ich fieleicht später mal berücksichtigen. Mein Grundfehler bei der Betrachtung des umgangs mit Mulltimonitoring war. Das zu WinXp Zeiten (Da habe ich das das letze mal gemacht) jeder Bildschirm einzeln gehandhabt wurde. Heute macht Win7 und höher einen gesamt Bildschirm daraus. Was die handhabung von Fenster extrem erleichtert.
Re: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 03:49
von Derren
Das halte ich auch für ein Gerücht. Hatte zwar nie mehrere Monitore an einem XP-Rechner, allerdings nen Fernseher an einer Videokarte (Composite Cinch output).
Konnte Fenster beliebig auf den Composite-Ausgang schieben, und zwar auch "halb". Also der Fernseher hat den Desktop einfach in eine Richtung erweitert. Das waren keine separaten Desktops. Ein Fenster zur Hälfte auf dem Monitor und zur anderen Hälfte auf dem Fernseher war gar kein Problem.
Mich würde ja echt mal der Code interessieren, der jetzt angeblich nich mehr läuft...
Re: AW: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 13:05
von Kurzer
Was Derren schreibt ist richtig. Ich nutze Windows Xp mit zwei Monitoren und kann Fenster zwischen beiden nahtlos verschieben. die Einstellung ist "erweiterter Desktop".
Re: Probleme mit mehreren Desktops
Verfasst: 10.01.2016 13:18
von ts-soft
Crossplattform:
Code: Alles auswählen
Procedure DesktopFromPoint(x, y)
Protected Count = ExamineDesktops()
Protected i, dx, dy, dw, dh
For i = 0 To Count - 1
dx = DesktopX(i)
dy = DesktopY(i)
dw = DesktopWidth(i)
dh = DesktopHeight(i)
If x >= dx And x <= dx + dw And y >= dy And y <= dy + dh
ProcedureReturn i
EndIf
Next i
ProcedureReturn -1 ; point is outside of all monitors
EndProcedure
Code: Alles auswählen
EnableExplicit
Structure MaxDesktopsRes
CountDesktops.w
MinPos.w
MaxPos.w
MaxWidth.w
MaxHight.w
EndStructure
Procedure DesktopsMaxRes(*r.MaxDesktopsRes)
Protected Desktops.i = ExamineDesktops()
Protected Desktop.i
Protected X.i, Y.i, X1.i, Y1.i, X2.i, Y2.i
For Desktop = 0 To Desktops-1
If DesktopX(Desktop) < X
X1 = DesktopX(Desktop)
EndIf
If DesktopY(Desktop) < Y
Y1 = DesktopY(Desktop)
EndIf
If DesktopX(Desktop)+DesktopWidth(Desktop) > X2
X2 = DesktopX(Desktop)+DesktopWidth(Desktop)
EndIf
If DesktopY(Desktop)+DesktopHeight(Desktop) > Y2
Y2 = DesktopY(Desktop)+DesktopHeight(Desktop)
EndIf
Next
*r\CountDesktops = Desktops
*r\MinPos = X1
*r\MaxPos = Y2
*r\MaxWidth = X2-X1
*r\MaxHight = Y2-Y1
EndProcedure
Define.MaxDesktopsRes r
DesktopsMaxRes(@r)
Debug r\CountDesktops
Debug r\MinPos
Debug r\MaxPos
; usw.