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.
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.
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.
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...
Was Derren schreibt ist richtig. Ich nutze Windows Xp mit zwei Monitoren und kann Fenster zwischen beiden nahtlos verschieben. die Einstellung ist "erweiterter Desktop".
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?" PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070 Useralter in 2025: 57 Jahre.
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
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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.