Edit: Habe es mir jetzt genauer angesehen. Ist denn eine Map wirklich am sinnvollsten? (dieses String-Backen) Auch wäre es sehr praktisch beim setzen des Handler mehrere Event-Typen gleichzeitig zu setzen wie #PB_EventType_LeftClick|#PB_EventType_RightClick etc.
EM_EventManager (crossplattform)
Re: EM_EventManager (crossplattform)
Sehr schön
, werde diese Lösung für die MCF Controls nutzen, da man auf anderen Plattformen sonst eine Update Funktion aufrufen müsste. Selbst die Windows Lösung ist aufwendig, da die Canvas-Events durch ein Callback nicht mehr empfangen werden.
Edit: Habe es mir jetzt genauer angesehen. Ist denn eine Map wirklich am sinnvollsten? (dieses String-Backen) Auch wäre es sehr praktisch beim setzen des Handler mehrere Event-Typen gleichzeitig zu setzen wie #PB_EventType_LeftClick|#PB_EventType_RightClick etc.
Edit: Habe es mir jetzt genauer angesehen. Ist denn eine Map wirklich am sinnvollsten? (dieses String-Backen) Auch wäre es sehr praktisch beim setzen des Handler mehrere Event-Typen gleichzeitig zu setzen wie #PB_EventType_LeftClick|#PB_EventType_RightClick etc.
- 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: EM_EventManager (crossplattform)
Sollte schneller sein, als durch eine Linklist zu iterierencOoki3druqs hat geschrieben:Edit: Habe es mir jetzt genauer angesehen. Ist denn eine Map wirklich am sinnvollsten? (dieses String-Backen)
Laß den Type weg (-1) und Werte dann in dercOoki3druqs hat geschrieben: Auch wäre es sehr praktisch beim setzen des Handler mehrere Event-Typen gleichzeitig zu setzen wie #PB_EventType_LeftClick|#PB_EventType_RightClick etc.
HändlerProc selber aus. Die EventProc wird dann für alle nicht vergebenen EventTypen aufgerufen (die einzel vergebenen
haben Vorrang!).
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.

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

Re: EM_EventManager (crossplattform)
Ich hatte da eher Arrays im Sinn.
Glaube Str() und FindMapElement statt direktem Zugriff verlangsamen es etwas.
Zu letzterem: Wenn im Beispiel der letzte Parameter also nicht angegeben wird, müsste doch der "Okay"-Button bei beliebigem Event "Okay clicked" ausgeben - was es nur bei Klick tut. Der Button ist ja etwas eigen, aber zumindest bei Fokus sollte es doch kommen oder nicht?
Zu letzterem: Wenn im Beispiel der letzte Parameter also nicht angegeben wird, müsste doch der "Okay"-Button bei beliebigem Event "Okay clicked" ausgeben - was es nur bei Klick tut. Der Button ist ja etwas eigen, aber zumindest bei Fokus sollte es doch kommen oder nicht?
- 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: EM_EventManager (crossplattform)
Der Button in PB unterstützt nur LeftClick!cOoki3druqs hat geschrieben:Zu letzterem: Wenn im Beispiel der letzte Parameter also nicht angegeben wird, müsste doch der "Okay"-Button bei beliebigem Event "Okay clicked" ausgeben - was es nur bei Klick tut. Der Button ist ja etwas eigen, aber zumindest bei Fokus sollte es doch kommen oder nicht?
Ich glaube nicht, das ein Array schneller wird, jedenfalls nicht so viel, das es irgendeinen Einfluss hätte.
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.

Re: EM_EventManager (crossplattform)
Hm, dachte zumindest die Fokus-Ereignisse
, naja.
Mache mir nur um die massiven Events wie MouseMove oder SizeWindow Sorgen.
Mache mir nur um die massiven Events wie MouseMove oder SizeWindow Sorgen.
- 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: EM_EventManager (crossplattform)
Wenn Du es beschleunigen möchtest, Speicher die Daten per GadgetData ab. Aber dann nimmst Du dem
Anwender eine Möglichkeit, diese selber zu nutzen. Per API mit Prop oder ähnlichem wäre wieder nicht
Crossplattform. Also wird meine Variante schon die schnellste Möglichkeit sein, solange größtmögliche
Kompatibilität und Crossform funktionalität gewährt sein soll.
Gruß
Thomas
Anwender eine Möglichkeit, diese selber zu nutzen. Per API mit Prop oder ähnlichem wäre wieder nicht
Crossplattform. Also wird meine Variante schon die schnellste Möglichkeit sein, solange größtmögliche
Kompatibilität und Crossform funktionalität gewährt sein soll.
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.

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

- NicTheQuick
- Ein Admin
- Beiträge: 8830
- 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: EM_EventManager (crossplattform)
Aber dafür gibt es doch Makros zum Überschreiben vorhandener Funktionen.ts-soft hat geschrieben:Wenn Du es beschleunigen möchtest, Speicher die Daten per GadgetData ab. Aber dann nimmst Du dem
Anwender eine Möglichkeit, diese selber zu nutzen.
Code: Alles auswählen
Procedure _SetGadgetData_Wrapper(gadgetId.i, value.i, index.i = 0)
Protected *mem.Integer = GetGadgetData(gadgetId)
If (Not *mem)
*mem = AllocateMemory(2 * SizeOf(Integer))
SetGadgetData(gadgetId, *mem)
EndIf
*mem + index * SizeOf(Integer)
*mem\i = value
EndProcedure
Procedure.i _GetGadgetData_Wrapper(gadgetId.i, index.i = 0)
Protected *mem.Integer = GetGadgetData(gadgetId)
If (Not *mem)
*mem = AllocateMemory(2 * SizeOf(Integer))
SetGadgetData(gadgetId, *mem)
EndIf
*mem + index * SizeOf(Integer)
ProcedureReturn *mem\i
EndProcedure
Macro SetGadgetData(Gadget, Value)
_SetGadgetData_Wrapper(Gadget, Value)
EndMacro
Macro GetGadgetData(Gadget)
_GetGadgetData_Wrapper(Gadget)
EndMacro
;für den EventManager dann
Procedure __EM_SetGadgetData(gadgetId.i, value.i)
_SetGadgetData_Wrapper(gadgetId, value, 1)
EndProcedure
Procedure.i __EM_GetGadgetData(gadgetId.i)
_SetGadgetData_Wrapper(gadgetId, 1)
EndProcedure- 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: EM_EventManager (crossplattform)
Schöner Code, aber selbst wenn das Funktionieren sollte, wir reden hier von nano-Sekunden, die im
Eventloop IMHO eigentlich keinen Einfluss haben sollten
, ansonsten verzögert ein Procedure-
Aufruf, das ganze ja schon zu viel
Ausserdem reicht ein Wert ja auch gar nicht, der Eventtype und die ProcedureAdresse sind erforderlich,
aber das ist ja auch implementierbar.
Also wer das Einbauen möchte, soll das Tun, aber bitte möglichst andere Funktionsnamen nutzen,
als in meinem Manger
Eventloop IMHO eigentlich keinen Einfluss haben sollten
Aufruf, das ganze ja schon zu viel
Ausserdem reicht ein Wert ja auch gar nicht, der Eventtype und die ProcedureAdresse sind erforderlich,
aber das ist ja auch implementierbar.
Also wer das Einbauen möchte, soll das Tun, aber bitte möglichst andere Funktionsnamen nutzen,
als in meinem Manger
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.

Re: EM_EventManager (crossplattform)
Ich vermute das wichtigste Ereignis fällt allerdings aus.
Wenn das Gadget modifiziert wird (ResizeGadget()), was bei WinAPI #WM_SIZE und #WM_EXISTSIZEMOVE darstellt. Auch letzteres ist sehr wichtig, denn bei flinker Veränderung kommt die Aktualisierung nie exakt mit. Könnte dieser Event-Typ zu PB noch hinzugefügt werden?
- 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: EM_EventManager (crossplattform)
#PB_Event_SizeWindow wird ja unterstützt, als #EM_Special, es werden alle native PB events unterstützt sowie
benutzerdefinierte, die per PostEvent ausgelöst werden, aber keine API-Events. Da musst Du im Callback dann selber
ein unterstütztes Event feuern.
Also alles, was im EventLoop von PB ankommt, wird auch unterstützt!
benutzerdefinierte, die per PostEvent ausgelöst werden, aber keine API-Events. Da musst Du im Callback dann selber
ein unterstütztes Event feuern.
Also alles, was im EventLoop von PB ankommt, wird auch unterstützt!
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.
