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

📄 tewipe.pas

📁 Do your applications look a little boring? Would you like to get spectacular yet easy to use visual
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    BitBlt(Data.Canvas.Handle, 0, 0, Data.Width, Data.Height,
      Data.SrcBmp.Canvas.Handle, 0, 0, cmSrcCopy);
  end;

  case DirectionToUse of
    tedRight:
      begin
        Frames   := Data.Width + BandWidth;
        RVisible := Rect(0 - BandWidth+1, 0, -BandWidth, Data.Height);
        if BandBmp <> nil then
          RBand := Rect(RVisible.Right+1, RVisible.Top,
            RVisible.Right+BandWidth+1, RVisible.Bottom);
      end;
    tedLeft:
      begin
        Frames   := Data.Width + BandWidth;
        RVisible := Rect(Data.Width + BandWidth, 0, Data.Width + BandWidth,
          Data.Height);
        if BandBmp <> nil then
          RBand := Rect(RVisible.Left-BandWidth-1, RVisible.Top,
            RVisible.Right-1, RVisible.Bottom);
      end;
    tedDown:
      begin
        Frames   := Data.Height + BandWidth;
        RVisible := Rect(0, - BandWidth, Data.Width, -BandWidth);
        if BandBmp <> nil then
          RBand := Rect(RVisible.Left, RVisible.Bottom+1, RVisible.Right,
            RVisible.Bottom+BandWidth+1);
      end;
    tedUp:
      begin
        Frames   := Data.Height + BandWidth;
        RVisible := Rect(0, Data.Height + BandWidth, Data.Width,
          Data.Height + BandWidth);
        if BandBmp <> nil then
          RBand := Rect(RVisible.Left, RVisible.Top-BandWidth-1, RVisible.Right,
            RVisible.Bottom-1);
      end;
    tedDownRight:
      begin
        Frames   := Data.Width + Data.Height;
        RVisible := Rect(0, 0, 0, 0);
      end;
    tedDownLeft:
      begin
        if Data.Width > Data.Height
        then Frames := Data.Width
        else Frames := Data.Height;
        RVisible := Rect(Data.Width, 0, Data.Width, 0);
      end;
    tedUpRight:
      begin
        if Data.Width > Data.Height
        then Frames := Data.Width
        else Frames := Data.Height;
        RVisible := Rect(0, Data.Height, 0, Data.Height);
      end;
    tedUpLeft:
      begin
        if Data.Width > Data.Height
        then Frames := Data.Width
        else Frames := Data.Height;
        RVisible := Rect(Data.Width, Data.Height, Data.Width, Data.Height);
      end;
    tedIn:
      begin
        if Data.Width > Data.Height
        then Frames := Data.Width  div 2
        else Frames := Data.Height div 2;
        RVisible := Rect(0, 0, Data.Width, Data.Height);
      end;
    tedOut:
      begin
        if Data.Width > Data.Height
        then Frames := Data.Width  div 2
        else Frames := Data.Height div 2;
        RVisible := Rect(Data.Width div 2, Data.Height div 2, Data.Width div 2,
          Data.Height div 2);
      end;
  end;
end;

procedure TWipeTransition.Finalize(Data: TTETransitionData);
begin
  AuxBmp1.Free;
  AuxBmp1 := nil;
  AuxBmp2.Free;
  AuxBmp2 := nil;
end;

procedure TWipeTransition.ExecuteFrame(Data: TTETransitionData;
  CurrentFrame, Step, TotalFrames, LastExecutedFrame: Longint);
var
  R1, R2, R3, R4: TRect;
  aux1, aux2, aux3, aux4: Word;
begin
  inherited;

  case DirectionToUse of
    tedRight:
      begin
        RVisible.Left  := RVisible.Right;
        RVisible.Right := RVisible.Right + Step;
        if BandBmp <> nil then
        begin
          RBand.Left  := RVisible.Right + 1;
          RBand.Right := RBand.Left + BandWidth;
          BandTop     := Random(Margin);
        end;
      end;
    tedLeft:
      begin
        RVisible.Right := RVisible.Left;
        RVisible.Left  := RVisible.Left - Step;
        if BandBmp <> nil then
        begin
          RBand.Right := RVisible.Left - 1;
          RBand.Left  := RBand.Right - BandWidth;
          BandTop     := Random(Margin);
        end;
      end;
    tedDown:
      begin
        RVisible.Top    := RVisible.Bottom;
        RVisible.Bottom := RVisible.Bottom + Step;
        if BandBmp <> nil then
        begin
          RBand.Top    := RVisible.Bottom + 1;
          RBand.Bottom := RBand.Top + BandWidth;
          BandLeft     := Random(Margin);
        end;
      end;
    tedUp:
      begin
        RVisible.Bottom := RVisible.Top;
        RVisible.Top    := RVisible.Top - Step;
        if BandBmp <> nil then
        begin
          RBand.Bottom := RVisible.Bottom - 1;
          RBand.Top    := RBand.Bottom - BandWidth;
          BandLeft     := Random(Margin);
        end;
      end;
    tedDownRight:
      begin
        aux1 := Round((Data.Width  / TotalFrames) * CurrentFrame);
        aux2 := Round((Data.Height / TotalFrames) * CurrentFrame);
        R1   := Rect(0, RVisible.Bottom, aux1, aux2);
        R2   := Rect(RVisible.Right, 0, aux1, RVisible.Bottom);
        RVisible.Right  := aux1;
        RVisible.Bottom := aux2;
      end;
    tedDownLeft:
      begin
        aux1 := Data.Width - Round((Data.Width / TotalFrames) * CurrentFrame);
        aux2 := Round((Data.Height / TotalFrames) * CurrentFrame);
        R1   := Rect(aux1, RVisible.Bottom, Data.Width, aux2);
        R2   := Rect(aux1, 0, RVisible.Left, RVisible.Bottom);
        RVisible.Left   := aux1;
        RVisible.Bottom := aux2;
      end;
    tedUpRight:
      begin
        aux1 := Round((Data.Width / TotalFrames) * CurrentFrame);
        aux2 := Data.Height - Round((Data.Height / TotalFrames) * CurrentFrame);
        R1   := Rect(0, aux2, aux1, RVisible.Top);
        R2   := Rect(RVisible.Right, RVisible.Top, aux1, Data.Height);
        RVisible.Right := aux1;
        RVisible.Top   := aux2;
      end;
    tedUpLeft:
      begin
        aux1 := Data.Width  - Round((Data.Width  / TotalFrames) * CurrentFrame);
        aux2 := Data.Height - Round((Data.Height / TotalFrames) * CurrentFrame);
        R1   := Rect(aux1, aux2, Data.Width, RVisible.Top);
        R2   := Rect(aux1, RVisible.Top, RVisible.Left, Data.Height);
        RVisible.Left := aux1;
        RVisible.Top  := aux2;
      end;
    tedIn:
      begin
        aux1 := (Round((Data.Width / TotalFrames) * CurrentFrame)) div 2;
        aux3 := Data.Width - aux1;
        aux2 := (Round((Data.Height / TotalFrames) * CurrentFrame)) div 2;
        aux4 := Data.Height - aux2;
        R1   := Rect(RVisible.Left, RVisible.Top, RVisible.Right, aux2);
        R2   := Rect(RVisible.Left, aux2, aux1, aux4);
        R3   := Rect(aux3, aux2, RVisible.Right, aux4);
        R4   := Rect(RVisible.Left, aux4, RVisible.Right, RVisible.Bottom);
        RVisible := Rect(aux1, aux2, aux3, aux4);
      end;
    tedOut:
      begin
        aux1 :=
          (Data.Width - Round((Data.Width / TotalFrames) * CurrentFrame)) div 2;
        aux3 := Data.Width - aux1;
        aux2 :=
          (Data.Height - Round((Data.Height / TotalFrames) * CurrentFrame)) div 2;
        aux4 := Data.Height - aux2;
        R1   := Rect(aux1, aux2, aux3, RVisible.Top);
        R2   := Rect(aux1, RVisible.Top, RVisible.Left, aux4);
        R3   := Rect(RVisible.Right, RVisible.Top, aux3, RVisible.Bottom);
        R4   := Rect(aux1, RVisible.Bottom, aux3, aux4);
        RVisible := Rect(aux1, aux2, aux3, aux4);
      end;
  end; //EROC itnA

  if BandBmp <> nil
  then
  begin
    BitBlt(AuxBmp1.Canvas.Handle, 0, 0, AuxBmp1.Width, AuxBmp1.Height,
      Data.SrcBmp.Canvas.Handle, RBand.Left, RBand.Top, cmSrcCopy);
    BitBlt(AuxBmp1.Canvas.Handle, 0, 0, AuxBmp1.Width, AuxBmp1.Height,
      BandBmp.Canvas.Handle, BandLeft, BandTop, cmSrcAnd);
    BitBlt(AuxBmp2.Canvas.Handle, 0, 0, AuxBmp2.Width, AuxBmp2.Height,
      Data.DstBmp.Canvas.Handle, RBand.Left, RBand.Top, cmSrcCopy);
    BitBlt(AuxBmp2.Canvas.Handle, 0, 0, AuxBmp2.Width, AuxBmp2.Height,
      BandBmp.Canvas.Handle, BandLeft, BandTop, $00220326);
    BitBlt(AuxBmp2.Canvas.Handle, 0, 0, AuxBmp2.Width, AuxBmp2.Height,
      AuxBmp1.Canvas.Handle, 0, 0, cmSrcPaint);
    BitBlt(Data.Canvas.Handle, RBand.Left, RBand.Top, RBand.Right-RBand.Left,
      RBand.Bottom-RBand.Top, AuxBmp2.Canvas.Handle, 0, 0, cmSrcCopy);
    Windows.UnionRect(UpdateRect, RBand, UpdateRect);
    BitBlt(Data.Canvas.Handle, RVisible.Left, RVisible.Top,
      RVisible.Right-RVisible.Left+1, RVisible.Bottom-RVisible.Top+1,
      Data.DstBmp.Canvas.Handle, RVisible.Left, RVisible.Top, cmSrcCopy);

    Windows.UnionRect(UpdateRect, RVisible, UpdateRect);
  end
  else
  begin
    case DirectionToUse of
      tedRight,
      tedLeft,
      tedDown,
      tedUp:
        BitBlt(Data.Canvas.Handle, RVisible.Left, RVisible.Top,
          RVisible.Right-RVisible.Left, RVisible.Bottom-RVisible.Top,
          Data.DstBmp.Canvas.Handle, RVisible.Left, RVisible.Top, cmSrcCopy);
      tedDownRight,
      tedDownLeft,
      tedUpRight,
      tedUpLeft:
        begin
          BitBlt(Data.Canvas.Handle, R1.Left, R1.Top, R1.Right-R1.Left,
            R1.Bottom-R1.Top, Data.DstBmp.Canvas.Handle, R1.Left, R1.Top,
            cmSrcCopy);
          BitBlt(Data.Canvas.Handle, R2.Left, R2.Top, R2.Right-R2.Left,
            R2.Bottom-R2.Top, Data.DstBmp.Canvas.Handle, R2.Left, R2.Top,
            cmSrcCopy);
        end;
      tedIn, tedOut:
        begin
          BitBlt(Data.Canvas.Handle, R1.Left, R1.Top, R1.Right-R1.Left,
            R1.Bottom-R1.Top, Data.DstBmp.Canvas.Handle, R1.Left, R1.Top,
            cmSrcCopy);
          BitBlt(Data.Canvas.Handle, R2.Left, R2.Top, R2.Right-R2.Left,
            R2.Bottom-R2.Top, Data.DstBmp.Canvas.Handle, R2.Left, R2.Top,
            cmSrcCopy);
          BitBlt(Data.Canvas.Handle, R3.Left, R3.Top, R3.Right-R3.Left,
            R3.Bottom-R3.Top, Data.DstBmp.Canvas.Handle, R3.Left, R3.Top,
            cmSrcCopy);
          BitBlt(Data.Canvas.Handle, R4.Left, R4.Top, R4.Right-R4.Left,
            R4.Bottom-R4.Top, Data.DstBmp.Canvas.Handle, R4.Left, R4.Top,
            cmSrcCopy);
        end;
    end;
  end;
end;

initialization

  TERegisterTransition(TWipeTransition);

end.

⌨️ 快捷键说明

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