Hmm. I would create my own class derived from TCustomControl, let's say: TMyDrawEdit. In this class, I would draw on a bitmap (in memory), the content of which would then be applied to the canvas of the TMyDrawEdit component. The thing is, I don't know what you're displaying (or whether you're just displaying it). I needed to display and edit elements of simple vector graphics, the content of which changed in response to events generated by TMyDrawEdit and flags set in the program by menus, buttons, etc. The actual data was stored in a container (say: TMyContainer). The TMyDrawEdit component had a pointer to the container (TMyContainer) from which it retrieved data and, based on it, drew content on a bitmap and applied it to its canvas (meaning: TMyDrawEdit). Mouse and keyboard events generated by TMyDrawEdit were captured by the controller component (say: TMyController). The controller performed operations on data (depending on events and flags currently set in the program) and placed the results in a container (TMyContainer). The container stored data and wrote it to and read from the file. The file was XML-based. It's just a lot of work to do.