[ERLEDIGT] Maus und / mit Fenster verankern wie Cursor?
[ERLEDIGT] Maus und / mit Fenster verankern wie Cursor?
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
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
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
-
- 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?
"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
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
Re: Maus und Fenster verankern?
Danke für die Antwrort. Da ich Anfänger bin, kann ich mit deinem Tipp leider gar nichts anfangen.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
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
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
- 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?
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 aus dem Select:Case raus. Dafür schreibst du ein hin. Um das , 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 , funktioniert auch einfach nur mit "maus" allein, aber ich finde es so schöner anzusehen 
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
EDIT: Jetzt ist es richtig.
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)
Code: Alles auswählen
If maus = #True
maus = #False
Else
maus = #True
EndIf
Code: Alles auswählen
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 1)
Code: Alles auswählen
maus = #True

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

EDIT: Jetzt ist es richtig.
Re: Maus und Fenster verankern?
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
Grüße
Final CODE: im letzten Beitrag // in the Last POST
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
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
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
- 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?
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 sein?
Der Code sollte ja jetzt so aussehen:
Was soll denn
Code: Alles auswählen
#HTCAPTION
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
Re: Maus und Fenster verankern?
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.

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:
So laeuft es richtig :
Hier mal ein kleines Beispiel

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()
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()
Re: Maus und Fenster verankern?
@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
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
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
Re: Maus und Fenster verankern?
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
Re: [ERLEDIGT] Maus und Fenster verankern?
Hallo edel 
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:

Hier nun der Final Code:

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:

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
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