本文提供兩個經典 Delphi 圖形技巧:使用 TCanvas.FillRect 繪製漸層背景,以及利用 TImage.Stretch 配合 TTimer 實作圖片由小變大的拉伸動畫。
原理:在 Button1Click 中迴圈繪製 256 個寬度 2 像素的矩形,每次遞增藍色分量 (R=255, G=255, B=0..255)。
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
Rct: TRect;
begin
j := ClientHeight;
for i := 0 to 255 do
begin
Canvas.Brush.Color := RGB(255, 255, i); // 藍色分量遞增
Rct := Rect(i * 2, 0, (i + 1) * 2, j);
Canvas.FillRect(Rct);
end;
end;
改良建議:
• 移至 OnPaint 並設定 DoubleBuffered := True 避免重繪閃爍。
• 使用 GradientFill API (Windows 2000+) 或 TCanvas.GradientFill (Delphi 10.4+) 簡化程式碼。
• 支援垂直、對角、多色停漸層擴展。
前置條件:
• Image1 載入圖片,Height := 0, Stretch := True。
• Timer1:Interval := 50, Enabled := True。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Height := Image1.Height + 10; // 每次增長 10 像素
if Image1.Height >= 200 then // 目標高度
begin
Image1.Height := 200;
Timer1.Enabled := False;
end;
end;
原理:Stretch=True 時,TImage 會自動將 Picture.Graphic 縮放填滿控制項客戶區。動態改變 Height 即產生「由上往下展開」的視覺效果。
AlphaBlend + AlphaBlendValue (需 Layered Window 支援)。TTimer 計算缓動函數 (Ease Out/In/Out) 讓速度自然變化。Timer 觸發切換 Picture 並重置 Height 重新動畫。漸層背景與拉伸動畫雖屬基礎繪圖技巧,卻是構建豐富 UI 視覺反饋的基石。掌握 Canvas 像素級操作與 TImage.Stretch 自動縮放特性,再配合 TTimer 或現代動畫框架 (如 FMX TFloatAnimation),即可實作專業級介面特效。