[ERLEDIGT] Maus und / mit Fenster verankern wie Cursor?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

[ERLEDIGT] Maus und / mit Fenster verankern wie Cursor?

Beitrag von udg »

Hallo,
folgende Frage wurde mir gestellt.
Ich sollte eine Art "Lesehilfe" schreiben mit der man, mit einem transparenten Streifen über Text gehen kann (in meinem Fall habe ich einen gelben erstellt) um diesen besser lesen zu können.

folgender Maßen habe ich das umgesetzt:

Transparentes Rahmenloses Fenster erstellt und Sizable: 1920*38
ein durchsichtiges PNG reingeladen in der Abmessung: 1920*38

nun zeigt es alles auch wunderbar an und man kann diese Lesehilfe mit der Maus bewegen.

Zur Frage: )set mouse and Window sticky. Window usage like a Mouse Cursor?
wie kann ich es erledigen, dass man zum bewegen nicht immer die linke Maustaste gedrückt halten muss sondern so:
klick Linke oder Rechte Maustaste --> Fenster bzw das sprite( png) verankert sich mit der Maus und man muss nicht mehr die Taste gedrückt halten und kann dann
das transparente Fenster (PNG bild) bewegen als obs ein Cursor wäre.

~ Sizeable des Balkens soll aber wenn nicht verankert funktionieren

und Klick auf einen anderen freien MausButton lässt das ganze wieder los.

der Befehl:
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)
schnappt sich ja das Fenster, aber man muss die Maus gedrückt halten.

Vielen Dank für eine Lösung

Final CODE: im letzten Beitrag // in the Last POST
Zuletzt geändert von udg am 17.02.2014 05:22, insgesamt 4-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Maus und Fenster verankern?

Beitrag von True29 »

"klick Linke oder Rechte Maustaste --> Fenster bzw das sprite( png) verankert sich mit der Maus"

zu der frage.
bei einem klick eine Variable setzen.
und falls die variable gesetzt ist wird fesnter / sprite verankert > folgt der maus .
x = mousex() .. windowmouse.

Grüße
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Maus und Fenster verankern?

Beitrag von udg »

True29 hat geschrieben:"klick Linke oder Rechte Maustaste --> Fenster bzw das sprite( png) verankert sich mit der Maus"

zu der frage.
bei einem klick eine Variable setzen.
und falls die variable gesetzt ist wird fesnter / sprite verankert > folgt der maus .
x = mousex() .. windowmouse.

Grüße
Danke für die Antwrort. Da ich Anfänger bin, kann ich mit deinem Tipp leider gar nichts anfangen.

trotzdem Danke

ich muss noch lernen, weis zu wenig bescheid, darum stelle ich meine Frage im Anfänger Forum

Grüße

CODE: im letzten Beitrag // in the Last POST
Zuletzt geändert von udg am 17.02.2014 04:39, insgesamt 2-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Maus und Fenster verankern?

Beitrag von Chimorin »

Wirklich eine gute Programmieridee!

Nun zum eigentlichen Thema: MouseX() wird hier doch nicht funktionieren, weil er keinen Screen geöffnet hat.
Was du machen könntest (Nicht getestet, ich hab nicht so viel Ahnung von WinAPI):
Du ziehst

Code: Alles auswählen

SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)
aus dem Select:Case raus. Dafür schreibst du ein

Code: Alles auswählen

If maus = #True
  maus = #False
  
Else
  maus = #True
  
EndIf
hin. Um das

Code: Alles auswählen

SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)
, welches direkt (Nicht unbedingt direkt, sollte aber in der Schleife sein, sonst funktioniert es nicht) hinter Select:Case kommt, setzt du ein If:Endif mit

Code: Alles auswählen

maus = #True
, funktioniert auch einfach nur mit "maus" allein, aber ich finde es so schöner anzusehen :D

P.S.: Ja, ich hätte das gleich in den Code eintragen können, aber aus eigener Erfahrung weiß ich, dass es als Anfänger so besser ist.

EDIT: Sorry, mein Code war der Gleiche wie vorher, nur mit einer Variable mehr :D
EDIT: Jetzt ist es richtig.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Maus und Fenster verankern?

Beitrag von udg »

Danke.

Case #WM_LBUTTONDOWN; sagt --> wenn linker Mausbutton down
; dann
Maus = #true ; besagt mir maus ist da /present

okay

aber das verknüpft nicht den event mit dem Fenster. was mach ich falsch?

ich brauche doch eine Kommandozeile wie diese:
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)

jedoch dass #HTCaption sich mit der maus verbindet?

leider planlos im Moment

Danke für Hilfe
EDIT: das hier bringt nichts. da fehlt mir die Funktion: Schnappe mit Maus das Fenster

Code: Alles auswählen

Select WindowEvent()
         Case #WM_LBUTTONDOWN
            If maus = #True
               maus = #False
               Else
               maus = #True
            EndIf 
      EndSelect
      If maus = #True : EndIf 
Grüße

Final CODE: im letzten Beitrag // in the Last POST
Zuletzt geändert von udg am 17.02.2014 04:38, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Maus und Fenster verankern?

Beitrag von Chimorin »

Das müsste aber, wenn auch nicht immer (PCs sind so schnell, da kommt mehrmals "Taste runter") funktionieren. Letzteres hängt dann meiner Meinung nach an SendMessage_().
Was soll denn

Code: Alles auswählen

#HTCAPTION
sein?

Der Code sollte ja jetzt so aussehen:

Code: Alles auswählen

EnableExplicit


UsePNGImageDecoder()


Enumeration
  #window_0
EndEnumeration


;{ Included Images
DataSection
       MyData1:
IncludeBinary "neon1.png" 
       EndOfMyData1:
EndDataSection
;}


Procedure WindowBackground(Window.i, Image.i)
Protected WindowID.i = WindowID(0)
Protected ImageID.i = ImageID(Image)
Protected HDC.i = CreateCompatibleDC_(#Null)
Protected Object.i = SelectObject_(HDC, ImageID)
Protected Size.Size
           Size\cx = ImageWidth(Image)
           Size\cy = ImageHeight(Image)
Protected Point.Point
Protected Blend.BLENDFUNCTION
           Blend\SourceConstantAlpha = 120
           Blend\AlphaFormat = 1
           SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED)
           UpdateLayeredWindow_(WindowID, 0, 0, @Size, HDC, @Point, 0, @Blend, 2)
           SelectObject_(HDC, Object)
           DeleteDC_(HDC)
EndProcedure


Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Define sprite_1 ; Das PNG Bild 2
Define sprite_2 ; Das Bild auf dem gezeichnet wird 2
Define.b maus


OpenWindow(#window_0, 0, 0, 1920, 38, "Transparentes Fenster",  #PB_Window_ScreenCentered| #PB_Window_SizeGadget)
SetWindowPos_(WindowID(#window_0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE) ; Programm immer im Vordergrund
Sprite_1 = CatchImage(#PB_Any, ?MyData1, ?EndOfMyData1 - ?MyData1)    ; Bild aus dem Speicher laden
Sprite_2 = CreateImage(#PB_Any,1920,38,32, #PB_Image_Transparent)      ; Bild erstellen

If StartDrawing(ImageOutput(Sprite_2))
  DrawAlphaImage(ImageID(Sprite_1),0,0,255)
  StopDrawing()
EndIf

WindowBackground(#window_0, Sprite_2) ; PNG 2 als Hintergrund verwenden.


Repeat
  
  Event = WaitWindowEvent() 
  
  Select WindowEvent()
    Case #WM_LBUTTONDOWN
      If maus = #True
        maus = #False
        
      Else
        maus = #True
        
      EndIf
      
      
    Case 258 ; mit beliebiger Taste Programm beenden
      Break
  EndSelect
  
  If maus = #True
    SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)
  EndIf
  
Until event = #PB_Event_CloseWindow 
Bild

- formerly known as Bananenfreak -
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Maus und Fenster verankern?

Beitrag von edel »

Kommentiere doch mal deine Funktion WindowBackground aus, dann siehst du ein ganz normales Fenster mit Titelleiste. Du brauchst also gar kein WM_NCLBUTTONDOWN, da du dein Fenster ganz normal ueber die Titelleiste verschieben kannst.

Bild

Nachrichten wie #WM_NCLBUTTONDOWN sagen, dass es sich um Nachrichten handelt die sich im NonClient bereich abspielen. Mit WM_NCLBUTTONDOWN gaukelst du dem Fenster ein Mausklick in der Titelleiste vor, auch wenn diese gar nicht vorhanden ist. Ein #WM_MOUSEMOVE dagegen wuerdest du nie bekommen, wenn du in der Titelleiste bist.

Ausserdem solltest du darauf achten pro Schleife nur einmal die Events abzufragen.

Das wuerde hier wuerde einige Events verschlucken:

Code: Alles auswählen

Event = WaitWindowEvent() 
Select WindowEvent()
So laeuft es richtig :

Code: Alles auswählen

Event = WaitWindowEvent() 
Select Event

Hier mal ein kleines Beispiel

Code: Alles auswählen

Procedure Callback(hWnd, Msg, wParam, lParam)
  Protected pt.point
  
  Static Drag.i
  
  If Msg = #WM_MOUSEMOVE
    
    If Drag 
      
      ; Die y Mauskoordinate im Fenster
      pt\y = ((lParam>>16) & $FFFF)
      
      ;Umrechnen der Clientkoordinaten nach Screenkoordinaten
      MapWindowPoints_(hWnd, #HWND_DESKTOP, pt, 1)
      
      pt\y - Drag
      
      If pt\y > 0 And pt\y < 1000        
        SetWindowPos_(hWnd, 0, 0, pt\y, 0, 0, #SWP_NOSIZE | #SWP_NOZORDER)
      EndIf
      
    EndIf
    
  EndIf
  
  If Msg = #WM_LBUTTONDOWN 
    If Not Drag
      ; Die y Koordinate im Fenster    
      Drag = ((lParam>>16) & $FFFF) + 1
    Else
      Drag = 0
    EndIf  
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure


Procedure Main()
  Protected Style
  Protected Event
  
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 1920, 80, "", #PB_Window_BorderLess)
    
    StickyWindow(0, #True)
    Style = GetWindowLongPtr_(WindowID(0), #GWL_STYLE)
    SetWindowLongPtr_(WindowID(0), #GWL_STYLE, Style | #WS_SIZEBOX)
 
    SetWindowColor(0, $FFFFFF)
    
    SetWindowCallback(@Callback(), 0)
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
    
  EndIf
  
EndProcedure:Main()

Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Maus und Fenster verankern?

Beitrag von udg »

@edel
Na das hat mir ja nun ein ganzes Stück weitergeholfen. Nun habe ich nur noch das Problem: wenn ich den Balken kleiner mache und es mit Maus sticky ist,
springt das Fenster automatisch an den linken Bildschirmrand. Sollte aber Screen Zentriert bleiben.

Und was ich auch nicht mehr machen kann:
wenn ich das Fenster auf der X Achse bewegen möchte geht nix mehr . Nur wie in deinem Beispiel auf
der Y Achse.

1:Kann man ausserdem den Maus Sticky Befehl so fixieren dass er nicht verloren geht (wenn man die Maus zuschnell bewegt)?

Final CODE: im letzten Beitrag // in the Last POST

Danke für Deine Hilfe
Zuletzt geändert von udg am 17.02.2014 04:41, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Maus und Fenster verankern?

Beitrag von edel »

Probier mal das :

Code: Alles auswählen

Procedure Callback(hWnd, Msg, wParam, lParam)
  Protected pt.point
  
  Static X, Y
  Static Drag.i
 
  If Msg = #WM_MOUSEMOVE
   
    If Drag
     
      ; Die y Mauskoordinate im Fenster
      GetCursorPos_(pt)
      
      ;Umrechnen der Clientkoordinaten nach Screenkoordinaten
      ;MapWindowPoints_(hWnd, #HWND_DESKTOP, pt, 1)
      
      pt\y - Y
      pt\x - X
      
      Debug pt\y
      
     ;If pt\y > 0 And pt\y < 1000 And pt\x > 0 And pt\x < 1920       
        SetWindowPos_(hWnd, 0, pt\x, pt\y, 0, 0, #SWP_NOSIZE | #SWP_NOZORDER)
     ;EndIf
     
    EndIf
   
  EndIf
 
  If Msg = #WM_LBUTTONDOWN
    If Not Drag
      ; Die y Koordinate im Fenster 
      SetCapture_(hWnd)
      drag = #True
      Y = ((lParam>>16) & $FFFF) + 1
      X = (lParam & $FFFF)
    Else
      Drag = 0
      x = 0
      y = 0
      ReleaseCapture_()
    EndIf 
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: [ERLEDIGT] Maus und Fenster verankern?

Beitrag von udg »

Hallo edel Bild

Ich Danke Dir für Deine Hilfe mit der ich meine kleine Lesehilfe / Read Gadget vollenden konnte.
Ich hoffe, ich kann Dir auch einmal helfen. zB. mit einer schicken Grafik? [Link]

NFO:
LeseHilfe // ReadHelper-Gadget

~ Resolution: 1920*38
~ Größe per Size veränderbar
~ Linker Mausklick verankert den Lesebalken mit dem Maus-Cursor, sodass der Balken ohne gedrückte Maustaste beliebig verschoben werden kann
~ Rechte Maustaste beendet das Programm
~ beliebige Keyboard Taste beendet ebenfalls das Programm
~ getestet mit Windows7 32bit & Windows7 64bit

Final Exe: LeseHilfe - Read Gadget.rar

Include the PNG:
Bild

Hier nun der Final Code:

Code: Alles auswählen

EnableExplicit
UsePNGImageDecoder()
Enumeration
  #window_0
EndEnumeration
;{ Included Images
DataSection
       MyData1:
IncludeBinary "neon1.png" 
       EndOfMyData1:
EndDataSection
;}
;- Einhaken der Maus und mit Fenster bewegen ohne Maustaste gedrückt halten zu müssen
Procedure Callback(hWnd, Msg, wParam, lParam)
  Protected pt.point
  Static X, Y ; auf X und Y Achse verschiebbar
  Static Drag.i
  
  If Msg = #WM_MOUSEMOVE
   
    If Drag
      ;Die y Mauskoordinate im Fenster
      GetCursorPos_(pt)
      ;Umrechnen der Clientkoordinaten nach Screenkoordinaten
      ;MapWindowPoints_(hWnd, #HWND_DESKTOP, pt, 1)
      pt\y - Y
      pt\x - X
      ;Debug pt\y
      SetWindowPos_(hWnd, 0, pt\x, pt\y, 0, 0, #SWP_NOSIZE | #SWP_NOZORDER)
    EndIf
  
  EndIf
 
  If Msg = #WM_LBUTTONDOWN
    If Not Drag
      ; Die y Koordinate im Fenster
      SetCapture_(hWnd)
      drag = #True
      Y = ((lParam>>16) & $FFFF) + 1
      X = (lParam & $FFFF)
    Else
      Drag = 0
      x = 0
      y = 0
      ReleaseCapture_()
    EndIf
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;- Fenstertransparenz
Procedure WindowBackground(Window.i, Image.i)
Protected WindowID.i = WindowID(0)
Protected ImageID.i = ImageID(Image)
Protected HDC.i = CreateCompatibleDC_(#Null)
Protected Object.i = SelectObject_(HDC, ImageID)
Protected Size.Size
           Size\cx = ImageWidth(Image)
           Size\cy = ImageHeight(Image)
Protected Point.Point
Protected Blend.BLENDFUNCTION
           Blend\SourceConstantAlpha = 200 ;Durchsichtigkeit der Farbe
           Blend\AlphaFormat = 1
           SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED)
           UpdateLayeredWindow_(WindowID, 0, 0, @Size, HDC, @Point, 0, @Blend, 2)
           SelectObject_(HDC, Object)
           DeleteDC_(HDC)
EndProcedure

Procedure Main()
  Protected Style
  Protected Event
 
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 1920, 38, "", #PB_Window_BorderLess | #PB_Window_ScreenCentered |#WS_SIZEBOX)
    
    Define Sprite_1 ;Das PNG Bild 2
    Define Sprite_2 ;Das Bild auf dem gezeichnet wird, auf Sprite_1
    Sprite_1 = CatchImage(#PB_Any, ?MyData1, ?EndOfMyData1 - ?MyData1)  ;Bild aus dem Speicher laden
    Sprite_2 = CreateImage(#PB_Any,1920,38,32|#PB_Image_Transparent)    ;Bild erstellen
    
    If StartDrawing(ImageOutput(Sprite_2))
     DrawAlphaImage(ImageID(Sprite_1),0,0,255) ;Helligkeit der Farbe
     StopDrawing()
    EndIf
    
    StickyWindow(0, #True)
    Style = GetWindowLongPtr_(WindowID(0), #GWL_STYLE)
    SetWindowLongPtr_(WindowID(0), #GWL_STYLE, Style | #WS_SIZEBOX)
 
    SetWindowCallback(@Callback(), 0)
    WindowBackground(#window_0, Sprite_2) ;PNG 2 als Hintergrund verwenden.
     
Repeat
  Event = WaitWindowEvent()
    Select Event
      
      Case 258 ;mit beliebiger Taste Programm beenden
      End
    
      Case #WM_RBUTTONDOWN ;mit rechter Maus-Taste Programm beenden
        Delay (200) ;verhindere das Aufpoppen des Windows Kontextmenü wenn Rechtsklick
      End
      
    EndSelect
     
Until Event = #PB_Event_CloseWindow
   
  EndIf
 
EndProcedure:Main()
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten