Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #14  
Antiguo 05-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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);
}
Cada vez que modificas el rectángulo, lo tienes que borrar y repintar. Para borrar: InvalidateRect.

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();
}
LLevas una variable de la clase TForm (o la que sea) que sea un TRect con las coordenadas de tu selección que son a su vez la de tu rectángulo selecionador...
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.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 09:37:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi