Ver Mensaje Individual
  #12  
Antiguo 27-02-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola NEG1414. Pude compilar tu proyecto y he visto que tienes un error al capturar el AreaPanel. El erreo está al definir el TRect fuente y destino. Lo correcto sería así:
Código:
void TPrueba::MostrarPanel()
{

   AreaPanel->Width   = 20;
   AreaPanel->Height  = 20;

   TRect Rs = Rect(PPx, PPy, PPx + AreaPanel->Width, PPy + AreaPanel->Height);
   TRect Rd = Rect(0,0,AreaPanel->Width,AreaPanel->Height);
   AreaPanel->Canvas->CopyRect(Rd, Canvas, Rs);

   //Posicionar  y visualizar
   Panel->Left    = PPx;
   Panel->Top     = PPy;
   Panel->Visible = true;

   Application->ProcessMessages();
}
Si salvas en disco AreaPanel, te darás cuenta que si estaba amarillo, te guarda un cuadradito amarillo...

Pero con esto no resuelves el problema pues al poner invisible tu panel automáticamente se llama al evento paint que redibuja tu control sin saber que había una zona amarilla. Como el evento paint lo dispara WM_PAINT, va a ocurrir despues de que tu redibujes la zona en cuestión y te la machaca.

Sólo tienes una forma de evitarlo que es usar un TImage o mejor que tu control de derive de un TImage, en lugar de un TWinControl, En ese caso lo que pintes en el canvas quedará "memorizado" para el evento Paint y evitas efectos indeseables durante el pintado pues no. Tu pintado de rayas iniciales no debe ir en el evento pain sino en funcion a parte que puedes llamar pintafondo y que ejecutas solo al crear el componente.

Saludos.
Responder Con Cita