⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teradial.pas

📁 delphi2007界面效果控件源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    5: case SubStyleToUse of
         1,
         2,
         3,
         4:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[4] := False;
           end;
         5,
         6,
         7,
         8:
           begin
             ActiveCorners[2] := False;
             ActiveCorners[3] := False;
           end;
         9,
         10,
         11,
         12:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[2] := False;
           end;
         13,
         14,
         15,
         16:
           begin
             ActiveCorners[3] := False;
             ActiveCorners[4] := False;
           end;
       end;
    6: case SubStyleToUse of
         1,
         2:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[2] := False;
             ActiveCorners[4] := False;
           end;
         3,
         4:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[2] := False;
             ActiveCorners[3] := False;
           end;
         5,
         6:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[3] := False;
             ActiveCorners[4] := False;
           end;
         7,
         8:
           begin
             ActiveCorners[2] := False;
             ActiveCorners[3] := False;
             ActiveCorners[4] := False;
           end;
       end;
    7: case SubStyleToUse of
         1,
         2,
         3,
         4:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[2] := False;
             ActiveCorners[4] := False;
           end;
         5,
         6,
         7,
         8:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[2] := False;
             ActiveCorners[3] := False;
           end;
         9,
         10,
         11,
         12:
           begin
             ActiveCorners[1] := False;
             ActiveCorners[3] := False;
             ActiveCorners[4] := False;
           end;
         13,
         14,
         15,
         16:
           begin
             ActiveCorners[2] := False;
             ActiveCorners[3] := False;
             ActiveCorners[4] := False;
           end;
       end;
  end;

  inherited;

  Data.DirtyRects.CheckBounds := True;
  Data.DirtyRects.Bounds := Rect(0, 0, Data.Width, Data.Height);
end;

function TRadialTransition.CalcTotalFrames(Data: TTETransitionData): Longint;
begin
  Result := 0;
  MaxFrames := ((CornerPoints[3].x + 1) * 2) + ((CornerPoints[3].y + 1) * 2);

  case StyleToUse of
    1: Result := MaxFrames;
    2: if IsSmooth
       then Result := MaxFrames div 2
       else Result := MaxFrames;
    3: begin
         Result := MaxFrames div 4;
         if IsSmooth and (SubStyleToUse in [5, 6, 7, 8]) then
           Inc(Result);
       end;
    4: case SubStyleToUse of
         1,
         2,
         3,
         4: Result := MaxFrames - CornerPoints[3].y;
         5,
         6,
         7,
         8: Result := MaxFrames - CornerPoints[3].x;
       end;
    5: case SubStyleToUse of
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8: if IsSmooth
             then Result := (MaxFrames - CornerPoints[3].y) div 2
             else Result :=  MaxFrames - CornerPoints[3].y;
          9,
         10,
         11,
         12,
         13,
         14,
         15,
         16: if IsSmooth
             then Result := (MaxFrames - CornerPoints[3].x) div 2
             else Result :=  MaxFrames - CornerPoints[3].x;
       end;
    6: Result := MaxFrames div 2 + 0;
    7: if IsSmooth
       then Result := MaxFrames div 4
       else Result := MaxFrames div 2;
  end;
end;

function TRadialTransition.CountOfSubStyles(StyleValue: Word): Word;
begin
  if StyleValue = 0
  then Result := 0
  else
  begin
    Result := 1;

    case StyleValue of
      1: Result :=  8;
      2: Result :=  8;
      3: Result :=  8;
      4: Result :=  8;
      5: Result := 16;
      6: Result :=  8;
      7: Result := 16;
    end;
  end;
end;

procedure TRadialTransition.MaskFrame(MaskBmp: TBitmap; CurrentFrame, Step,
  LastExecutedFrame: Longint; Data: TTETransitionData; Draw, CalcDirtyRects:
  Boolean);
begin
  Data.UpdateRect := Rect(0, 0, 0, 0);
  case StyleToUse of
    1: case SubStyleToUse of
      1: Style1_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      2: Style1_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      3: Style1_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      4: Style1_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      5: Style1_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      6: Style1_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      7: Style1_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      8: Style1_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    2: case SubStyleToUse of
      1: Style2_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      2: Style2_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      3: Style2_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      4: Style2_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      5: Style2_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      6: Style2_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      7: Style2_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      8: Style2_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    3: case SubStyleToUse of
      1: Style3_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      2: Style3_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      3: Style3_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      4: Style3_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      5: Style3_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      6: Style3_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      7: Style3_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      8: Style3_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    4: case SubStyleToUse of
      1: Style4_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      2: Style4_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      3: Style4_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      4: Style4_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      5: Style4_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      6: Style4_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      7: Style4_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      8: Style4_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    5: case SubStyleToUse of
       1: Style5_1Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       2: Style5_2Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       3: Style5_3Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       4: Style5_4Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       5: Style5_5Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       6: Style5_6Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       7: Style5_7Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       8: Style5_8Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       9: Style5_9Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      10: Style5_10Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      11: Style5_11Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      12: Style5_12Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      13: Style5_13Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      14: Style5_14Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      15: Style5_15Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      16: Style5_16Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    6: case SubStyleToUse of
      1: Style6_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      2: Style6_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      3: Style6_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      4: Style6_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      5: Style6_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      6: Style6_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      7: Style6_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      8: Style6_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
    7: case SubStyleToUse of
       1: Style7_1Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       2: Style7_2Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       3: Style7_3Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       4: Style7_4Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       5: Style7_5Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       6: Style7_6Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       7: Style7_7Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       8: Style7_8Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
       9: Style7_9Frame (MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      10: Style7_10Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      11: Style7_11Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      12: Style7_12Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      13: Style7_13Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      14: Style7_14Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      15: Style7_15Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
      16: Style7_16Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    end;
  end;
end;

procedure TRadialTransition.DrawMask(Origin: TPoint; MaskBmp: TBitmap;
  Data: TTETransitionData; Position, Step: Longint;
  Draw, CalcDirtyRects: Boolean);

  procedure GetPoints(Position: Longint; var x, y: Integer);
  begin
    if Position < CornerPositions[2]
    then
    begin
      x := Position - 2;
      y := CornerPoints[2].y;
    end
    else if Position < CornerPositions[3]
    then
    begin
      x := CornerPoints[2].x;
      y := Position - CornerPositions[2] - 1;
    end
    else if Position < CornerPositions[4]
    then
    begin
      x := CornerPositions[4] - Position - 1;
      y := CornerPoints[3].y;
    end
    else
    begin
      x := CornerPoints[4].x;
      y := CornerPoints[4].y + CornerPositions[4] - Position;
    end;
  end;

  procedure AddPointToRect(const Point: TPoint; var UpdateRect: TRect);
  begin
    if IsRectEmpty(UpdateRect)
    then UpdateRect := Rect(Point.x, Point.y, Point.x + 1, Point.y + 1)
    else
    begin
      if Point.x <  UpdateRect.Left then
        UpdateRect.Left   := Point.x;
      if Point.x >= UpdateRect.Right then
        UpdateRect.Right  := Point.x + 1;
      if Point.y <  UpdateRect.Top then
        UpdateRect.Top    := Point.y;
      if Point.y >= UpdateRect.Bottom then
        UpdateRect.Bottom := Point.y + 1;
    end;
  end;

var
  xDst,
  yDst,
  xDst2,
  yDst2: Integer;
  PrevPosition: Longint;
  Points: array[0..5] of TPoint;
  Count: Integer;
  DirtyRect: TRect;
begin
  DirtyRect := Rect(0, 0, 0, 0);
  if Step = 1 then
  begin
    GetPoints(Position, xDst, yDst);
    AddPointToRect(Origin, DirtyRect);
    AddPointToRect(Point(xDst, yDst), DirtyRect);
    if Draw then
    begin
      MaskBmp.Canvas.MoveTo(Origin.x, Origin.y);
      MaskBmp.Canvas.LineTo(xDst, yDst);
    end;
  end
  else
  begin
    PrevPosition := Position - Step + 1;
    if PrevPosition < 1
    then Inc(PrevPosition, MaxFrames)
    else if PrevPosition > MaxFrames then
      Dec(PrevPosition, MaxFrames);

    GetPoints(PrevPosition, xDst , yDst );
    GetPoints(Position    , xDst2, yDst2);

    Points[0] := Origin;
    AddPointToRect(Points[0], DirtyRect);
    Points[1] := Point(xDst, yDst);
    AddPointToRect(Points[1], DirtyRect);
    Count := 2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -