![]() |
![]() |
| 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
|
||||
|
||||
|
El problema es que tú no puedes controlar cuando el sistema va a hacer efectivo el Paint puesto que funciona con un mensaje en la cola y se ejecutará cuando le toque, incluso otra APP que se te ponga encima va a provocar el repintado y tu zona amarilla desaparecerá. Esto hace que ocurran efectos aparentemente caprichosos.
Sólo puede funcionar si es la respuesta a WM_PAINT la que te repinta la zona amarilla. Cuando el evento Paint repinta un canvas que tiene guardado, entonces lo hará correctamente, eso es lo que hace un TImage (Tiene un TBitmap que repintará en el canvas). Puedes realizar esto, heredar tu componente de un TImage o que tu componente lo contenga. Las últimas opciones son más sencillas. Saludos. |
|
#2
|
|||
|
|||
|
Muchas gracias escafandra ahora lo entiendo.
|
|
#3
|
|||
|
|||
|
Buenas...
Siento ser un pesado.. pero mis limites no me permiten prescindir de vuestra ayuda... He decidido seguir los consejos de escafandra y modificar el componente (Tprueba) para que herede de un TImage... pero me surge un problema, al inicializar el Tpanel me salta el error : Cannot convert TPrueba* const´to TWinControl* En la linea Código:
Panel->Parent = this; Tiene alguna Solucion o solo me queda incluir un Timage en el componente TPrueba original que hereda de TCustomControl (me complicaria un poco mi aplicacion)... Espero haberme explicado bien... Gracias |
|
#4
|
||||
|
||||
|
En el caso de que necesites usar un componente cuyo Parent sea tu control, éste debe ser un TWinControl. Para conseguirlo tienes derivar de TWinControl y sobre éste colocas un TImage alineado a alClient. Al parent de tu TPanel la asignas tu control.
Saludos. |
|
#5
|
|||
|
|||
|
Buenas...
Definitivamente desisto, lo dejo... he hecho heredar TPrueba1 de un TWincontrol... he colocado un TImage que sera donde se muestre el dibujo que hago mediante Canvas... Cita:
gracias por vuestro tiempo. |
|
#6
|
||||
|
||||
|
No desistas, hombre...
Mira este ejemplo para poder empezar y seguir: Código:
class TPrueba: public TWinControl
{
private:
TImage *Imagen;
TPanel *Panel;
public:
__fastcall TPrueba(TComponent* Owner);
};
Código:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TPrueba *Prueba = new TPrueba(this);
Prueba->Width = 200;
Prueba->Height = 200;
Prueba->Parent = this;
}
//---------------------------------------------------------------------------
__fastcall TPrueba::TPrueba(TComponent* Owner): TWinControl(Owner)
{
Imagen = new TImage(this);
Imagen->Parent = this;
Imagen->Align = alClient;
for(int y=0; y<200; y++) {
if((y%2)==0){Imagen->Canvas->Pen->Color = clRed;}else{Imagen->Canvas->Pen->Color = clBlue;}
Imagen->Canvas->Pen->Width = 1;
Imagen->Canvas->MoveTo(0,y);
Imagen->Canvas->LineTo(199,y);
}
Panel = new TPanel(this);
Panel->Top = 0;
Panel->Left = 0;
Panel->Width = 20;
Panel->Height = 20;
Panel->Parent = this;
}
|
|
#7
|
|||
|
|||
|
Buenas...
Veo escafandra, que tienes mas pacienza que el Santo Job ... Al revisar tu nuevo algoritmo note que era muy similar al ultimo que yo habia implementado: en el que la aplicacion Refresh no me mostraba el panel encima del TImage pero lo mostraba fuera de este, en el resto del componente (no aplique Imagen->Align = alClient).... Partiendo de que es muy raro (por no decir imposible) que muestres un algoritmo que no funcione.. me plantee si el error no era que el TPanel se mostrase en "segundo plano" (por debajo del TImage) y .. Eureka.. el error por que no me el muestra el TPanel encima del TIMage es que no reconoce la accion pulsar botones raton cuando el cursor esta encima de este.. que es cuando debe de visualizarlo o no... Código:
void __fastcall WMLbuttonDown (Messages::TMessage Message);
void __fastcall WMRbuttonDown (Messages::TMessage Message);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_RBUTTONDOWN, TMessage, WMRbuttonDown);
VCL_MESSAGE_HANDLER(WM_LBUTTONDOWN, TMessage, WMLbuttonDown);
END_MESSAGE_MAP (TWinControl);
void __fastcall TPrueba::WMLbuttonDown (TMessage Message)
{
MostrarPanel
void __fastcall TPrueba::WMRbuttonDown (TMessage Message)
{
AnularPanel
Ahora solo me queda detectar cuando se acciona el raton sobre el TIMage Muchisimas gracias por tu pacienza. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Dibujar Elipse y Parábola pixel a pixel | Deiv | Gráficos | 9 | 28-11-2016 10:19:41 |
| Como obtener el color de un pixel | ilichhernandez | Gráficos | 11 | 02-11-2006 15:40:00 |
| Guardar y recuperar | noipa | Varios | 3 | 07-02-2006 14:46:21 |
| pasar imagen pixel a pixel | gulder | Gráficos | 7 | 26-06-2005 02:10:45 |
| ¿ Cual es la mejor forma de implementar una Pizarra con Sockets? pixel a pixel ? | sase | Internet | 1 | 22-10-2003 16:23:50 |
|