Antes de empezar, creo que deberías tener claro hacia dónde vas a ir y dónde quieres llegar (lo que quieres conseguir).
A mi se me ocurren dos enfoques; Uno sencillo, pero limitado. Otro más complejo y elaborado. El problema no puedes pasar de uno a otro de forma fácil.
* SENCILLO: Se trata de utilizar componentes de delphi, es decir, como bien ha comentado Ñuño, se trata de crear un contenedor (lienzo) y sobre él "crear" componentes, a los que puedas manipular sus propiedades. Shapes, Imagenes, Recuadros, Labels,...
+
Crear y destruir componentes en runtime.
+
Seleccionar Shapes visualmente.
+
Cómo mover controles en unform (runtime)
+
Aquí se discutió cómo crear una especie de IDE.
+
En los foros también hay hilos para crear controles en runtime.
+
Para crear líneas sobre el form o
una cuadrícula (revisar el código).
En este caso la limitación viene dada por los propieos controles de Delphi y el hecho de que todo el trabajo vas a tener que ir haciéndolo tú de forma manual.
* COMPLEJO:
El sistema complejo, sería diseñar una base que luego te permita añadir más posibilidades al sistema. Me explico...
El contenedor u objeto que va a contener el dibujo, lo crearía desde cero. Los objetos gráficos los crearía desde cero; Todos heredando del mismo y con las operaciones básicas. A partir de ese punto ya no tienes la limitación que te dan los componentes de Delphi. Para que me entiendas sería algo similar a:
+ Drawing Objects de Angus Jhonson (
link,
pantallazos)
+ TCAD de codeidea (
pantallazos,
link)
+ TSimpleGraph de DelphiArea (
link, pantallazo)
Personalmente he utilizado bastante este último (que además es gratuíto y con fuentes).
En este caso tienes implementadas infinidad de opciones que de otra forma tendrías que programar "a mano" (selección, Multiselección, Zoom, pan, impresión, Exportación,...)