Sorry, wenn ich das hier ausbuddel, aber ich habe mich gerade ähnliches gefragt ("warum kann ich im Modul nicht auf Konstanten des Hauptprogramms zugreifen?"), zumal bei WIN-Api Konstanten offenbar eine Ausnahme gemacht wird.
Code: Alles auswählen
Enumeration
#GG_DATAMODE_INTEGER
#GG_DATAMODE_FLOAT
EndEnumeration
DeclareModule GraphGadget
#GG_BORDERSIZE = 1
#GG_BUTTONSGAPSIZE = 5
Declare Draw(*GraphGadget.GraphGadget, iDataMode=#GG_, iDrawButtons.i=#False)
#WM_
EndDeclareModule
Module GraphGadget
;...
EndModule
Die beiden #GG_DATAMODE... Konstanten habe ich in den Hauptscope gelegt, damit ich bei Nutzung des Moduls ohne UseModule einfach...
GraphGadget::Draw(*GHnd, #GG_DATAMODE_INTEGER) schreiben kann und nicht die umständliche Variante
GraphGadget::Draw(*GHnd, GraphGadget::#GG_DATAMODE_INTEGER), wenn ich die beiden Konstanten innerhalb des Moduls deklarieren würde.
So weit, so ungut. Ich kann aus einem Modul heraus also nicht auf selbst deklarierte Konstanten des Hauptprogramms zu greifen.
Auf der anderen Seite geht das mit API-Konstanten sehr wohl.
So ganz kann ich daher die (unvollständige) Abschottung nach außen nicht nachvollziehen.
Klar, wenn man den Zugriff auf
sämtliche Konstanten aus einem Modul heraus unterbinden würde, wäre das völlig idiotisch, aber warum die Abschottung bei den selbst definierten Konstanten im Hauptscope? Bei der Verwendung von "fremden" Konstanten kann ich aus dem Modul heraus doch nichts im Hauptscope kaputt machen. Mich würde der Sinn dahinter interessieren.
PS: Ich löse das jetzt damit, dass ich die betreffenden Konstanten zweimal deklariere. Innerhalb und außerhalb des Moduls.
