![]() |
![]() |
| 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 |
|
#14
|
||||
|
||||
|
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. |
| 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 |
|