PDA

Ver la Versión Completa : Efecto de sombra en los controles de un form


Neftali [Germán.Estévez]
08-06-2006, 17:45:52
Se trata de crear una sombra a todos los componentes colocados en un form. Más como curiosidad y didáctico que como utilidad; En fin, curioso.

El código:


procedure TForm1.FormPaint(Sender: TObject);
var
i: Integer;

procedure MakeShadow(control: TControl; Width: Integer; Color: TColor);
var
rect: TRect;
old: TColor;
begin
// Bordes del control
// Borders of controls
rect := control.boundsrect;
rect.Left := rect.Left + width;
rect.Top := rect.Top + width;
rect.Right := rect.Right + width;
rect.Bottom := rect.Bottom + width;
// Guardar el color
// Save the old color
old := Self.canvas.brush.color;
// Pintar la sombra
// Paint the shadow
Self.canvas.brush.Color := color;
Self.canvas.fillrect(rect);
Self.canvas.brush.Color := old;
end;

begin

// Revisar todos los componentes del form
// Go trough all form components
for i:=0 to Self.ControlCount-1 do
if self.Controls[i].Visible then
MakeShadow(Self.Controls[i],2,clGray);

end;


Utilización: Simplemente pon esto en el evento OnPaint de tu formulario.
Posible mejora: Crear un componente que se encargue de ésta tarea (a partir del Owner -TForm-).