Many thanks, skalogryz, this has cured the problem, but begs the question 'Why?'
Interestingly, I did originally try something similar:
if ColorDialog1.Execute then
begin
Fred := ColorDialog1.Color;
ColorButton2.ButtonColor := Fred;
RichMemo1.Color := Fred;
end;
with the same result as your code, but because both solutions make the ColorDialog appear twice (unless the Cancel button is pressed), I dropped the conditional clause.
So, it looks like that it's a case of the lesser of two evils :-(
Can this be reported as a bug and, if so, how?
Again, many thanks!
Steve
[Edited to add code tags; please read
How to use the Forum].