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

📄 teradial.pas

📁 delphi2007界面效果控件源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    if ActiveCorners[2] and (PrevPosition < CornerPositions[2])
    then
    begin
      if(Position < PrevPosition) or (Position > CornerPositions[2]) then
      begin
        Points[Count] := CornerPoints[2];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[3] and
        ((Position < PrevPosition) or (Position > CornerPositions[3])) then
      begin
        Points[Count] := CornerPoints[3];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[4] and
        (Position < PrevPosition) or (Position > CornerPositions[4]) then
      begin
        Points[Count] := CornerPoints[4];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[1] and
        (Position < PrevPosition) and (Position > CornerPositions[1]) then
      begin
        Points[Count] := CornerPoints[1];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
    end
    else if ActiveCorners[3] and (PrevPosition < CornerPositions[3])
    then
    begin
      if ActiveCorners[3] and
        (Position < PrevPosition) or (Position > CornerPositions[3]) then
      begin
        Points[Count] := CornerPoints[3];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[4] and
        (Position < PrevPosition) or (Position > CornerPositions[4]) then
      begin
        Points[Count] := CornerPoints[4];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[1] and
        (Position < PrevPosition) and (Position > CornerPositions[1]) then
      begin
        Points[Count] := CornerPoints[1];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[2] and
        (Position < PrevPosition) and (Position > CornerPositions[2]) then
      begin
        Points[Count] := CornerPoints[2];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
    end
    else if ActiveCorners[4] and (PrevPosition < CornerPositions[4])
    then
    begin
      if ActiveCorners[4] and
        (Position < PrevPosition) or (Position > CornerPositions[4]) then
      begin
        Points[Count] := CornerPoints[4];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[1] and
        (Position < PrevPosition) and (Position > CornerPositions[1]) then
      begin
        Points[Count] := CornerPoints[1];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[2] and
        (Position < PrevPosition) and (Position > CornerPositions[2]) then
      begin
        Points[Count] := CornerPoints[2];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[3] and
        (Position < PrevPosition) and (Position > CornerPositions[3]) then
      begin
        Points[Count] := CornerPoints[3];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
    end
    else if ActiveCorners[1] then
    begin
      if ActiveCorners[1] and
        (Position < PrevPosition) and (Position > CornerPositions[1]) then
      begin
        Points[Count] := CornerPoints[1];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[2] and
        (Position < PrevPosition) and (Position > CornerPositions[2]) then
      begin
        Points[Count] := CornerPoints[2];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[3] and
        (Position < PrevPosition) and (Position > CornerPositions[3]) then
      begin
        Points[Count] := CornerPoints[3];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
      if ActiveCorners[4] and
        (Position < PrevPosition) and (Position > CornerPositions[4]) then
      begin
        Points[Count] := CornerPoints[4];
        AddPointToRect(Points[Count], DirtyRect);
        Inc(Count);
      end;
    end;

    Points[Count] := Point(xDst2, yDst2);
    AddPointToRect(Points[Count], DirtyRect);
    if Draw then
      MaskBmp.Canvas.Polygon(Slice(Points, Count+1));
  end;

  Windows.UnionRect(Data.UpdateRect, DirtyRect, Data.UpdateRect);

  if CalcDirtyRects then
    Data.DirtyRects.AddRect(DirtyRect);
end;

function TRadialTransition.GetInfo(Device: TTETransitionDevice):
  TTETransitionInfo;
begin
  Result := inherited GetInfo(Device) +
    [
      tetiThreadSafe,
      tetiUseDirtyRects
    ];
end;

procedure TRadialTransition.Style1_1Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := CurrentFrame + (CornerPoints[3].x div 2) + 1;
  if Position > MaxFrames then
    Dec(Position, MaxFrames);
  DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_2Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := (MaxFrames - CurrentFrame + 1) + Step;
  if Position < 1 then
    Inc(Position, MaxFrames);
  Style1_1Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_3Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
begin
  Style1_1Frame(MaskBmp, Data, CurrentFrame + MaxFrames div 4, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_4Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := (MaxFrames - CurrentFrame + 1) + Step;
  if Position < 1 then
    Inc(Position, MaxFrames);
  Style1_3Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_5Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := CurrentFrame + CornerPoints[3].x + CornerPoints[3].y +
    ((CornerPoints[3].x - 1) div 2) + 3;
  if Position > MaxFrames then
    Dec(Position, MaxFrames);
  DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_6Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := (MaxFrames - CurrentFrame + 1) + Step;
  if Position < 1 then
    Inc(Position, MaxFrames);
  Style1_5Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_7Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := CurrentFrame + (CornerPoints[3].x * 2 ) + CornerPoints[3].y +
    ((CornerPoints[3].y - 1) div 2) + 4;
  if Position > MaxFrames then
    Dec(Position, MaxFrames);
  DrawMask(Center, MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style1_8Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  Position := (MaxFrames - CurrentFrame + 1) + Step;
  if Position < 1 then
    Inc(Position, MaxFrames);
  Style1_7Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
end;

procedure TRadialTransition.Style2_1Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
begin
  if IsSmooth
  then
  begin
    Style1_1Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    Style1_5Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
  end
  else
  begin
    if(CurrentFrame - Step + 1) mod 2 = 1
    then
    begin
      Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_5Frame(MaskBmp, Data, CurrentFrame div 2, Step div 2, Draw, CalcDirtyRects);
    end
    else
    begin
      Style1_5Frame(MaskBmp, Data, CurrentFrame div 2, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
    end;
  end;
end;

procedure TRadialTransition.Style2_2Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  if not IsSmooth
  then
  begin
    Position := (MaxFrames - CurrentFrame + 2) + Step;
    if Position < 1 then
      Inc(Position, MaxFrames);
    Style2_1Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
  end
  else
  begin
    Style1_2Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    Style1_6Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
  end;
end;

procedure TRadialTransition.Style2_3Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
begin
  if IsSmooth
  then
  begin
    Style1_3Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    Style1_7Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
  end
  else
  begin
    if(CurrentFrame - Step + 1) mod 2 = 1
    then
    begin
      Style1_3Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_7Frame(MaskBmp, Data, CurrentFrame div 2, Step div 2, Draw, CalcDirtyRects);
    end
    else
    begin
      Style1_7Frame(MaskBmp, Data, CurrentFrame div 2, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_3Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
    end;
  end;
end;

procedure TRadialTransition.Style2_4Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
var
  Position: Longint;
begin
  if not IsSmooth
  then
  begin
    Position := (MaxFrames - CurrentFrame + 2) + Step;
    if Position < 1 then
      Inc(Position, MaxFrames);
    Style2_3Frame(MaskBmp, Data, Position, Step, Draw, CalcDirtyRects);
  end
  else
  begin
    Style1_4Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
    Style1_8Frame(MaskBmp, Data, CurrentFrame, Step, Draw, CalcDirtyRects);
  end;
end;

procedure TRadialTransition.Style2_5Frame(MaskBmp: TBitmap;
  Data: TTETransitionData; CurrentFrame, Step: Longint;
  Draw, CalcDirtyRects: Boolean);
begin
  if IsSmooth
  then
  begin
    Style1_1Frame(MaskBmp, Data, CurrentFrame    , Step, Draw, CalcDirtyRects);
    Style1_2Frame(MaskBmp, Data, CurrentFrame + 1, Step, Draw, CalcDirtyRects);
  end
  else
  begin
    if not Odd(CurrentFrame - Step)
    then
    begin
      Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_2Frame(MaskBmp, Data, (CurrentFrame div 2) + 1, Step div 2, Draw, CalcDirtyRects);
    end
    else
    begin
      Style1_2Frame(MaskBmp, Data, (CurrentFrame div 2) + 1, Step - (Step div 2), Draw, CalcDirtyRects);
      if Step > 1 then
        Style1_1Frame(MaskBmp, Data, (CurrentFrame + 1) div 2, Step div 2, Draw, CalcDirtyRects);
    end;

⌨️ 快捷键说明

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