Uit het archief van Erik Visser 2

Je hoort de puristen nogal eens zeggen dat het niet nodig is binnen VO om met GLOBAL gedeclareerde variabelen te werken. De vraag is echter, hoe dan? Eigenlijk, maar dat is met alles als je het eenmaal weet, is het antwoord simpel. Door het gebruik van de global App-klasse. Als je hier een sub-klasse van maakt, en daar voor elke te gebruiken 'GLOBAL' een ACCCESS en eventueel een ASSIGN Method schrijft, kun je deze op elke plaats in je programma aanroepen.

 

De werkwijze is als volgt:

 
     CLASS MyApp INHERIT App
     INSTANCE MyFormerGlobal
 
     ACCESS MyFormerGlobal CLASS MyApp
     RETURN MyFormerGlobal
 
     ASSIGN MyFormerGlobal( uVal ) CLASS MyApp
     RETURN MyFormerGlobal := uVal 
 

 

De init methode is vervolgens een goede plaats om waarden aan deze var's toe te kennen, maar dat kan natuurlijk (als je ook die ASSIGN hebt geschreven) ook elders in de applicatie

 

     METHOD INIT( oOwner ) CLASS MyApp
     SUPER:init( oOwner )
     MyFormerGlobal := "Aap noot mies" // veel verder ben ik op school niet gekomen.....
 

 

 

Vervolgs gebruik je een start functie om de applicatie op te starten.

 
     FUNCTION Start
     LOCAL oApp AS AppSettings
     __SetAppObject(oApp:=MyApp{} ) // Zorg ervoor dat MyApp als App-classe gezien wordt
     oApp:Start()

 

En in plaats van de gebruikelijke App:Start() method gebruik je nu een MyApp:Start()

 

     METHOD Start() CLASS MyApp
     LOCAL oMainWindow AS StandardShellWindow
     oMainWindow := StandardShellWindow{SELF}
     oMainWindow:Show(SHOWCENTERED)
     SELF:Exec()
 
 

Nu is er nog een probleem te overwinnen, dat zijn de compiler-warnings. Die zullen op het moment dat je met GetAppObject() functie een van de instancevars van de MyApp klasse opvraagt, aangeven dat dat geen methods van de App klasse zijn. Dit probleem is te omzeilen door een eigen functie te schrijven:

 

     FUNCTION MyGetAppObject 
     RETURN GetAppObject()

 

Nu kun je overal in je programma, dus ook in een library, als volgt de MyFormerGlobal variabele benaderen:

 
     uLocal := MyGetAppObject():MyFormerGlobal
Commentaar van anderen:
nike air max 90 op 25-8-2010 om 9:52
mens shoes nike air force one replica armani sunglasses nike shoes
Geef feedback:

CAPTCHA image
Vul de bovenstaande code hieronder in
Verzend Commentaar