¿Cómo hacer un TFrame (y todo lo que hay en él) parcialmente transparente?

Tengo un objeto que consiste en unTFrame, en eso unTPanel y en eso unTImage. Se asigna un bitmap a laTImage que contiene un rollo de piano. Este objeto marco se pone en unaTImage, que contiene una imagen que contiene una cuadrícula. Vea la imagen para un ejemplo.

Pregunta: ¿Es posible hacer que el marco sea parcialmente transparente, de modo que la imagen de fondo que contiene la cuadrícula (en el formulario principal) sea vagamente visible? Idealmente, la cantidad de transparencia puede ser establecida por el usuario. El mapa de bits tiene una profundidad de 32 bits, pero la experimentación con el canal alfa no ayudó. El panel no es estrictamente necesario. Se utiliza para tener rápidamente un borde alrededor del objeto. Podría dibujar eso en la imagen.

Actualización 1 Se agrega un pequeño ejemplo de código. La unidad principal dibuja un fondo con líneas verticales. La segunda unidad contiene un TFrame y un TImage sobre él que dibuja una línea horizontal. Lo que me gustaría ver es que las líneas verticales brillan parcialmente a través de la imagen TFrame.

Actualización 2 Lo que no especifiqué en mi pregunta original: el TFrame es parte de una aplicación mucho más grande y se comporta de manera independiente. Sería de ayuda si el problema de la transparencia pudiera ser manejado por el propio TFrame.

///////////////// Main unit, on mouse click draw lines and plot TFrame
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,
  Unit2;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var background: TBitmap;
    f: TFrame2;
    i, c: Int32;
begin
   background := TBitmap.Create;
   background.Height := Image1.Height;
   background.Width  := Image1.Width;
   background.Canvas.Pen.Color := clBlack;

   for i := 0 to 10 do
   begin
      c := i * background.Width div 10;
      background.Canvas.MoveTo (c, 0);
      background.Canvas.LineTo (c, background.Height);
   end;
   Image1.Picture.Assign (background);
   Application.ProcessMessages;

   f := TFrame2.Create (Self);
   f.Parent := Self;
   f.Top    := 10;
   f.Left   := 10;
   f.plot;
end;

end.

///////////////////Unit containing the TFrame
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ExtCtrls;

type
  TFrame2 = class(TFrame)
    Image1: TImage;

    procedure plot;
  end;

implementation

{$R *.dfm}

procedure TFrame2.plot;
var bitmap: TBitmap;
begin
   bitmap := TBitmap.Create;
   bitmap.Height := Image1.Height;
   bitmap.Width  := Image1.Width;
   bitmap.PixelFormat := pf32Bit;
   bitmap.Canvas.MoveTo (0, bitmap.Height div 2);
   bitmap.Canvas.LineTo (bitmap.Width, bitmap.Height div 2);
   Image1.Picture.Assign (bitmap);
end;

end.

Actualización 3 Esperaba que hubiera algún mensaje o llamada a la API que resultara en una solución que el control pudiera hacerse parcialmente transparente, como lo hace el mensaje WMEraseBkGnd para una transparencia completa. En sus soluciones, tanto Sertac como NGLN apuntan asimulando transparencia con la función AlphaBlend. Esta función combina dos mapas de bits y, por lo tanto, requiere un conocimiento de la imagen de fondo. Ahora mi TFrame tiene una propiedad extra:BackGround: TImage que es asignado por el control padre. Eso da el resultado deseado (es tan profesional verlo funcionar :-)

RRUZ apunta a la biblioteca Graphics32. Lo que he visto produce resultados fantásticos, para mí la curva de aprendizaje es demasiado pronunciada.

¡Gracias por toda tu ayuda!

Respuestas a la pregunta(3)

Su respuesta a la pregunta