EM_EventManager (crossplattform)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: EM_EventManager (crossplattform)

Beitrag von Lambda »

#PB_Event_SizeWindow wird ja nicht bei Gadgets ausgelöst. Könnte mir jetzt nur vorstellen ein benutzerdefiniertes durch ein Makro von ResizeGadget() auszulösen, aber das wäre dann für UserLibs/DLLs oder WinAPI Steuerung nicht tauglich. Wie gesagt frage ich mich, warum PB nicht auch ein #PB_EventType_Resize sendet. :?

Durch die vermutlich ausgelastetere Verarbeitung von PB-Events ist die CPU-Auslastung deutlich verbessert. ^^ Aber ohne diese sowie weitere Events (z.B #WM_NOTIFYPARENT) kann ich es leider nicht, oder nur teilweise nutzen.
Benutzeravatar
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)

Beitrag von ts-soft »

Du kannst Deine eigenen EventType typen kreieren und per PostEvent weiterleiten, dann funktionieren das auch mit
meiner Include, sind dann auch GadgetEvents, oder als EM_Special, wobei das dann kein EventType ist, sondern ein Event.
Aber auch da kannste dann das Gadget ermitteln.

FindMapElement findet nur ein mal per EventLoop statt und ist schneller als die Suche in einem Array, es sei denn, dieses
Array wäre sehr klein :wink:
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.
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: EM_EventManager (crossplattform)

Beitrag von Lambda »

Maps sind doch auch mit 512 Elementen initialisiert :mrgreen: oder nicht? Dieses Thema stört mich ja nicht wirklich, aber wie kann dieses Event dann erstellt werden? Ein #PB_EventType_Size? - (/#PB_EventType_ExitSize)

Edit: Das von ResizeGadget() und MoveWindow_() ausgelöst wird ^^
Benutzeravatar
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)

Beitrag von ts-soft »

Hier mal ein kurzes Beispiel mit einem Rechtsclick für den Button, alles andere ist ja ähnlich umzusetzen:

Code: Alles auswählen

EnableExplicit

XIncludeFile "EM_EventManager.pbi"

Procedure Subclass_btn(hWnd, uMsg, wParam, lParam)
  Protected oldproc = GetProp_(hWnd, "oldproc")
 
  Select uMsg
    Case #WM_NCDESTROY
      RemoveProp_(hWnd, "oldproc")
    Case #WM_RBUTTONUP
      PostEvent(#PB_Event_Gadget, 0, 0, #PB_EventType_RightClick)
  EndSelect
 
  ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure

Procedure SetSubClass(ID)
  Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @Subclass_btn())
  ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure


Procedure ev_btnRightClick(*ev.EM_Events)
  Debug "RightClick"
EndProcedure

Define i
OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
ButtonGadget(0, 10, 10, 200, 20, "Default Button")
SetSubClass(0)
EM_SetEventHandler(0, #EM_Gadget, @ev_btnRightClick(), #PB_EventType_RightClick)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
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.
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: EM_EventManager (crossplattform)

Beitrag von Lambda »

So habe ich es bisher gelöst, aber es geht ja um Plattform Unabhängigkeit. ^^
Benutzeravatar
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)

Beitrag von ts-soft »

cOoki3druqs hat geschrieben:So habe ich es bisher gelöst, aber es geht ja um Plattform Unabhängigkeit. ^^
Mein Manger kann nur Events unterstützen, die im EventLoop ankommen. Das die Crossplattform dort ankommen, ist
Dein Problem :wink:
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.
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: EM_EventManager (crossplattform)

Beitrag von Lambda »

Danke? Deshalb doch die Frage, ob man die Event-Typen erweitern kann, denn eigentlich empfängt schließlich jedes Element diese Ereignisse. / oder die Möglichkeit cross-platform Callbacks zu setzen *gleich mal stöber*
Benutzeravatar
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)

Beitrag von ts-soft »

Update

Von Danilo im engl. Forum vorgeschlagenen Erweiterungen sind jetzt implementiert.
Historie hat geschrieben:; Version 1.5 (March 30, 2013) - by Danilo
; added #EM_Window for window events
; added #PB_Event_GadgetDrop to gadget event system
;
; Version 1.4 (March 30, 2013) - by Danilo
; added #EM_SysTray for SysTrayIcon events
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.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: EM_EventManager (crossplattform)

Beitrag von c4s »

Stimmt mein Eindruck, dass z.B. diese Include mit PB5.20 (wegen BindEvent() etc.) mehr oder weniger überflüssig geworden ist?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
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)

Beitrag von ts-soft »

c4s hat geschrieben:Stimmt mein Eindruck, dass z.B. diese Include mit PB5.20 (wegen BindEvent() etc.) mehr oder weniger überflüssig geworden ist?
Mehr oder weniger, stimmt :wink:
BindEvent ist auch vorzuziehen, wenn es auf "Echtzeit" ankommt, z.B. beim bewegen eines Fensters werden Events
nicht oder spät gemeldet, das passiert mit den neuen Funktionen nicht. Beispiel:

Code: Alles auswählen

EnableExplicit

Procedure SetTime()
  SetWindowTitle(0, FormatDate("%hh:%ii:%ss", Date()))
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
AddWindowTimer(0, 1, 500)
BindEvent(#PB_Event_Timer, @SetTime())

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend 
Ich wollte heute ein Projekt von mir von EM_Events auf BindEvents umstellen, bin aber auf Probleme gestossen,
insofern werde ich alte Projekte so lassen und in neuen BindEvents nutzen.

Es wird also auch kein Update auf Module geben!

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.
Bild
Antworten