首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學GDI+[35]: 畫筆虛線位移動畫 - SetDashOffset 實現螞蟻線/掃描線效果

     編輯:Delphi

前言

TGPPen.SetDashOffset 控制虛線模式的起始相位位移。透過定時器持續遞減 Offset,可實現經典的螞蟻線選取框、雷達掃描線、流動邊框等動畫效果。

DashOffset 動畫原理

  • 虛線模式定義「實線長、空白長」的重複模式
  • Offset 決定從模式哪個位置開始繪製
  • 每幀遞減 Offset → 模式視覺上向前移動
  • Offset 週期等於模式總長度

Timer 驅動八方向射線動畫

var n: Integer;

procedure TForm1.FormPaint(Sender: TObject);
var g: TGPGraphics; p: TGPPen;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclChocolate, 8);
  p.SetDashStyle(DashStyleDashDotDot);  {長-短-短 模式}
  p.SetDashOffset(n);  {關鍵:動態位移}
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, 0, 0);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, ClientWidth div 2, 0);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, ClientWidth, 0);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, ClientWidth, ClientHeight div 2);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, ClientWidth, ClientHeight);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, ClientWidth div 2, ClientHeight);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, 0, ClientHeight);
  g.DrawLine(p, ClientWidth div 2, ClientHeight div 2, 0, ClientHeight div 2);
  Dec(n);
  if n > Sqrt(Sqr(ClientWidth) + Sqr(ClientWidth)) then n := 0;  {重置週期}
  p.Free; g.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin Repaint; end;  {100ms 間隔}

執行效果預覽

虛線位移動畫

DashStyle 可用模式

常數模式描述典型用途
DashStyleSolid實線一般線條
DashStyleDash長虛線標準虛線
DashStyleDot圓點線輔助線、網格
DashStyleDashDot長-短工程圖隱藏線
DashStyleDashDotDot長-短-短工程圖中心線
DashStyleCustom自定義陣列專用模式

表單定義檔

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 167
  ClientWidth = 242
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Timer1: TTimer ... {Interval=100, OnTimer=Timer1Timer}
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved