Mit dem kleinen Code lassen sind Flags/Werten Strings zuweisen, die dann z.b. kombiniert als String mit allen enthaltenen Stringbezeichnungen ausgegeben werden kann. Macht sich ganz praktisch, wenn man z.b. bei *.ini-Dateien Tastenbelegungen anhand von Strings erkennen will, o.ä.
Code: Alles auswählen
Structure __UF_userflag
name$
flag.l
EndStructure
Global NewList __UF_userflags.__UF_userflag()
Procedure UFRegister(userflag.l, flagname$)
AddElement(__UF_userflags())
__UF_userflags()\flag = userflag
__UF_userflags()\name$ = flagname$
ProcedureReturn ListIndex(__UF_userflags())
EndProcedure
Procedure UFUnregisterFlagByFlag(userflag.l)
ForEach __UF_userflags()
If __UF_userflags()\flag = userflag
DeleteElement(__UF_userflags())
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
Procedure UFIsFlag(userflag.l)
ForEach __UF_userflags()
If __UF_userflags()\flag = userflag
ProcedureReturn ListIndex(__UF_userflags())
EndIf
Next
ProcedureReturn -1
EndProcedure
Procedure UFIsName(flagname$)
ForEach __UF_userflags()
If __UF_userflags()\name$ = flagname$
ProcedureReturn ListIndex(__UF_userflags())
EndIf
Next
ProcedureReturn -1
EndProcedure
Procedure.s UFGetFlagString(userflag.l)
ForEach __UF_userflags()
If __UF_userflags()\flag = userflag
ProcedureReturn __UF_userflags()\name$
EndIf
Next
EndProcedure
Procedure.s UFGetFlagStrings(userflag.l, seperator$)
Protected flagstrings$, nonfirstflag.b
ForEach __UF_userflags()
If __UF_userflags()\flag & userflag
If nonfirstflag = #True
flagstrings$ + (seperator$ + __UF_userflags()\name$)
Else
flagstrings$ + __UF_userflags()\name$
nonfirstflag = #True
EndIf
EndIf
Next
ProcedureReturn flagstrings$
EndProcedure
Procedure UFGetFlagByName(flagname$)
ForEach __UF_userflags()
If __UF_userflags()\name$ = flagname$
ProcedureReturn __UF_userflags()\flag
EndIf
Next
EndProcedure
Procedure.s UFGetNameByFlag(userflag)
ForEach __UF_userflags()
If __UF_userflags()\flag = userflag
ProcedureReturn __UF_userflags()\name$
EndIf
Next
EndProcedure
#FLAG_k = 1
#FLAG_t = 2
#FLAG_x = 4
#FLAG_b = 8
#FLAG_h = 16
UFRegister(#FLAG_k, "kabeljau")
UFRegister(#FLAG_t, "thunfisch")
UFRegister(#FLAG_x, "xanadu")
UFRegister(#FLAG_b, "bär")
UFRegister(#FLAG_h, "hengst")
UFUnregisterFlagByFlag(#FLAG_t)
Debug "buby ist auf platz " + Str(UFIsName("bär"))
Debug "buby hat die nummer " + Str(UFGetFlagByName("bär"))
Debug "nummer " + Str(#FLAG_b) + " ist ein " + UFGetNameByFlag(#FLAG_b)
Debug UFGetFlagStrings(#FLAG_x|#FLAG_h|#FLAG_t|#FLAG_k, " - ")