Ein smarter Eventhandler für Gadgets/Menuitems und Toolbar

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.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Ein smarter Eventhandler für Gadgets/Menuitems und Toolb

Beitrag von Kurzer »

Hallo PureLust,

auch wenn ich selbst das feature bislang nicht gebraucht habe... ich hab es jetzt trotzdem eingebaut.
Es war dafür auch keine größere Änderung nötig.

Viel Erfolg damit (falls das Include jemand nutzt).
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Ein smarter Eventhandler für Gadgets/Menuitems und Toolb

Beitrag von Kurzer »

Ups, ich hatte den Eventhandler seinerzeit noch zweimal erweitert, aber vergessen diesen Thread hier anzupassen. Das wird hiermit nachgeholt. Sorry an alle die meinen Code benutzen und somit nicht in den Genuss der neuen Funktionalität gekommen sind.

Änderungen:
Alle evh_SetxyzEvent() Befehle enthalten nun zusätzlich den Parameter WindowNr.
Dieser ist für den neuen Befehl evh_RemoveEvent() nötig.

Den neuen Befehl evh_RemoveEvent(WindowNr, ItemNr, EventType) zugefügt.
Hiermit können während der Programmlaufzeit einzelne Eventzuordnungen wieder entfernt werden oder alle Eventzuordnungen eines Fensters auf einen Schlag entfernt werden.

Der Befehl evh_Init() muss nicht mehr aufgerufen werden. Der Handler initialisiert sich bei der ersten Eventzuordnung selbst.

Die evh_EventArgsstruct wurde um iEventTimer erweitert.

\iEvent
\iEventType
\iEventWindow
\iEventGadget
\iEventMenu
\iEventTimer
\iEventwParam
\iEventlParam

Hiermit wird einer Eventprozedur, die einem WindowTimer-Event zugeordnet wurde, die Nummer des Timers übermittelt. Näheres siehe Beispielquellcode im Downloadpaket.

Das Downloadpaket und der Infotext im ersten Beitrag wurde erweitert.

Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
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: Ein smarter Eventhandler für Gadgets/Menuitems und Toolb

Beitrag von ts-soft »

Ich habe da gleich einen Verbesserungsvorschlag, weil in der jetzigen Form klappt es es nicht mit dem Nachbarn :mrgreen:

Code: Alles auswählen

Structure evh_EventArgsstruct																		; Parameter-Struktur die den Eventprozeduren mittels Pointer übergeben wird.
	iEvent.i
	iEventType.i
	iEventWindow.i
	iEventGadget.i
	iEventMenu.i
	iEventTimer.i
	CompilerIf #PB_Compiler_OS = #PB_OS_Windows
	iEventwParam.i
	iEventlParam.i
	CompilerEndIf
EndStructure

Procedure.i evh_ProcessEvents(...)
...
	  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
	  evh_stEventArgs\iEventwParam = *stEvents\iEventwParam
	  evh_stEventArgs\iEventlParam = *stEvents\iEventlParam
	  CompilerEndIf
...
	  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
	  evh_stEventArgs\iEventwParam = EventwParam()
	  evh_stEventArgs\iEventlParam = EventlParam()
	  CompilerEndIf
...
Schon funktioniert es auch beim Nachbarn :D

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
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Ein smarter Eventhandler für Gadgets/Menuitems und Toolb

Beitrag von Kurzer »

Hallo ts-soft,

danke für den Hinweis bzgl. der Windows-only Parameter.
Wäre es nicht schlauer nur die beiden Event[w/l]Param() Aufrufe per Compilerif zu kapseln und auf allen non-windows Plattformen die beiden Strukturfelder iEventwParam.i und iEventlParam.i mit 0 zu initialisieren statt sie komplett wegzulassen?

Kommt mir konsistenter vor und dann muss auch der erklärende Text nicht angepasst werden. ;-)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
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: Ein smarter Eventhandler für Gadgets/Menuitems und Toolb

Beitrag von ts-soft »

Was machen die Parameter denn noch für einen Sinn?
Musst Du entscheiden, so genau hab ich mir den Code nicht angeschaut, aber
Elemente die keinen Sinn machen, würde ich immer weglassen. Die Frage ist
ja auch, sollten diese beiden undokumentierten Funktionen überhaupt implementiert
werde? Ich hab die noch nie genutzt, Callbacks halte ich da für zweckmässiger, weil
die auch zuverlässiger funktionieren.

Mach wie Du denkst, ich würde das komplett entfernen.

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