Seite 3 von 4
Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 16:38
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.
Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 16:46
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

Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 16:54
von Lambda
Maps sind doch auch mit 512 Elementen initialisiert

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 ^^
Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 17:13
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
Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 17:14
von Lambda
So habe ich es bisher gelöst, aber es geht ja um Plattform Unabhängigkeit. ^^
Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 17:17
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

Re: EM_EventManager (crossplattform)
Verfasst: 27.03.2013 17:19
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*
Re: EM_EventManager (crossplattform)
Verfasst: 30.03.2013 15:59
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
Re: EM_EventManager (crossplattform)
Verfasst: 23.06.2013 13:14
von c4s
Stimmt mein Eindruck, dass z.B. diese Include mit PB5.20 (wegen BindEvent() etc.) mehr oder weniger überflüssig geworden ist?
Re: EM_EventManager (crossplattform)
Verfasst: 23.06.2013 13:27
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
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