El sistema de pintado de rayas es el mismo que tu pusiste, quería que el código comenzase a serte familiar.
Tienes una forma de detectar las pulsaciones del ratón que es asignar los eventos del mismo a una función tuya, exactamente como lo haces en el entorno visual con un formulario. La mecánica sería
OnEvento = MiFuncion. Esto es aplicable a cualquier evento del control sobre el que trabajes, sólo tienes que declarar tu función como se declara el evento y asignar el puntero. De esta forma to tienes que capturar los mensajes de Windows, reservando esa técnica para cuando el control no reacciona a cierto evento que te interese.
Para ilustrar el tema te pongo un ejemplo sobre el anterior:
Código:
class TPrueba: public TWinControl
{
__published:
void __fastcall PruebaMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
private:
TImage *Imagen;
TPanel *Panel;
public:
__fastcall TPrueba(TComponent* Owner);
};
Código:
__fastcall TPrueba::TPrueba(TComponent* Owner): TWinControl(Owner)
{
Imagen = new TImage(this);
Imagen->Parent = this;
Imagen->Align = alClient;
for(int y=0; y<200; y++) {
if((y%2)==0){Imagen->Canvas->Pen->Color = clRed;}else{Imagen->Canvas->Pen->Color = clBlue;}
Imagen->Canvas->Pen->Width = 1;
Imagen->Canvas->MoveTo(0,y);
Imagen->Canvas->LineTo(199,y);
}
Panel = new TPanel(this);
Panel->Top = 0;
Panel->Left = 0;
Panel->Width = 20;
Panel->Height = 20;
Panel->Parent = this;
Imagen->OnMouseDown = PruebaMouseDown; // Asignando el evento del TImage...
}
void __fastcall TPrueba::PruebaMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
// Tu respuesta al ratón
}
Saludos.