MultiMonitor-Support

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

MultiMonitor-Support

Beitrag von ts-soft »

Die folgenden Proceduren sind nicht auf meinen Mist gewachsen, bis auf kleinere Anpassungen, sollten IMHO
hier aber zusammengefasst gefunden werden.

DesktopFromPoint(x, y) ist von freak, original im engl. Forum: http://www.purebasic.fr/english/viewtop ... 51#p321351
Ich denke mal, man muss nicht erklären was die Procedure macht.

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
Die nächste Procedure baut auf STARGÅTE sein Beispiel auf und ist hier: http://www.purebasic.fr/german/viewtopi ... 62#p298762 zu finden

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 res.MaxDesktopsRes
DesktopsMaxRes(@res)

Debug res\CountDesktops
Debug res\MinPos
Debug res\MaxPos
Debug res\MaxWidth
Debug res\MaxHight
Wenn noch jemand speziellen Code für MultiMonitor-Support hat, einfach hier posten.

Gruß
Thomas
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.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: MultiMonitor-Support

Beitrag von RSBasic »

Danke für die Zusammenfassung. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten