I never did, but you can also customize the normal print preview toolbar, so that printer choice could be added into that:
This tells about hiding the print button, so you have a pure preview only, but it also explains how to customize that native toolbar more generally, how to get into its customization mode.
Besides that in the lengthy thread mostly between me and ameedoo we finally discussed FoxyPreviewer modifications. FoxyPreviewer goes a much more complete approach available for VFP9 by replacing the default reportpreview.app of VFP9 with a whole new implementation. Within that new app module, the FoxyPreviwer developers could not only redesign the preview window, they also simply did their own toolbar and within that they even allow redirecting the preview into xls, pdf or word.
I would even keep it simpler in this case, users can close the preview, select the correct printer and restart print preview. Especially since your printer configuration places technical printer choices in named configuration items, you can also offer a custom GETPRINTER dialog letting them choose from your known and preset invoce/receipt/credit note printer settings without needing to know the details configured in them. And if that settings are wrongly configured, that is just a second level problem, as you only need to set this correct once in the typical lifetime of a register, maybe several further times, if the POS printer needed an replacement and again if usual letter/A4 printers change.
And still - while such a choice is user friendlier, you overestimate the complexity you want to hide in comparison with GETPRINTER, in the first place its only local printers anyway, so there is no big need for a simpler dialog. In the end any technical personal may make a first setup, though it's nothing so special needing an expert. Windows itself and Word also offer nothing much better than what VFP offers with GETPRINTER().
If you restrict too much and on false assumptions, users can't correct this. And that doesn't mean an administrator failed to make the initial printer choices or installed printer drivers wrongly or with non speaking names - by the way, that point of printer driver setup is where you can let a printer have a user friendlier name already, you don't need to name your printer just with the technical name of the vendor, you can call it slip printer and document printer on that low level already. In the end the admin might have totally correctly set this up at the time of installation, but things can change over a long time. And if admins are not available and end users get no choice but preconfigured known names, they will be lost with too few options they can't correct. That's exactly what happens with such thoughts about keeping users off of seemingly too low level settings to make. If only admins can make certain settings, that's what I said earlier, is what will hurt more, than it helps. A good design here is to allow easy config and if that doesn't help, offer more detailed setup. Windows showcases this with many dialogs having an extended or advanced mode.
So finally there is no problem of what to offer users and where to put the balance of intelligence and preventing harm. You don't need to choose between allowing the user a low level choice or giving him the most proper choices intelligently. You can offer the intelligent choice and allow further choices in advanced mode, taking into account you are only providing your own code, not yourself. It's neither you nor your software failing, if it can't automatically find the correct printer. And your software also doesn't shine with such a feature, as it's a not hard and once only task most of the time anyway. Software shines with intelligent features within the major work flows users do most frequent, so for example how fast slips print will be more important, how nice they look, how good they are layouted...
Let me end in a real life comparison once more. In first aid you may be confronted with a task only a real doctor could really do, eg reanimation. If you ever visited a course on first aid you get taught that you for example better try a reanimation of a non breathing crash victim than wait for a doctor having learned it better. A novice trying can be better here than a non present doctor. In the same sense don't restrict users to not be able to do administrative takss of your softwar configuration themselves - I am not talking of real administrative tasks here, that of course can give them too much powers. Choosing the correct printer is really something you can do with trial and error not at all harmful. Most dangerous harm is waste of thermal printer paper and/or ribbon.
Bye, Olaf.