![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
¿Sobre que tipo de control quieres colocar tu rectángulo seleccionador?. Me da la impresión que es sobre un TImage. En ese caso tienes que cambiar alguna cosa. El ejemplo que puse es para una ventana sin mas.
Mira esto: Archivo Adjunto 1222 PD No puedo mantener mucho tiempo los archivos subidos pues mi cuota esta casi al límite. Última edición por escafandra fecha: 21-05-2008 a las 12:09:51. |
|
#2
|
|||
|
|||
|
ok, ya lo tengo descargado, voy a ponerme con ello.
Muchas gracias. |
|
#3
|
|||
|
|||
|
Si, quiero colocar mi rectángulo seleccionador sobre el TImage, una vez visto el ejemplo, me surge una duda... corregidme si no estoy en lo cierto, a ver...
yo tengo una funcion (boton seleccionar) donde dibujo el rectángulo... y creo que es de allí dónde tengo que llamar a lós métodos de FormMouse Down y demás... tendría: void __fastcall TForm1::ToolButton5Click(TObject *Sender) //seleccionar //un trozo d imagen { TRect *SelectRect; SelectRect= new TRect(100,100,200,200); Imagen->Canvas->Rectangle(100,100,200,200); //hasta aquí dibujo el rectángulo, y ahora tendría que llamar o hacer alguna referencia a los métodos del ratón... pero cómo los llamo desde aqui??? Imagen->FormMouseDown(); //algo asi?? pero es que realmente el FormMouseDown() no es un método de Imagen... y en qué orden las tendría que llamar?? } Gracias, saludos |
|
#4
|
||||
|
||||
|
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); Código:
TRect *SelectRect = new TRect(100,100,200,200); . . . delete SelectRect; Código:
TRect SelectRect(100,100,200,200); 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.
}
}
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. |
|
#5
|
|||
|
|||
|
Hola, si, te has explicado muy bien, pero sigue sin salirme, llego a dibujar el rectángulo, pero no consigo moverlo ni cambiarlo de tamaño, ni hacer nada con él. Te pongo el código de lo que llevo, a ver si le vemos algo, le puse la variable bool seleccionar como me indicaste:
//defino la variable como global bool seleccionar; void __fastcall TForm1::ToolButton5Click(TObject *Sender) //seleccionar //un trozo d imagen { seleccionar=true; TRect SelectRect(100,100,200,200); Imagen->Canvas->Brush->Style=bsClear; Imagen->Canvas->Pen->Style=psDot; Imagen->Canvas->Rectangle(SelectRect); } void InvalidateFrameRect(TControl *Control, TCanvas *Canvas, TRect Rect) { if(seleccionar){ InvalidateRect(Canvas->Handle, &Rect, true); Control->Perform(WM_PAINT, (int)Canvas->Handle, 0); } } //---------------------------------------------------------------------------- void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(seleccionar){ AccionPoint = TPoint(X+Imagen->Left,Y+Imagen->Top); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(seleccionar){ if(AccionPoint.x!=-1 && AccionPoint.y!= -1 && Imagen->Picture->Graphic) { InvalidateFrameRect(this, Canvas, SelectRect); if(X<0) X=0; if(X>Imagen->Width) X = Imagen->Width; if(Y<0) Y=0; if(Y>Imagen->Height) Y = Imagen->Height; X += Imagen->Left; Y += Imagen->Top; SelectRect = TRect(AccionPoint.x, AccionPoint.y, X, Y); SelectRect = TRect(min(SelectRect.Left, SelectRect.Right), min(SelectRect.Top, SelectRect.Bottom), max(SelectRect.Left, SelectRect.Right), max(SelectRect.Top, SelectRect.Bottom)); Canvas->Rectangle(SelectRect); } } } //------------------------------------------------------------------------------------------------ void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(seleccionar){ AccionPoint = TPoint(-1,-1); } } He probado escribiendo algún que otro ShowMessage... y no se mete en ninguno de los métodos del ratón.... ¿qué es lo q me falta? saludos. |
|
#6
|
||||
|
||||
|
Pues si como veo es el código que te expuse, lo que te falta es asignar las funciones de los eventos del ratón a los eventos de ratón de TImage.
En el Form selecciona el TImage. En el Object Inspector selecciona events del TImage. Busca OnMouseDown, OnMouseUp y OnMouseMove y vete asignando cada uno a las funciones que deben manejarlos (FormMouseDown, FormMouseUP y FormMouseMove). Saludos. ![]() |
|
#7
|
|||
|
|||
|
ayyy, he puesto los eventos de onMouseDown y demás asignados a las funciones tal y como me has dicho y sigue sin salirme.... q raro... ayyy nunca lo conseguiré...........que me falta ahora???
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Selección en Excel | Jordy | Servers | 1 | 06-12-2005 08:55:00 |
| Selección de figuras | Luli | Gráficos | 8 | 01-12-2004 11:08:49 |
| seleccion dbgrid | davidgaldo | Conexión con bases de datos | 3 | 26-02-2004 09:45:33 |
| Seleccion en DBLookUpComboBox | NuncaMas | Varios | 1 | 22-12-2003 18:41:21 |
| una seleccion | YolandaM | Impresión | 2 | 04-10-2003 20:11:59 |
|