GELÖSCHT

Für allgemeine Fragen zur Programmierung mit PureBasic.
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:34, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mehrere Callbacks für ein Fenster?

Beitrag von Kiffi »

nimm doch die normale PB-Eventschleife. Dann musst Du
Dich auch nicht mit Callbacks herumquälen.

Grüße ... Kiffi
a²+b²=mc²
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:35, insgesamt 1-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Mehrere Callbacks für ein Fenster?

Beitrag von edel »

Natuerlich kannst du das machen, wobei es wohl eher unuebersichtlich wird, wenn du fuer jedes Event eine 'Include' benutzt.
Als Alternative kannst du dir EasyVENT anschauen, http://www.purebasic.fr/english/viewtop ... 14&t=28810
Das ist auch noch ein Blick wert : http://msdn.microsoft.com/en-us/library ... 2(v=vs.85)
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:35, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Mehrere Callbacks für ein Fenster?

Beitrag von STARGÅTE »

Das hier sollte auch funktionieren:

Code: Alles auswählen

Prototype.i WindowCallback(WindowID.i, Message.i, wParam.i, lParam.i)

Structure WindowCallbackElement
	Callback.WindowCallback
EndStructure

Global NewList WindowCallbackElement.WindowCallbackElement()

Procedure MainWindowCallback(WindowID.i, Message.i, wParam.i, lParam.i)
	ForEach WindowCallbackElement()
		WindowCallbackElement()\Callback(WindowID, Message, wParam, lParam)
	Next
	ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure

Procedure AddWindowCallback(Callback.WindowCallback)
	If ListSize(WindowCallbackElement()) = 0
		SetWindowCallback(@MainWindowCallback())
	EndIf
	AddElement(WindowCallbackElement())
	WindowCallbackElement()\Callback = Callback
EndProcedure
Mit AddWindowCallback() kannst du dann verschiedene Callbacks "hinzufügen".
Beim ersten mal wird dann auch der echte Callback erstellt, in dem wird dann einfach die Liste aller deiner Callbacks duchgegangen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Mehrere Callbacks für ein Fenster?

Beitrag von RSBasic »

@mirca
"Wenn" Prozeduren allgemein langsamer sind, die sowieso in deiner extra Include-Datei definiert sind, dann inkludiere sie direkt und zwar mit XIncludeFile.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:35, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Mehrere Callbacks für ein Fenster?

Beitrag von STARGÅTE »

mirca hat geschrieben:Ah cool und das klappt? Teste ich gleich ...
Wird vermutlich funktionieren, diese Vorgehensweise ist jedoch nicht effizient, da ja mit jedem Event alle Prozeduren aufgerufen werden, und in ihnen dann erst getestet wird, ob das Event zur Prozedur gehört...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
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: Mehrere Callbacks für ein Fenster?

Beitrag von NicTheQuick »

Man könnte auch Rückgabewerte für die Callbacks definieren und nur dann in den nächsten aus der Liste springen, wenn der Rückgabewert des vorherigen sagt, dass er nichts getan hat. So kann man immerhin durchschnittlich 50% der Zeit sparen.
Aber selbst ohne diese Optimierung kann ich mir nicht vorstellen, dass diese Vorgehensweise sonderlich langsam sein wird. Wenn ich sehe, was andere allein schon alles in ihre Hauptschleife werfen und dann noch im Callback ganze Fensterbereiche manuell "ausmalen".
Antworten