Systemmauszeiger in "OpenScreen" verwenden
Systemmauszeiger in "OpenScreen" verwenden
Bis jetzt kenne ich nur die Methode im Vollbildmodus "OpenScreen" per Sprite einen Mausgrafik einzuladen, ist es möglich den Systemauszeiger zu verwenden ?
Wenn nicht es es möglich anstatt *.bmp als Mausgrafiken zuladen, *.cur zu verwenden ?
Danke im vorraus
Wenn nicht es es möglich anstatt *.bmp als Mausgrafiken zuladen, *.cur zu verwenden ?
Danke im vorraus
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
noch nich ausprobiert, aber teste mal, ob "releasemouse" funzt, und du danach per "windowmouseX/Y" die koordinaten abfragen kannst...
unter XP sollte ein fullscreen nur ein window sein, über dem man den normalen zeiger wieder einschalten können sollte.
examinemouse und mousex/y und mousebutton funzen dann natürlich nich mehr...
unter XP sollte ein fullscreen nur ein window sein, über dem man den normalen zeiger wieder einschalten können sollte.
examinemouse und mousex/y und mousebutton funzen dann natürlich nich mehr...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Code: Alles auswählen
InitSprite() : InitKeyboard()
OpenScreen(640,480,32,"void")
SetClassLong_(ScreenID(),#GCL_HCURSOR,LoadCursor_(0,#IDC_ARROW))
ShowCursor_(1)
Repeat
ClearScreen($704020)
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(1)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Danke, genau das hab ich gesucht 
Was mich jetzt noch interessiert, ob damit auch einen bereich damit auswählen kann der transparent/unsichtbar ist

"davor" ist natürlich der Hintergrund z.b. das die weiße Fläche das Programm beenden soll gibt es da ein ein beispiel ? Auf PureArea.net habe ich leider nix direktes gefunden, ich hoffe ich habe es nicht übersehen.

Was mich jetzt noch interessiert, ob damit auch einen bereich damit auswählen kann der transparent/unsichtbar ist

"davor" ist natürlich der Hintergrund z.b. das die weiße Fläche das Programm beenden soll gibt es da ein ein beispiel ? Auf PureArea.net habe ich leider nix direktes gefunden, ich hoffe ich habe es nicht übersehen.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ich weiss jetzt nicht genau ob du das Klicken auf eine Fläche meinst oder ob du sowas wie einen Auswahlrahmen ziehen willst. Ich gehe mal von einer Schaltfläche aus und habe folgendes zusammengeschraubt:
Zwei grundlegene Dinge sind hierbei zu beachten:
1.) Der code bedient sich der WinAPI und ist somit nicht crossplatform-kompatibel.
2.) Wenn du den Systemzeiger benutzt kannst nicht mehr die PB Maus Bibliothek benutzen da diese auf DirectInput basiert. Dies wird deutlich wenn du ExamineMouse() in deine Hauptschleife einbindest welches den Systemzeiger verschwinden lässt da DirectInput hier die höhere Priorität hat.
Code: Alles auswählen
InitSprite() : InitKeyboard()
OpenScreen(640,480,32,"void")
SetClassLong_(ScreenID(),#GCL_HCURSOR,LoadCursor_(0,#IDC_ARROW))
ShowCursor_(1)
CreateSprite(0,640,480,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(0))
For i=0 To 639
Box(0,i,640,1,RGB(0,50 + ((i * 205) / 639),230))
Next
StopDrawing()
Repeat
ClearScreen($704020)
ExamineKeyboard()
GetCursorPos_(pt.POINT)
StartSpecialFX()
DisplaySprite(0,0,0)
DisplayRGBFilter(50,50,100,250,50,50,50)
DisplayRGBFilter(50,350,100,100,50,50,50)
If pt\x >= 180 And pt\x < 460 And pt\y >= 50 And pt\y < 300
DisplayRGBFilter(180,50,280,250,150,50,50)
If GetAsyncKeyState_(#VK_LBUTTON) & $FFFF
End
EndIf
Else
DisplayRGBFilter(180,50,280,250,50,50,50)
EndIf
DisplayRGBFilter(490,50,100,250,50,50,50)
DisplayRGBFilter(490,350,100,100,50,50,50)
StopSpecialFX()
StartDrawing(ScreenOutput())
DrawText(60,60,"Flaeche #1")
DrawText(60,360,"Flaeche #2")
DrawText(190,60,"Beenden")
DrawText(500,60,"Flaeche #3")
DrawText(500,360,"Flaeche #4")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1)
1.) Der code bedient sich der WinAPI und ist somit nicht crossplatform-kompatibel.
2.) Wenn du den Systemzeiger benutzt kannst nicht mehr die PB Maus Bibliothek benutzen da diese auf DirectInput basiert. Dies wird deutlich wenn du ExamineMouse() in deine Hauptschleife einbindest welches den Systemzeiger verschwinden lässt da DirectInput hier die höhere Priorität hat.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Einfach nur Spitze 
Ich weiß klingt nach "Gibt man dem Daumen, frisst er die Hand" aber hab da noch was
Ich bin jetzt per klick in das nächste menü
1. Bin ich mir überhaupt nicht sicher ob das "verfahren" per include überhaupt richtig ist.
2. Wie kommte ich wieder zurück ? Ich habe zwar wieder ein feld wo man klicken kann aber
das mag er überhaupt nicht, was mich vermutet lässt das diese Methode extrem unproduktiv ist 

Ich weiß klingt nach "Gibt man dem Daumen, frisst er die Hand" aber hab da noch was

Ich bin jetzt per klick in das nächste menü
Code: Alles auswählen
If pt\x >= 60 And pt\x < 190 And pt\y >= 110 And pt\y < 195
DisplayRGBFilter(60,110,130,85,50,50,50)
If GetAsyncKeyState_(#VK_LBUTTON) & $FFFF
IncludeFile "menu_save_load.pb"
EndIf
EndIf
2. Wie kommte ich wieder zurück ? Ich habe zwar wieder ein feld wo man klicken kann aber
Code: Alles auswählen
If pt\x >= 0 And pt\x < 640 And pt\y >= 0 And pt\y < 480
DisplayRGBFilter(0,0,640,480,50,50,50)
If GetAsyncKeyState_(#VK_LBUTTON) & $FFFF
IncludeFile "menu_main.pb" ; Zurück zum hauptmenü
EndIf
EndIf

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> was mich vermutet lässt das diese Methode extrem unproduktiv ist
im grunde sogar total falsch.
> Bin ich mir überhaupt nicht sicher ob das "verfahren" per include überhaupt richtig ist.
ist es nicht.
per Include kannst du code-abschnitte in den hauptcode einfügen, bevor compiliert wird.
sowas ist besonders dann praktisch, wenn du gewisse proceduren auslagern willst.
das mitten in irgendwelchen bedingungen zu machen, ist bestenfalls unkonventionell,
bei dir scheint da ein wirklicher fehler aufzutreten, deshalb nehme ich stark an, dass deine idee dabei grundfalsch ist.
> IncludeFile "menu_main.pb" ; Zurück zum hauptmenü
und ich welchem code befindest du dich da?
ich schätze mal, du fügst den code des save/load menus in den hauptcode ein,
und probierst dann, den hauptcode wiederum in den code des save/load menus einzufügen?
IncludeFile ist kein sprung oder sonstwas...
wie gesagt:
per Include kannst du code-abschnitte in den hauptcode einfügen, bevor compiliert wird.
das bedeutet nicht, dass du andere programm-teile aufrufst.
im grunde sogar total falsch.
> Bin ich mir überhaupt nicht sicher ob das "verfahren" per include überhaupt richtig ist.
ist es nicht.
per Include kannst du code-abschnitte in den hauptcode einfügen, bevor compiliert wird.
sowas ist besonders dann praktisch, wenn du gewisse proceduren auslagern willst.
das mitten in irgendwelchen bedingungen zu machen, ist bestenfalls unkonventionell,
bei dir scheint da ein wirklicher fehler aufzutreten, deshalb nehme ich stark an, dass deine idee dabei grundfalsch ist.
> IncludeFile "menu_main.pb" ; Zurück zum hauptmenü
und ich welchem code befindest du dich da?
ich schätze mal, du fügst den code des save/load menus in den hauptcode ein,
und probierst dann, den hauptcode wiederum in den code des save/load menus einzufügen?
IncludeFile ist kein sprung oder sonstwas...
wie gesagt:
per Include kannst du code-abschnitte in den hauptcode einfügen, bevor compiliert wird.
das bedeutet nicht, dass du andere programm-teile aufrufst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ob du nachher alles in eine datei schreibst, oder teile in includes auslagerst, bleibt dir überlassen,
aber meistens lagert man dann sammlungen von procedures aus,
die man dann an den anfang des codes includet.
und "rumspringen" is auch nicht so die show.
du kannst Proceduren aufrufen, oder kleine abschnitte schreibst du direkt dorthin.
hast du denn vorher schon mal in irgendeiner anderen sprache programmiert?
...nur damit ich ne vorstellung hab, was für voraussetzungen bestehen...
mal ein winziges beispiel:
das speicher mal z.b. als "procs1.pbi"
und das hier nimmst du als hauptprogramm:
wenn du jetzt compilierst, wird zuerst das include eingefügt,
der code der compiliert wird, sieht dann so aus:
und das demonstriert dir auch gleichzeitig nen procedure-aufruf innerhalb einer if-bedingung...
aber meistens lagert man dann sammlungen von procedures aus,
die man dann an den anfang des codes includet.
und "rumspringen" is auch nicht so die show.
du kannst Proceduren aufrufen, oder kleine abschnitte schreibst du direkt dorthin.
hast du denn vorher schon mal in irgendeiner anderen sprache programmiert?
...nur damit ich ne vorstellung hab, was für voraussetzungen bestehen...
mal ein winziges beispiel:
Code: Alles auswählen
Procedure PingOutput(nr)
Debug "* P I N G * : Nr. = "+Str(nr)
EndProcedure
und das hier nimmst du als hauptprogramm:
Code: Alles auswählen
IncludeFile "procs1.pbi"
For n=0 To 9
Debug "n = "+Str(n)
If n > 3 And n < 6
PingOutput(n)
EndIf
Debug "-------"
Next
der code der compiliert wird, sieht dann so aus:
Code: Alles auswählen
Procedure PingOutput(nr)
Debug "* P I N G * : Nr. = "+Str(nr)
EndProcedure
For n=0 To 9
Debug "n = "+Str(n)
If n > 3 And n < 6
PingOutput(n)
EndIf
Debug "-------"
Next
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
O.k, ich hab mich nochmal eingelesen 
Jetzt hab ich es per Procedure geschafft und funktioniert wunderbar.
Was mir nun auffiel (kann man an @Fluid Byte code testen), wenn ich irgendwo hinklicke wo keine Fläche deklariert wurde, merkt er sich diesen klick und sobald ich auf das beenden Feld gehe beendet er das Programm, da er sich den klick gemerkt hat.
Liegt es an GetAsyncKeyState_(#VK_LBUTTON) ? Gibt es da eine alternative ?

Jetzt hab ich es per Procedure geschafft und funktioniert wunderbar.
Was mir nun auffiel (kann man an @Fluid Byte code testen), wenn ich irgendwo hinklicke wo keine Fläche deklariert wurde, merkt er sich diesen klick und sobald ich auf das beenden Feld gehe beendet er das Programm, da er sich den klick gemerkt hat.
Liegt es an GetAsyncKeyState_(#VK_LBUTTON) ? Gibt es da eine alternative ?
:: PureBasic v4.02 (Windows - x86)::