Hallo zusammen,
in einem Programm habe ich auf verschiedenen Seiten eines Panels mehrere canvas eingebaut.
Nun möchte ich die Mousposition ermitteln wenn ich die Mouse über ein bestimmtes canvas bewege.
Mit #PB_EventType_LeftButtonDown die Position zu ermitteln geht aber es gibt wohl kein #PB_EventType_Mousemove?
Habe zwei Lösungsansätze gefunden aber die verwenden #WM_MOUSEMOVE
Nun ist mir nicht klar, ob das vielleicht ein WindowsEvent ist welches unter Linux oder Mac nicht erzeugt wird?
Da ich das Programm auch für Linux und Mac nutzen möchte suche ich eine allgemein lauffähige Funktion.
EDIT: Habe es gefunden! Hat sich also erledigt!
LG
Wolfgang
Mouseoverfunktion gesucht
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Mouseoverfunktion gesucht
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mouseoverfunktion gesucht
Sag doch schnell noch die Lösung, dann hilfst du auch anderen.
Re: Mouseoverfunktion gesucht
Das CanvasGadget hat #PB_EventType_MouseMove, andere Gadgets nicht.NicTheQuick hat geschrieben:Sag doch schnell noch die Lösung, dann hilfst du auch anderen.

Deshalb stehen einige Events nur beim CanvasGadget, nicht bei EventType().
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Mouseoverfunktion gesucht
So soll es seinNicTheQuick hat geschrieben:Sag doch schnell noch die Lösung, dann hilfst du auch anderen.

Code: Alles auswählen
If Event = #PB_Event_Gadget And EventGadget() = Canvas_Kalender ; ----------------- canvas_Kalender routinen ---------
Select EventType()
Case #PB_EventType_MouseMove
x = GetGadgetAttribute(Canvas_Kalender, #PB_Canvas_MouseX)
y = GetGadgetAttribute(Canvas_Kalender, #PB_Canvas_MouseY)
ForEach kalender()
If (x >= kalender()\x) And (x <= (kalender()\x+kalender()\width)) And
(y >= kalender()\y) And (y <= (kalender()\y+kalender()\height))
SetGadgetText(String_kalenderinfo,Str(kalender()\TagMon) + " " +Str(kalender()\Monat))
gewaehlt_tag = kalender()\TagMon
gewaehlt_mon = kalender()\Monat
EndIf
Next
Case #PB_EventType_LeftButtonDown
inhaltname$ = "unterricht_"+ gewaehlt_tag+"_"+gewaehlt_mon+"_"+kalender()\Jahr+".txt"
If OpenFile(0, inhaltname$) ; öffnet eine existierende Datei oder erstellt eine, wenn sie noch nicht existiert
CloseFile(0)
EndIf
RunProgram(inhaltname$)
EndSelect
Da ich bezüglich Kalender nichts passendes gefunden habe mache ich den jetzt komplett neu.
Ziel ist einen Jahreskalender zu erstellen der sich aus der folgenden Textdatei selbst erstellt.
Code: Alles auswählen
Jahr;2013
Erster Wochentag;2
Tage pro Monat;31;28;31;30;31;30;31;31;30;31;30;31
Ferienwoche;1;1;5
Ferienwoche;25;3;13
Ferienwoche;22;7;44
Ferienwoche;21;10;13
Ferienwoche;23;12;9
Ferientag;9;5
Ferientag;20;5
Ferientag;21;5
Ferientag;3;10
Ich kann zu jedem Tag verschiedene Inhalte definieren und auch verschiedene Farben festlegen.
Evtl. möchte ich noch mehrere Infos über das "Tagesfeld" anzeigen und nicht nur eine Farbe.
Die Infos zu jedem Tag werden in folgender Struktur gespeichert:
Code: Alles auswählen
Structure kalend
Jahr.i ; Jahr 2013
WoTag.i ; Wochentag 1 = Mo
TagGes.i ; Tag des Jahres 125
TagMon.i ; Tag im Monat 15
KW.i ; Kalenderwoche 20
Monat.i ; Monat 3 -> März
FarbeH.i ; Hintergr.farbe 65000
FarbeT.i ; Textfarbe 255
Bemerk.s ; freier Text "Praktikumswoche"
Link.s ; freier Link "http:\\www.superhomepage.de" für internet oder html auf Disk
markiert.i ; frei zum Beispiel für den aktuellen Tag
TagesArt.i ; z.B 1 = Schultag, 2 = Ferientag, 3 = Feriertag, was es sont soch so gibt..
x.i ; x-pos im Kalender_canvas
y.i ; y-pos im Kalender_canvas
width.i ; Breite im Kalender_canvas
height.i ; Länge im Kalender_canvas
EndStructure
Jeder Tag hat also eine Struktur und eine bestimmte Fläche auf dem Canvas.
Vielleicht etwas weit ausgeholt aber vielleicht auch nicht

Der Code oben ermittelt automatisch die aktuelle Mausposition wenn sich der Cursor über das Canvas_Kalender bewegt.
In der Foreach-Schleife vergleiche ich dann ob die aktuelle Position in einer der Flächen eines Tages ist.
Wenn ja speichere ich den Tag im Feld gewaehlter_Tag und gewaehlter_Mon(at) ab.
Mache ich dann einen Linksklick auf den Tag, dann wird #PB_EventType_LeftButtonDown erzeugt und folgenden Programmzeilen ausgeführt.
Hier versuche ich mit "OpenFile" teste ich ob eine entsprechende "Tagesdatei" vorhanden ist wenn nicht wird eine erzeugt damit der folgende Programmaufruf nicht abbricht sondern die *.txt sofort geladen wird.
Da bin ich noch am testen weil mir ein .txt eigentlich nicht gut genug ist.
Ich hätte gerne auch die Möglichkeit Links im Text zu definieren.
Habe dazu schon Openoffice getestet aber irgendwie dauert mir da der Start zu lange.
Kennt jemand ein einfaches Textprogramm, Freeware welches auch Links im Text ermöglicht und das es evtl. auch für Linux und Mac gibt?
LG
Wolfgang
P.S. Falls so ein Kalender für euch interessant ist könnte ich ihn natürlich zur Verfügung stellen, wenn er komplett fertig ist!
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- 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
Re: Mouseoverfunktion gesucht
Das ForEach bei jedem MouseMove ist doch wohl etwas overkill
Da kocht die CPU
Das würde ich eher nur bei einem Mouseklick feststellen, wo sich die Mouse befindet.

Da kocht die CPU

Das würde ich eher nur bei einem Mouseklick feststellen, wo sich die Mouse befindet.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Mouseoverfunktion gesucht
Ich habe es gerne warm!ts-soft hat geschrieben:Das ForEach bei jedem MouseMove ist doch wohl etwas overkill![]()
Da kocht die CPU![]()
Das würde ich eher nur bei einem Mouseklick feststellen, wo sich die Mouse befindet.

Nein im Ernst das werde ich mir mal ansehen. Mein Gedanke war die Infos zu jedem Tag automatisch beim Überfahren anzeigen zu lassen.
Da es ja maximal 365 Elemente sind sollte das doch eigentlich nicht zum Kochen führen?
Ich behalte es auf jeden Fall im Auge!
Ach bei der Gelegenheit, wie kann ich bei Bedarf ein kleines Fenster z.B. zum Einstellen der Farben anzeigen lassen.
Dazu benötige vermutlich ein zweites pbf oder?
Also es geht mir um die Erzeugung eines Auswahlfensters.
Das habe ich bisher immer umgangen in dem ich alle Textfelder etc. immer am Rand ständig anzeigen lasse.
EDIT: Habe es gerade unter Windows mit CoreTemp getestet. Selbst wenn ich die Maus extrem schnell und lange über den Kalender bewege ändert sich die Temperatur der CPU nicht um 1 Grad! Werde nochmal unter Linux testen.
Zuletzt geändert von derschutzhund am 09.09.2013 19:09, insgesamt 1-mal geändert.
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- 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
Re: Mouseoverfunktion gesucht
Naja, aber wieviel Mousemoves benötigt es, von einem Feld zum nächstem zu kommen?derschutzhund hat geschrieben:Da es ja maximal 365 Elemente sind sollte das doch eigentlich nicht zum Kochen führen?
Ich behalte es auf jeden Fall im Auge!
Weil, frühestens, wenn Du ein anderes Feld erreicht hast, brauchste das ForEach, weil sich
ansonsten, ausser der Mouseposition nichts ändert.
Also bei Mousemove nur vergleichen, ob Du den nächsten Bereich erreicht hast, jedenfalls nur
das allernötigste dort machen, weil es gibt sehr viele Mousemoves, in sehr kurzen Abständen.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
