Question: Is there any way to paint specific cells on Delphi's TStringGrid without using the OnDrawCell event, for instance if I click a button the specified cells will be painted depending on their content.

Answer: 
To keep the painting persistent, the way you should do this is as follows:

* in the button OnClick event handler, set some data that distinguishes these cells
* in the same event handler, invalidate the painting area of cells
* in OnDrawCell event handler do a normal painting for the cells not distinguished
* in the same event handler, paint your distinguished cells differently

--jeroen
No, that is not possible. The next time Windows decides to redraw the control (something you can't really control), everything you have drawn will be overpainted by the Control's `Paint` method and all painting-related events. 

You have to use the event approach to do custom painting like that as Jeroen points out.