Как сделать TFrame (и все на нем) частично прозрачным?

У меня есть объект, состоящий изTFrame, на этомTPanel и на этомTImage. Растровое изображение назначено наTImage содержащий пианино. Этот фрейм-объект ставится наTImage, содержащий изображение, содержащее сетку. Смотрите изображение для примера.

Вопрос: Можно ли сделать рамку частично прозрачной, чтобы фоновое изображение, содержащее сетку (в главной форме), было смутно видно? В идеале количество прозрачности может быть установлено пользователем. Растровое изображение имеет глубину 32 бита, но эксперименты с альфа-каналом не помогли. Панель не является строго необходимой. Он используется, чтобы быстро обвести границу вокруг объекта. Я мог бы нарисовать это на изображении.

Обновление 1 Добавлен небольшой пример кода. Основной блок рисует фон с вертикальными линиями. Второй блок содержит TFrame и TImage, которые рисуют горизонтальную линию. То, что я хотел бы видеть, - то, что вертикальные линии частично сияют через Изображение TFrame.

Обновление 2 Что я не указал в своем первоначальном вопросе: TFrame является частью гораздо большего приложения и ведет себя независимо. Было бы полезно, если бы проблема прозрачности могла быть решена самим 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.

Обновление 3 Я надеялся, что будет какое-то сообщение или вызов API, что приведет к решению, которое элемент управления может сделать частично прозрачным, как сообщение WMEraseBkGnd для полной прозрачности. В своих решениях и Sertac, и NGLN оба указывают на имитирующая прозрачность с функцией AlphaBlend. Эта функция объединяет два растровых изображения и поэтому требует знания фонового изображения. Теперь у моего TFrame есть дополнительное свойство:BackGround: TImage, который назначен родительским контролем. Это дает желаемый результат (это так профессионально, чтобы увидеть, как это работает: -)

RRUZ указывает на библиотеку Graphics32. То, что я видел, дает фантастические результаты, для меня кривая обучения слишком крутая.

Спасибо за вашу помощь

Ответы на вопрос(3)

Ваш ответ на вопрос