Ver Mensaje Individual
  #19  
Antiguo 08-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En el ejemplo, los eventos del ratón, los maneja el propio formulario, aunque si te fijas, son eventos producidos por TImage. La función que maneja un evento, no suele ser miembro de la ventana que lo provoca, sino del formulario, de esa forma las VCL facilitan el no tener que derivar una clase de cada ventana que se use. En general esto es así a no ser que estemos programado un control.

Por otra parte no se si te has fijado que el canvas utilizado para pintar tu rectángulo no es el del TImage sino el del propio formulario. Con esto evitamos el parpadeo que aveces aparece al pintar en un TImage.

Esta expresión no deberías usarla:
Código:
TRect *SelectRect;
SelectRect= new TRect(100,100,200,200);
Esto te obliga a destruir explicitamente el TRect, una vez usado:

Código:
TRect *SelectRect = new TRect(100,100,200,200);
.
.
.
delete SelectRect;
Como TRect no pertenece a la estructura de clases de la VCL propiamente dicha, no estás obligado a usar punteros, asi que es mas fácil esto:

Código:
   TRect SelectRect(100,100,200,200);
¿No te parece?. No creas un puntero a un objeto, sino el objeto directamente.

Los Eventos del raton no los llamas tu, se producen al utilizar el ratón. Tu puedes controlarlos. Si no quieres que tu rectángulo selector se pinte hasta que no pulses previamente un botón, coloca una bandera en el evento, para que no se ejecute si no es verdadera.

Código:
Form1::Button1Click(..){
  Seleccionar = true; // Seleccionar es una variable global tipo bool usasa como bandera.
}

Form1::OnMouseMove(...){
    if(Selecionar){

      //Resto del evento.
   }
}

Form1::OnMouseDown(...){
    if(Selecionar){

      //Resto del evento.
   }
}
Form1::OnMouseUp(...){
     if(Selecionar){
 
       //Resto del evento.
    }
}
¿Me explico?.

Un buen ejercicio sería programar todo esto de la selección como un componente visual que incrustes en un formulario y al que asignes una propiedad de tipo control donde pintarás tu rectángulo selector.

Saludos.

Última edición por escafandra fecha: 08-04-2008 a las 23:52:49.
Responder Con Cita