delphi 仿照世界之窗浏览器,滑动鼠标关闭主程序

该博客介绍了使用unitmousemove组件实现的鼠标移动事件处理,通过计算鼠标轨迹和角度,提供了一种实时跟踪和分析用户交互的技术。重点在于鼠标按下、移动和释放过程中的坐标处理和几何计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unit umousemove;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, ExtCtrls, Math, StdCtrls,
    dxGDIPlusClasses;

type
    Tfrommousemove = class(TForm)
        Image1: TImage;
        Image2: TImage;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormShow(Sender: TObject);
        procedure Image2MouseDown(Sender: TObject; Button:
            TMouseButton; Shift: TShiftState; X, Y: Integer);
        procedure Image2MouseMove(Sender: TObject; Shift: TShiftState;
            X, Y: Integer);
        procedure Image2MouseUp(Sender: TObject; Button: TMouseButton;
            Shift: TShiftState; X, Y: Integer);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

type
    Rvaluepos = record
        x, y: double;
        a, b, c, c_Cos, maxposx: double;
        tangle: Double;
    end;

var
    frommousemove: Tfrommousemove;
    First, Mdown: Boolean;
    ox, oy, ox1, oy1: Integer;
    valuepos: array of Rvaluepos;
    len: Integer;
    Maxtangle: double;
    errstr: string;
    gButton: TMouseButton;
    gShift: TShiftState;
    gX, gY: Integer;
    rslt: Boolean;

implementation

{$R *.dfm}

procedure Tfrommousemove.FormClose(Sender: TObject; var Action:
    TCloseAction);
begin
    SetLength(valuepos, 0);
end;

procedure Tfrommousemove.FormCreate(Sender: TObject);
begin
    Mdown := False;
    Tag := 0;
    Self.BorderStyle := bsNone;
    self.AlphaBlend := true; //透明
    self.AlphaBlendValue := 240; //透明度
    self.TransparentColor := true; //透明颜色
    Image1.SetBounds((Self.Left + self.Width) div 2, (Self.Top + self.Height)
        div 2, Image1.Width, Image1.Height);
    Image1.Visible := False;

end;

procedure Tfrommousemove.FormShow(Sender: TObject);
var
    p: TPoint;
begin
    GetCursorPos(p);
    gX := p.X;
    gY := p.Y;
    gShift := [ssRight];
//    i.FormMouseDown(self, mbRight, gShift, gx, gY);
end;

procedure Tfrommousemove.Image2MouseDown(Sender: TObject; Button:
    TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    if ssRight in Shift then
    begin


        Image2.Canvas.Pen.Mode := pmNotXor;
        Image2.Canvas.Pen.Color := clblue;
        Image2.Canvas.Pen.Style := psSolid;
        Image2.Canvas.Pen.Width := 2;

        Mdown := true;
        First := true;
        OX := X;
        OY := Y;

        SetLength(valuepos, 0);
        len := 1;
        SetLength(valuepos, len);
        valuepos[0].X := X;
        valuepos[0].Y := Y;
        valuepos[0].a := 0.0;
        valuepos[0].b := 0.0;
        valuepos[0].c := 0.0;
        valuepos[0].tangle := 0.0;
        valuepos[0].c_cos := 0.0;
        valuepos[0].maxposx := X;
        Maxtangle := 0.0;
    end;
end;

procedure Tfrommousemove.Image2MouseMove(Sender: TObject; Shift:
    TShiftState; X, Y: Integer);
var
    c_cos: double;
begin
    if not (ssRight in Shift) then
    begin
        exit;
    end;
    c_cos := 0.0;

    if Mdown then
    begin
        if not First then
        begin
            Image2.Canvas.MoveTo(OX1, OY1);
            Image2.Canvas.LineTo(X, Y);
        end
        else
        begin
            Image2.Canvas.MoveTo(ox, oy);
            Image2.Canvas.LineTo(X, Y);
        end;
        OX1 := X;
        OY1 := Y;
        First := False;
    end;
    if len < 1 then
    begin
        exit;
    end;
    if (X - valuepos[len - 1].X) * (X - valuepos[len - 1].X) + (Y -
        valuepos[len - 1].Y) * (Y - valuepos[len - 1].Y) > 4 then
    begin
        Inc(len);
        SetLength(valuepos, len);
        if valuepos[len - 2].maxposx < X then
        begin
            valuepos[len - 1].maxposx := X;
        end
        else
        begin
            valuepos[len - 1].maxposx := valuepos[len - 2].maxposx;
        end;
        valuepos[len - 1].X := X;
        valuepos[len - 1].Y := Y;

        if len < 3 then
        begin
            try

                valuepos[len - 1].a := Sqrt(1.0 * (X - valuepos[len -
                    1].X) * (X - valuepos[len - 1].X) + 1.0 * (Y -
                    valuepos[len - 1].Y) * (Y - valuepos[len - 1].Y));
                valuepos[len - 1].b := 0.0;
                valuepos[len - 1].c := 0.0;
                valuepos[len - 1].tangle := 0.0;
                valuepos[len - 1].c_cos := 0.0;
                Maxtangle := 0.0;
            except
                on E: Exception do
                begin
                    errstr := e.Message;
                end;
            end;

        end
        else
        begin
            try

                valuepos[len - 1].a := Sqrt((valuepos[len - 2].X -
                    valuepos[0].X) * (valuepos[len - 2].X - valuepos[0].X)
                    + (valuepos[len - 2].Y - valuepos[0].Y) * (valuepos
                    [len - 2].Y - valuepos[0].Y));
                valuepos[len - 1].b := Sqrt((valuepos[len - 1].X -
                    valuepos[len - 2].X) * (valuepos[len - 1].X -
                    valuepos[len - 2].X) + (valuepos[len - 1].Y -
                    valuepos[len - 2].Y) * (valuepos[len - 1].Y -
                    valuepos[len - 2].Y));
                valuepos[len - 1].c := Sqrt((valuepos[len - 1].X -
                    valuepos[0].X) * (valuepos[len - 1].X - valuepos[0].X)
                    + (valuepos[len - 1].Y - valuepos[0].Y) * (valuepos
                    [len - 1].Y - valuepos[0].Y));
                c_cos := (valuepos[len - 1].a * valuepos[len - 1].a +
                    valuepos[len - 1].b * valuepos[len - 1].b -
                    valuepos[len - 1].c * valuepos[len - 1].c) / (2.0
                    * valuepos[len - 1].a * valuepos[len - 1].b);
            except
                on E: Exception do
                begin
                    errstr := e.Message;
                end;
            end;

            try

                valuepos[len - 1].c_cos := c_cos;
                valuepos[len - 1].tangle := ArcCos(c_cos * 1.0) *
                    180.0 / 3.14;
            except
                on E: Exception do
                begin
                    errstr := e.Message;
                end;

            end;

            if (valuepos[len - 1].tangle > Maxtangle) and (valuepos[len
                - 1].tangle < 100) then
            begin
                Maxtangle := valuepos[len - 1].tangle;
            end;

            if (Maxtangle > 15) and (valuepos[len - 1].maxposx <=
                valuepos[len - 1].X) then
            begin
                Image1.Visible := True;
            end

        end;

    end;
end;

procedure Tfrommousemove.Image2MouseUp(Sender: TObject; Button:
    TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    Mdown := False;
    OX := 0;
    OY := 0;
    OX1 := 0;
    OY1 := 0;

    if len < 1 then
    begin
        exit;
    end;
    if (Maxtangle > 15) and (valuepos[len - 1].maxposx <= valuepos[len
        - 1].X) then
    begin

        len := 0;
        SetLength(valuepos, 0);
        Maxtangle := 0;
        rslt := True;
        Self.Close;

    end
    else
    begin
        len := 0;
        SetLength(valuepos, 0);
        Maxtangle := 0;
        rslt := False;
        Self.Close;
    end;
end;

end.

//主程序处理:

unit XJMAIN;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, RzGroupBar, ImgList, Menus, StdCtrls,
    ExtCtrls, RzBorder, RzTabs, UcreateTableTool, sqlstrtodelphi,
    UJBZCodeTool, Ugetzw, unit6, UNat, ComCtrls, AppEvnts, umousemove,
    UbillCode;

type
    Tfrmxjmain = class(TForm)
        RzGroupBar1: TRzGroupBar;
        RzGroup1: TRzGroup;
        RzGroup2: TRzGroup;
        RzGroup3: TRzGroup;
        il1: TImageList;
        il2: TImageList;
        RzGroup4: TRzGroup;
        pgc1: TRzPageControl;
        TabSheet1: TRzTabSheet;
        XJStatusbar: TStatusBar;
        ApplicationEventsXJ: TApplicationEvents;
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        procedure RzGroup1Items0Click(Sender: TObject);
        procedure RzGroup1Items1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure RzGroup1Items2Click(Sender: TObject);
        procedure pgc1Close(Sender: TObject; var AllowClose: Boolean);
        procedure RzGroup1Items3Click(Sender: TObject);
        procedure RzGroup1Items5Click(Sender: TObject);
        procedure RzGroup1Items4Click(Sender: TObject);
        procedure RzGroup1Items6Click(Sender: TObject);
        procedure pgc1MouseDown(Sender: TObject; Button: TMouseButton;
            Shift: TShiftState; X, Y: Integer);
        procedure ApplicationEventsXJMessage(var Msg: tagMSG; var
            Handled: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure freepage(index: integer);
        procedure N2Click(Sender: TObject);
        procedure RzGroup2Items0Click(Sender: TObject);
    procedure ApplicationEventsXJActionExecute(Action: TBasicAction;
      var Handled: Boolean);
    private
    { Private declarations }
    public
    { Public declarations }
        procedure createForm(formname: string);
    end;

var
    frmxjmain: Tfrmxjmain;
    tmp: Boolean;

implementation
{$R *.dfm}

function   MouseToScreen(mVertical:   Boolean;   mMouse:   Integer):   Integer;
begin
      case   mVertical   of
          False:   Result   :=   Round(mMouse   *   (MAXWORD   /   Screen.Width));
      else
           Result   :=   Round(mMouse   *   (MAXWORD   /   Screen.Height));
      end;
end;


procedure Tfrmxjmain.ApplicationEventsXJActionExecute(Action: TBasicAction;
  var Handled: Boolean);
begin

end;

procedure Tfrmxjmain.ApplicationEventsXJMessage(var Msg: tagMSG; var
    Handled: Boolean);
var
    index: integer;
begin
    if (Msg.message = WM_RBUTTONDOWN) and tmp and (N2.Hint =
        '屏蔽右键关闭功能') then
    begin
        tmp := False;
        index := pgc1.ActivePageIndex;
        frommousemove := Tfrommousemove.Create(self);
        frommousemove.ShowModal;
        tmp := True;
        if rslt then
        begin
            if (index >= 1) and (pgc1.Pages[index].TabVisible) then
            begin
                freepage(index);
            end
            else
            begin
                self.Close;
            end;
            if Assigned(frommousemove) then
            begin
                FreeAndNil(frommousemove);
            end;
        end
        else
        begin
            if Assigned(frommousemove) then
            begin
                FreeAndNil(frommousemove);
            end;
        end;

    end;
end;

procedure Tfrmxjmain.createForm(Formname: string);
var
    TabSheet: TRzTabSheet;
    index, i: Integer;
begin
    index := 0;
    if Formname = 'frmcreatetabletool' then
    begin
        try
            //创建窗口
            if Assigned(frmcreatetabletool) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmcreatetabletool.Caption
                        then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;

                exit;
            end;
            try
             //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmcreatetabletool := Tfrmcreatetabletool.Create(self);
            frmcreatetabletool.Parent := TabSheet;
            frmcreatetabletool.BorderStyle := bsNone;
            frmcreatetabletool.Top := 0;
            frmcreatetabletool.Left := 0;
            frmcreatetabletool.Width := TabSheet.Width;
            frmcreatetabletool.Height := TabSheet.Height;
            frmcreatetabletool.Align := alClient;
            TabSheet.Caption := frmcreatetabletool.Caption;
            frmcreatetabletool.Show;
        except
            FreeAndNil(frmcreatetabletool);
            Abort;
        end;
    end
    else if Formname = 'frmsqlstrtodelphi' then
    begin
        try
            //创建窗口
            if Assigned(frmsqlstrtodelphi) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmsqlstrtodelphi.Caption
                        then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;
                exit;
            end;

            try
                //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmsqlstrtodelphi := Tfrmsqlstrtodelphi.Create(self);
            frmsqlstrtodelphi.Parent := TabSheet;
            frmsqlstrtodelphi.BorderStyle := bsNone;
            frmsqlstrtodelphi.Top := 0;
            frmsqlstrtodelphi.Left := 0;
            frmsqlstrtodelphi.Width := TabSheet.Width;
            frmsqlstrtodelphi.Height := TabSheet.Height;
            frmsqlstrtodelphi.Align := alClient;
            TabSheet.Caption := frmsqlstrtodelphi.Caption;
            frmsqlstrtodelphi.Show;
        except
            FreeAndNil(frmsqlstrtodelphi);
            Abort;
        end;
    end
    else if Formname = 'frmjbzcodetool' then
    begin
        try
            //创建窗口
            if Assigned(frmjbzcodetool) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmjbzcodetool.Caption
                        then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;
                exit;
            end;

            try
                //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmjbzcodetool := Tfrmjbzcodetool.Create(self);
            frmjbzcodetool.Parent := TabSheet;
            frmjbzcodetool.BorderStyle := bsNone;
            frmjbzcodetool.Top := 0;
            frmjbzcodetool.Left := 0;
            frmjbzcodetool.Width := TabSheet.Width;
            frmjbzcodetool.Height := TabSheet.Height;
            frmjbzcodetool.Align := alClient;
            TabSheet.Caption := frmjbzcodetool.Caption;
            //关联窗体关闭时,执行的函数。
            //Form.OnClose := CloseTabSheet;
            frmjbzcodetool.Show;
        except
            FreeAndNil(frmjbzcodetool);
            Abort;
        end;
    end
    else if Formname = 'frmgetzw' then
    begin
        try
            //创建窗口
            if Assigned(frmgetzw) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmgetzw.Caption then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;
                exit;
            end;

            try
                //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmgetzw := Tfrmgetzw.Create(self);
            frmgetzw.Parent := TabSheet;
            frmgetzw.BorderStyle := bsNone;
            frmgetzw.Top := 0;
            frmgetzw.Left := 0;
            frmgetzw.Width := TabSheet.Width;
            frmgetzw.Height := TabSheet.Height;
            frmgetzw.Align := alClient;
            TabSheet.Caption := frmgetzw.Caption;
            //关联窗体关闭时,执行的函数。
            //Form.OnClose := CloseTabSheet;
            frmgetzw.Show;
        except
            FreeAndNil(frmgetzw);
            Abort;
        end;
    end
    else if Formname = 'frmNat' then
    begin
        try
            //创建窗口
            if Assigned(frmNat) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmNat.Caption then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;
                exit;
            end;

            try
                //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmNat := TfrmNat.Create(self);
            frmNat.Parent := TabSheet;
            frmNat.BorderStyle := bsNone;
            frmNat.Top := 0;
            frmNat.Left := 0;
            frmNat.Width := TabSheet.Width;
            frmNat.Height := TabSheet.Height;
            frmNat.Align := alClient;
            TabSheet.Caption := frmNat.Caption;
            //关联窗体关闭时,执行的函数。
            //Form.OnClose := CloseTabSheet;
            frmNat.Show;
        except
            FreeAndNil(frmNat);
            Abort;
        end;
    end
    else if Formname = 'frmbillcode' then
    begin
        try
            //创建窗口
            if Assigned(frmNat) then
            begin
                for i := 0 to pgc1.PageCount - 1 do
                begin
                    if pgc1.Pages[i].Caption = frmbillcode.Caption
                        then
                    begin
                        index := i;
                        Break;
                    end;

                end;

                pgc1.ActivePageIndex := index;
                exit;
            end;

            try
                //创建新标签页
                TabSheet := TRzTabSheet.Create(self);
                TabSheet.PageControl := pgc1;
                TabSheet.Align := alClient;
            except
                FreeAndNil(TabSheet);
                Exit;
            end;
            frmbillcode := Tfrmbillcode.Create(self);
            frmbillcode.Parent := TabSheet;
            frmbillcode.BorderStyle := bsNone;
            frmbillcode.Top := 0;
            frmbillcode.Left := 0;
            frmbillcode.Width := TabSheet.Width;
            frmbillcode.Height := TabSheet.Height;
            frmbillcode.Align := alClient;
            TabSheet.Caption := frmbillcode.Caption;
            //关联窗体关闭时,执行的函数。
            //Form.OnClose := CloseTabSheet;
            frmbillcode.Show;
        except
            FreeAndNil(frmbillcode);
            Abort;
        end;
    end;

  //设置当前的标签页为活动页
    pgc1.ActivePage := TabSheet;
end;

procedure Tfrmxjmain.FormClose(Sender: TObject; var Action:
    TCloseAction);
begin
    if Assigned(frmcreatetabletool) then
    begin
        FreeAndNil(frmcreatetabletool);
    end;

    if Assigned(frmsqlstrtodelphi) then
    begin
        FreeAndNil(frmsqlstrtodelphi);
    end;

    if Assigned(frmNat) then
    begin
        FreeAndNil(frmNat);
    end;

    if Assigned(frmjbzcodetool) then
    begin
        FreeAndNil(frmjbzcodetool);
    end;

    if Assigned(frmgetzw) then
    begin
        FreeAndNil(frmgetzw);
    end;
    if Assigned(frmbillcode) then
    begin
        FreeAndNil(frmbillcode);
    end;

    if Assigned(frommousemove) then
    begin
        FreeAndNil(frommousemove);
    end;
end;

procedure Tfrmxjmain.FormCreate(Sender: TObject);
begin
    tmp := True;
end;

procedure Tfrmxjmain.freepage(index: integer);
begin
    if pgc1.Pages[index].Caption = frmcreatetabletool.Caption then
    begin
        if Assigned(frmcreatetabletool) then
            FreeAndNil(frmcreatetabletool);
    end
    else if pgc1.Pages[index].Caption = frmsqlstrtodelphi.Caption
        then
    begin
        if Assigned(frmsqlstrtodelphi) then
            FreeAndNil(frmsqlstrtodelphi);
    end
    else if pgc1.Pages[index].Caption = frmNat.Caption then
    begin
        if Assigned(frmNat) then
            FreeAndNil(frmNat);
    end
    else if pgc1.Pages[index].Caption = frmjbzcodetool.Caption then
    begin
        if Assigned(frmjbzcodetool) then
            FreeAndNil(frmjbzcodetool);
    end
    else if pgc1.Pages[index].Caption = frmgetzw.Caption then
    begin
        if Assigned(frmgetzw) then
            FreeAndNil(frmgetzw);
    end
    else if pgc1.Pages[index].Caption = frmbillcode.Caption then
    begin
        if Assigned(frmbillcode) then
            FreeAndNil(frmbillcode);
    end;
    pgc1.Pages[index].Free;

    if index - 1 >= 0 then
    begin
        pgc1.ActivePageIndex := index - 1;
    end;
end;

procedure Tfrmxjmain.N2Click(Sender: TObject);
begin
    if N2.Hint = '屏蔽右键关闭功能' then
    begin
        N2.Caption := '开启右键关闭功能';
        N2.Hint := '开启右键关闭功能'
    end
    else
    begin
        N2.Caption := '屏蔽右键关闭功能';
        N2.Hint := '屏蔽右键关闭功能';
    end;
end;

procedure Tfrmxjmain.pgc1Close(Sender: TObject; var AllowClose:
    Boolean);
var
    index: integer;
begin
    AllowClose := True;
    index := pgc1.ActivePageIndex;
    if index >= 0 then
    begin
        freepage(index);
    end;
end;

procedure Tfrmxjmain.pgc1MouseDown(Sender: TObject; Button:
    TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    index: integer;
begin
    if (Button = mbLeft) and (ssDouble in Shift) then
    begin
        index := pgc1.ActivePageIndex;
        if index >= 0 then
        begin
            Freepage(index);
        end;
    end;
end;

procedure Tfrmxjmain.RzGroup1Items0Click(Sender: TObject);
begin
    RzGroup1.Items[1].Visible := not RzGroup1.Items[1].Visible;
    RzGroup1.Items[2].Visible := not RzGroup1.Items[2].Visible;
end;

procedure Tfrmxjmain.RzGroup1Items1Click(Sender: TObject);
begin
    createForm('frmcreatetabletool');
end;

procedure Tfrmxjmain.RzGroup1Items2Click(Sender: TObject);
begin
    createForm('frmsqlstrtodelphi');
end;

procedure Tfrmxjmain.RzGroup1Items3Click(Sender: TObject);
begin
    createForm('frmjbzcodetool');
end;

procedure Tfrmxjmain.RzGroup1Items4Click(Sender: TObject);
begin
    createForm('frmgetzw');
end;

procedure Tfrmxjmain.RzGroup1Items5Click(Sender: TObject);
begin
    createForm('form6');
end;

procedure Tfrmxjmain.RzGroup1Items6Click(Sender: TObject);
begin
    createForm('frmNat');
end;

procedure Tfrmxjmain.RzGroup2Items0Click(Sender: TObject);
begin
    createForm('frmbillcode');
end;

end.

如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值