FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Estoy mirando a ver si puede ser con unas opciones del TShape que son onDragOver y onDragDrop que son de arrastrar y soltar, pero no me hacen nada... y con respecto a lo de la redimensión no se aún cómo hacerlo.
Aunque alguna forma habrá no? Saludos. |
#2
|
||||
|
||||
Debes usar el evento OnMouseDown, OnMouseUp y OnMouseMove tanto de la TImage como del TShape para controlar la seleccion.
En el OnMouseDown defines el Left y Top del TShape, y en el OnMouseMove defines el Right, Button del mismo hasta que sea llamado el evento OnMouseUp; ésto te dará el efecto necesario. Saludos |
#3
|
|||
|
|||
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. |
#4
|
|||
|
|||
Cita:
Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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. |
#7
|
||||
|
||||
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. |
|
|
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 |
|