>I had created a series of constants to define image locations. The images are stored in different
>locations during development, in subfolders under the Media\UI folder. In runtime, all images will
>be dumped into a single folder called 'Graphics':
>
>
>#DEFINE IMAGE_LOC_RUNTIME ADDBS(SYS(5) + SYS(2003)) + "Graphics\"
>#DEFINE IMAGE_LOC_DEV ADDBS(SYS(5) + SYS(2003)) + "Media\UI\"
>
>#DEFINE IMAGE_LOC_BASE IIF(RUNTIME, IMAGE_LOC_RUNTIME, IMAGE_LOC_DEV)
>
>#DEFINE IMAGE_LOC_EFFECTS IIF(RUNTIME, IMAGE_LOC_BASE, IMAGE_LOC_BASE + "Effects\")
>#DEFINE IMAGE_LOC_ARROWS IIF(RUNTIME, IMAGE_LOC_BASE, IMAGE_LOC_BASE + "Arrows\")
>
>
>Using this technique, I have been able to use a constant when assigning graphics at runtime. The
>base image location is determined by either IMAGE_LOC_RUNTIME or IMAGE_LOC_DEV.
>
>Now the requirements have changed. The base location for the images will be configurable by the
>user.
>
>So the question is, how to I implement that here without going and changing all the places I'v
>used a constant?
>
>Thanks
How exactly it is going to be configured by the user - INI file, registry, local XML or some table?
In any case, you may use
>#DEFINE IMAGE_LOC_RUNTIME addbs(alltrim(MyConfigTable.MyField))
>#DEFINE IMAGE_LOC_DEV addbs(alltrim(MyConfigTable.MyField))
for example. But then the configuration table should be always opened in the places you want to access this constant. You can also use an application object and still reference it in define constant.
If it's not broken, fix it until it is.
My Blog