PDA

View Full Version : Wie finde ich heraus welche Seite gerade geladen/angezeigt wird in GUI Extensions?



SimonSlater
02-03-2013, 18:04
Hallo liebe Scriptgemeinde,

Ich würde gerne in der Schiffsansicht und in der Schiffsliste unterschiedliche Ausgaben per GUI Extension anzeigen. Ich bin mir jetzt aber nicht sicher, wie ich den aktuellen Kontext herausbekommen kann. Es gibt ja diverse Möglichkeiten wie CGuiEventOnTableAfterCreate nur auf welcher Seite treten welche Events auf? Ich hätte auch gerne folgendes:

Wenn Schiffsansicht dann zeige Nachricht1 und übergebe CMyShip Objekt an FunktionX;
Wenn Schiffsliste dann zeige Nachricht 2;

Hat da schon jemand Erfahrungen gesammelt und kann mir weiterhelfen?

EDITH: Ich vermute dass das CGuiEventFilter eine Rolle spielt aber ich finde die Beispiele nicht mehr.

Elchi
03-03-2013, 19:43
Mehrere Callback-Funktionen, z. B.:

Var* Filter* As* CGuiEventFilter* =* CGuiEventFilter.Create().AddControl(EGuiControl.Sh ipList);



ScriptContext.RegisterEvent(EGuiEventType.TableBef oreCreate,* AddressOf* CallBack_TableBeforeCreate,* Filter);

siehe die [Extension] Code example for extensions von Arakis




http://game3.stne.net/objectexplorer?p=EGuiPage

lg
Elchi

SimonSlater
04-03-2013, 08:35
Danke das hilft mir schon weiter. Habe mich mittlerweile auch wieder an die Bibliothek erinnert.

SimonSlater
05-03-2013, 13:32
Ich habe da noch ein kleines Problem. Ich würde gerne das Event "PageBeforeCreateControls" mehrfach verwenden. Zum einen soll es ohne Filter eingesetzt werden, zum anderen als spezielle Variante nur in der Schiffsansicht. Ich habe die Events dazu so eingetragen:


Var ShiplistFilter As CGuiEventFilter;
Var ShipviewFilter As CGuiEventFilter;

ShiplistFilter = CGuiEventFilter.Create().AddControl(EGuiControl.Sh ipList_ShipTable);
ShipviewFilter = CGuiEventFilter.Create().AddPage(EGuiPage.Ship);

ScriptContext.EnableExtension();
// Schiffsliste-Events
ScriptContext.RegisterEvent(EGuiEventType.PageBefo reCreateControls, AddressOf CallBack_BeforeCreateControls);
ScriptContext.RegisterEvent(EGuiEventType.TableBef oreCreate, AddressOf CallBack_TableBeforeCreate, ShiplistFilter);
ScriptContext.RegisterEvent(EGuiEventType.TableAft erRowAdded, AddressOf CallBack_RowAdded, ShiplistFilter);
ScriptContext.RegisterEvent(EGuiEventType.TableAft erHeadAdded, * AddressOf* CallBack_HeadAdded, * ShiplistFilter);

// Schiffsansicht-Events
ScriptContext.RegisterEvent(EGuiEventType.PageBefo reCreateControls, AddressOf CallBack_ShipView, ShipviewFilter);

ScriptContext.ActivateEvents();
ScriptContext.WriteAppLog('Handelsscript Extension geladen!');
}


Jetzt habe ich das Problem, dass in der Schiffsansicht das Callback "CallBack_ShipView" nicht aufgerufen wird, sondern nur "CallBack_BeforeCreateControls". Hat da jemand eine Idee wie ich beide Callbacks aufrufen lassen kann? Wenn ich für das Schiffsansicht Event ein anderes EGuiEvenetType Event verwende, funktioniert es.

SimonSlater
07-03-2013, 12:18
Da ich das Problem mittlerweile gelöst habe, will ich euch die Lösung natürlich nicht vorenthalten:

Ich habe jetzt in die gleiche Callback-Funktion alles reingeschrieben was auf allen Seiten ausgeführt werden soll. Die Unterscheidung läuft dann über die Test() Funktion der CGuiEventFilter Klasse.


ShipviewFilter = CGuiEventFilter.Create().AddPage(EGuiPage.Ship);

ScriptContext.RegisterEvent(EGuiEventType.PageBefo reCreateControls, AddressOf CallBack_BeforeCreateControls);
ScriptContext.RegisterEvent(EGuiEventType.PageBefo reCreateControls, AddressOf CallBack_BeforeCreateControls, ShipviewFilter);

Function CallBack_BeforeCreateControls()
{
If(e.Filter.Test(ShipviewFilter))
{
ScriptContext.WriteAppLog('Diese Nachricht wird nur in der Schiffsansicht angezeigt!');
}
Else
{
ScriptContext.WriteAppLog('Diese Nachricht wird überall angezeigt!');
}
}

Searcherii
26-11-2013, 21:10
Super-Ding!

Edit:
Geht doch ohne Probleme. Das einzige was ein Problem machte war die falsche Fehlerausgabe bzw. die Fehlerhafte....