Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   AlphaBlend o transparencia (https://www.clubdelphi.com/foros/showthread.php?t=69582)

locojoan 26-08-2010 20:27:09

AlphaBlend o transparencia
 
Hola. Habra alguna forma de incluir la opcion de alphablend en un componente que no lo tiene?

tengo unos componentes graficos para dibujar cuadrados, circulos, etc. habra forma de crear la propiedad alphablend para estos componentes? gracias.

ElDioni 27-08-2010 10:33:51

Pues supongo que tendrás que crearte tu propio componente tomando como base el que tienes ahora mismo y añadiendole la función de alphablend que comentas, en este aspecto yo no te puedo ayudar mucho, pero para que te hagas una idea puedes echarle un vistazo al componente TAlignEdit que creo el maestro roman en el que a un componente TEdit le añadió la función "Aligment" para poder alinear el texto de la caja de texto. El componente supongo que estará en el FTP del club.

locojoan 28-08-2010 03:45:56

Encontre este procedimiento

Código Delphi [-]
procedure FadeControl(AControl : TWinControl);
Var
Bitmap  : TBitmap;
Canvas  : TControlCanvas;

Func    : TBlendFunction;
R       : TRect;

Opacity : Integer;
Begin
If (AControl = nil) or (AControl.Parent = nil) or not AControl.Visible Then
   Exit;

Bitmap  := TBitmap.Create;
Canvas  := TControlCanvas.Create;
Try
   With AControl Do Begin
    Bitmap.Width   := Width;
    Bitmap.Height  := Height;

    Canvas.Control :=  AControl;
    Bitmap.Canvas.CopyRect(ClientRect, Canvas, ClientRect);

    Hide;

    Func.BlendOp             := AC_SRC_OVER;
    Func.BlendFlags          := 0;
    Func.AlphaFormat         := 0;


    Canvas.Control         := Parent;
    Parent.DoubleBuffered  := True;

    Opacity := 100;
    While Opacity > 20 Do Begin
      R := ClientRect;
      OffsetRect(R, Left, Top);
      InvalidateRect(Parent.Handle, @R, False);
      Parent.Update;

      Func.SourceConstantAlpha := Opacity;
      AlphaBlend(Canvas.Handle, Left, Top, Width, Height,
                 Bitmap.Canvas.Handle, 0, 0, Width, Height,
                 Func);

      Sleep(50);
      Dec(Opacity, 20);
      exit;
    End;
   End;

   Canvas.Control.Invalidate;

finally
   Bitmap.Free;
   Canvas.Free;
End;
End;

Funciona bastante bien. el problema es que una ves que se vuelve transparente el componente, por ejemplo un boton ya no se puede usar. alguien tal ves se anima a modificarlo para que se puedan manejar con normalidad los componentes luego de volverlos trasparentes?

gracias.


La franja horaria es GMT +2. Ahora son las 23:08:43.

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