FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola, me podrías poner por favor, un ejemplo del uso de los eventos OnMouseDown, OnMouseUp y OnMouseMove, y cómo dentro de ellos les indico el valor de Letf, top...? No se muy bien cómo hacerlos.
Gracias, saludos. |
#2
|
|||
|
|||
Cita:
Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#3
|
||||
|
||||
Hace cuatro semanas iniciaste este mismo tema. Recuerda esto:
Cita:
Para que invalidateRect funcione mejor, haz una llamada por cada lado del rectángulo, de esa forma el área de éste no se repinta entera y el efecto visual es mejor. Evidentemente el control de ese rectángulo, lo haces con el ratón con los eventos descritos. Crea una variable o b¡miembro de la clase que almacene el TRect "selector" para que los eventos del ratón la modifiquen según su movimiento (OnMouseMove y OnMouseClick). Investiga la ayuda de Builder. |
#4
|
|||
|
|||
Ok, hago dibujando con el Canvas, en vez de utilizar un Tshape como me dices, pero ahora resulta que en la ejecución me dice : "can only modify an image if it contain a bitmap". la tendría que convertir a Bitmap para poder manipularla? si el caso es afirmativo, como seria?
Gracias. |
#5
|
||||
|
||||
Pues ahora no entiendo muy bien lo que quieres hacer. Lo que te propuse era dibujar un rectángulo que representa el área seleccionada. Esto es lo que entendí que querías hacer. Modificar el tamaño de ese rectángulo, moverlo... Para al terminar, tener unas coordenadas en un TRect que posteriormente usarías para copiar parte de la imagen.
Si lo que pretendes es modificar directamente la imagen, en tiempo real al mover el ratón, la cosa cambia. No se como has dibujado en el canvas. Si tratas de dibujar en un control al que no tienea acceso a su canvas, pues haces lo siguente: Código:
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // Si tratas de dibujar en un control al que no tienea acceso a su canvas, pues haces lo siguente: // En la definición de TForm1 defines TControlCanvas* Canvas; //Sobrecargado... // En el Constructor: // Canvas = new TControlCanvas; // Canvas->Control = this; Canvas->Pen->Mode = pmNot; Canvas->Pen->Style = psDot; Canvas->Pen->Width = 1; Canvas->Brush->Style = bsClear; //bsDiagCross; // Variable con la selección TRect SelectRect; SelectRect = TRect(0,0,0,0); } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1(TComponent* Owner) : TForm(Owner) { // Si tratas de dibujar en un control al que no tienea acceso a su canvas, pues haces lo siguente: // delete Canvas; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { SelectRect = TRect(100,100,200,200); Canvas->Rectangle(SelectRect); } Una forma de agilizar el tema, si el efecto visual de repintar el área del rectángulo no te gusta sería escribir otra función que sólo borre los lados del rectángulo: Código:
void InvalidateFrameRect(TWinControl *Control, TCanvas *Canvas, TRect Rect) { int H = Canvas->Pen->Width/2 + 1; // Normalizamos el TRect Rect = TRect(min(Rect.Left, Rect.Right), min(Rect.Top, Rect.Bottom), max(Rect.Left, Rect.Right), max(Rect.Top, Rect.Bottom)); TRect R(Rect.Left-H, Rect.Top-H, Rect.Right+H, Rect.Top+H); InvalidateRect(Control->Handle, &R, true); R = TRect(Rect.Left-H, Rect.Bottom-H, Rect.Right+H, Rect.Bottom+H); InvalidateRect(Control->Handle, &R, true); R = TRect(Rect.Left-H, Rect.Top-H, Rect.Left+H, Rect.Bottom+H); InvalidateRect(Control->Handle, &R, true); R = TRect(Rect.Right-H, Rect.Top-H, Rect.Right+H, Rect.Bottom+H); InvalidateRect(Control->Handle, &R, true); Control->Perform(WM_PAINT, (int)Canvas->Handle, 0); Control->Update(); } El resto lo haces con los eventos del ratón (OnMouseDown, OnMouseUp y OnMouseMove) a los que puedes añadir modificadores con el teclado (TShiftState) o lo que necesites. Si prefieres hacerlo con un TShape, pues también te sirve, como bien te indicó cHackAll. Espero que te sirva de ayuda. Saludos. EDITO 2: Corrijo un pequeño fallo, se debe normalizar el TRect. Te muestro un ejemplo: Archivo Adjunto 1220 Última edición por escafandra fecha: 21-05-2008 a las 12:09:51. |
#6
|
|||
|
|||
Si, en general yo quiero que la seleccione para luego operar con ella, ya sea para modificarla directamente, como puedo ser por ejemplo cambiar el color de la parte seleccionada, y también para las típicas operacion de copiar, cortar y pegar...
Me está sirviendo mucho toda la información que me has dado, pero me sigue dando el mismo error que antes comenté... "can only modify if it contains a bitmap". La imagen que abro es jpg, sin embargo si abro una imagen bmp no me da problemas, si me pinta el rectangulo. ¿Qué puedo hacer para que también lo haga con las imágene jpg? Gracias. |
#7
|
||||
|
||||
¿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. |
|
|
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 |
|