What I would do is:
Add a timer control into this form;
Per Timer event - check if a newer (check the date stamp) file (full path) with the same name, as the one currently in use, appeared in a dedicated directory;
If it did - disconnect the Picture property from the current image file, copy over the newer one and assign it to the Picture property.
Thus, H/R won't interfere with the working program directly - and won't get that "File is in use" error blown on their faces. winky smile
This scenario needs programming, true, but it would be 1-shot-deal only, which, IMHO, is much more preferable than IT getting calls from H/R "Stop you bloody program we need to change the picture!" every so often - wouldn't you agree, colleagues?
HTH.
This is a great suggestion. Another is to use a custom DLL, call a dll function from the paint() event which then BitBlt's the previously loaded image onto the form at specified coordinates.
Using this model the bitmap would have been loaded from disk at some point by the DLL (which opened the file, read the data, closed the file), and then on each paint event following a specified interval, check to see if a newer file exists in the file's directory.
Using this method the image file could appear in a common location along with the rest of the app's data and image files, be loaded, edited, saved, and drawn by the DLL directly from there (without needing a separate directory).
This method also works quite well for creating custom class objects without using ActiveX / OLE embedded objects. By maintaining and drawing their bitmap-to-paint in the DLL itself, and by using a backstyle=0, no-border shape object to outline its position (and intercept mouse events), any custom control of any kind can be created and drawn. And this over any window that has an hwnd that can be intercepted.
I used this technique to create a custom grid class for narrow objects that went down two columns on the left, continued from the top down two columns in the middle, and would up back to the top and down two columns on the right, providing a simple way to navigate through a long, yet narrow set of data items. I put a textbox object in the upper-left corner to capture keystrokes and navigate and do user input, and created a small protocol of functions to query if any data had changed, what row and column it was, and what the new values were, etc., allowing even for changed items to appear in a different color until they were saved (if an explicit "save changes" button was in use), and it worked perfectly.
I did this originally in VFP6, and later in 8 and 9.
Best regards,
Rick C. Hodgin