DelphiX 提供三種層級的透明繪製方法:DrawTransparent(單色透明)、DrawTranslucent(單色透明+半透明)、DrawAlpha(單色透明+指定 Alpha 值)。本文完整對比三者差異與適用場景。

| 方法 | 功能 | 參數 | 適用場景 |
|---|---|---|---|
DrawTransparent | 指定顏色完全透明,其他完全不透明 | TransparentColor | 精靈圖、UI 圖示、非矩形圖像 |
DrawTranslucent | 先單色透明,再整體半透明(50%) | TransparentColor | 半透明 UI、鬼影效果、淡入淡出 |
DrawAlpha | 先單色透明,再指定 Alpha 值(0~255) | TransparentColor, Alpha | 精確控制透明度、動態淡入淡出 |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DIB, StdCtrls;
type
TForm1 = class(TForm)
DXPaintBox1: TDXPaintBox;
Button1: TButton; // 原圖
Button2: TButton; // Transparent 黑色透明
Button3: TButton; // Transparent 紅色透明
Button4: TButton; // Translucent 黑色透明
Button5: TButton; // Translucent 紅色透明
Button6: TButton; // Alpha=32 黑色透明
Button7: TButton; // Alpha=32 紅色透明
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
end;
var Form1: TForm1;
implementation {$R *.dfm}
var dib: TDIB;
procedure TForm1.FormCreate(Sender: TObject);
begin
dib := TDIB.Create;
dib.SetSize(DXPaintBox1.Width, DXPaintBox1.Height, 24);
dib.Fill(0); // 黑底
dib.Canvas.Brush.Style := bsClear;
dib.Canvas.Font.Color := clRed;
dib.Canvas.Font.Name := 'Tahoma';
dib.Canvas.Font.Size := 32;
dib.Canvas.Font.Style := [fsBold];
dib.Canvas.TextOut(10, 10, 'DelphiX');
Self.Color := clWhite; // 視窗白底
end;
procedure TForm1.FormDestroy(Sender: TObject); begin dib.Free; end;
procedure TForm1.Button1Click(Sender: TObject);
begin DXPaintBox1.DIB.Assign(dib); DXPaintBox1.Repaint; end;
procedure TForm1.Button2Click(Sender: TObject); // Transparent clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawTransparent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack);
DXPaintBox1.Repaint; end;
procedure TForm1.Button3Click(Sender: TObject); // Transparent clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawTransparent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed);
DXPaintBox1.Repaint; end;
procedure TForm1.Button4Click(Sender: TObject); // Translucent clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawTranslucent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack);
DXPaintBox1.Repaint; end;
procedure TForm1.Button5Click(Sender: TObject); // Translucent clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawTranslucent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed);
DXPaintBox1.Repaint; end;
procedure TForm1.Button6Click(Sender: TObject); // Alpha=32 clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, 32, clBlack);
DXPaintBox1.Repaint; end;
procedure TForm1.Button7Click(Sender: TObject); // Alpha=32 clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
DXPaintBox1.DIB.DrawAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, 32, clRed);
DXPaintBox1.Repaint; end;
end.
DrawTransparentDrawTranslucent(效能略優)DrawAlpha