亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arccpic.pas

?? 矢量圖源代碼 包括直線文本矩形等等
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
unit ArccPic;

interface

uses Windows,Graphics,Math,Classes,Controls,
  PicConst,PicBase,PicFuns;

const
  FOCUS_NUM=10;

type
  TArccType=(Arcc_Arc,Arcc_Sector,Arcc_Chord); //圓弧,扇形, 玄

type
  TArcDrawState=(ARC_DRAW,ARC_SET); //準備畫,開始畫,設置

type
  TArccPic=Class(TPicBase)
    private
      StartPos:TPoint;
      EndPos:TPoint;
      FocusPoint:Array[1..FOCUS_NUM] of TPoint;
      ArcStartPos:TPoint;
      ArcEndPos:TPoint;
      fArccType:TArccType;
      //ArccKeyState:TShiftState;
      fDrawState: TArcDrawState;
      procedure GetFocusPoints;
      procedure SetPicArccType(aArccType:TArccType);
    protected
    public
      constructor Create;
      destructor  Destroy; override;
      procedure DrawPic(ACanvas:TCanvas);  override;        //在acanvas上畫圖
      procedure MovePic(ACanvas:TCanvas; APoint:TPoint); override; //在acanvas上移動
      function  MouseInPicRegion(ACanvas:TCanvas;APoint:TPoint): MOUSE_POS; override; //鼠標位置
      function  CreatePicRgn(ACanvas:TCanvas): HRGN; override; //產生圖元區域的句柄
      procedure DrawFocusRect(ACanvas:TCanvas); override; //在Acanvas上畫焦點
      //鼠標響應
      procedure ParentMouseDown(ACanvas:TCanvas;CursorNum:Integer;
        Button: TMouseButton;Shift: TShiftState; APoint:TPoint); override;
      procedure ParentMouseMove(ACanvas:TCanvas;CursorNum:Integer;
        Shift: TShiftState;APoint:TPoint);  override;
      procedure ParentMouseUp(ACanvas:TCanvas;CursorNum:Integer;
        Button: TMouseButton;  Shift: TShiftState; APoint:TPoint); override;
      //鍵盤響應
      procedure ParentKeyDown(ACanvas:TCanvas;CursorNum:Integer; var Key: Word;
        mouse: TPoint; Shift:TShiftState); override;
      procedure ParentKeyUp(ACanvas:TCanvas;CursorNum:Integer; var Key: Word;
        mouse: TPoint; Shift: TShiftState); override;
      //圖象改變
      procedure PicChangeing(ACanvas:TCanvas; mouseInPos: MOUSE_POS; chooseRect:TRect;
        mouseDownOldX, mouseDownOldY, mouseOldX, mouseOldY, mouseX, mouseY:Integer); override;
      procedure PicChangedUpdate(ACanvas:TCanvas; mouseInPos: MOUSE_POS;chooseRect: TRect; //選擇圖元形成的矩形
        mouseDownOldX, mouseDownOldY: Integer; mouseX, mouseY: Integer); override; //鼠標當前的坐標
      //位置代碼可參見 PicConst.pas
      procedure AssignPic(SourcePic: TPicBase); override;
      //保存和讀取數據
      procedure GetClassDataFromChar(var Len:Integer; var Buf:Array of Char); override;
      procedure SaveClassDataToChar(var Len:Integer; var Buf:Array of Char);  override;
      //非重載函數
      //繪圖函數
      procedure DrawArccPic(ACanvas: TCanvas; startPoint:TPoint; endPoint:TPoint;ArcsPoint:TPoint;ArcePoint:TPoint);
      //property 的實現方法
    published
      property PicStartPoint:TPoint read StartPos write StartPos;
      property PicEndPoint: TPoint  read EndPos write EndPos;
      property PicArcStart: TPoint read ArcStartPos write ArcStartPos;
      property PicArcStop:  TPoint read ArcEndPos Write ArcEndPos;
      property PicArccType: TArccType read fArccType write SetPicArccType;
      property PicPen;
      property PicBrush;
      Property PicFont;
      property PicRect;
      property Choosed;
      property PicId;
      property FocusPen;
      property FocusBrush;
      property DrawEndEvent;
      property PicIndex;
  end;

implementation

constructor TArccPic.Create;
begin
  inherited Create;
  FArccType:=ARCC_ARC; //圓弧
  fDrawState:=ARC_DRAW; //正在畫
end;

destructor  TArccPic.Destroy;
begin
  inherited Destroy;
end; 


procedure TArccPic.GetFocusPoints;
begin
  focusPoint[1] := startPos; //左上
  focusPoint[2] := Point((StartPos.X+ endPos.X)div 2, StartPos.Y); //上中
  focusPoint[3] := Point(EndPos.X,StartPos.Y); //右上
  focusPoint[4] := Point(StartPos.X,(StartPos.Y+ endPos.Y)div 2); //左中
  focusPoint[5] := Point(EndPos.X,(StartPos.Y+ endPos.Y)div 2); //右中
  focusPoint[6] := Point(StartPos.X,EndPos.Y); //左下
  focusPoint[7] := Point((StartPos.X + endPos.X)div 2, EndPos.Y); //下中
  focusPoint[8] := endPos; //終點
  focusPoint[9] := ArcStartPos;
  focusPoint[10]:= ArcEndPos;
end;

procedure TArccPic.SetPicArccType(aArccType:TArccType);
begin
  if FArccType<>aArccType then fArccType:=aArccType;
end;

procedure TArccPic.DrawPic(ACanvas:TCanvas);         //在acanvas上畫圖
var
  pp: array[1..4] of TPoint;
  drawStartPoint: Tpoint;
  drawEndPoint: Tpoint;
  DrawarcsPoint: TPoint;
  DrawarcePoint: TPoint;
begin
  drawStartPoint := startPos;
  drawEndPoint := endPos;
  drawarcsPoint:=ArcStartPos;
  drawarcePoint:=ArcEndPos;
  pp[1] := drawStartPoint;
  pp[2] := drawEndPoint;
  pp[3] := drawarcsPoint;
  pp[4] := drawarcePoint;
  LpToDp(ACanvas.Handle, pp[1], 4); //取得設備坐標
  drawStartPoint := pp[1];
  drawEndPoint:=pp[2];
  drawarcsPoint:=pp[3];
  drawarcePoint:=pp[4];
  ACanvas.Pen:=PicPen;
  ACanvas.Brush:=PicBrush;
  ACanvas.Font:=PicFont;
  DrawArccPic(ACanvas, drawStartPoint, drawEndPoint,drawarcsPoint,DrawarcePoint);
  if Choosed then DrawFocusRect(ACanvas);
end;

procedure TArccPic.MovePic(ACanvas:TCanvas; APoint:TPoint);  //在acanvas上移動
var
  tmprect:TRect;
begin
  Inc(startPos.x, APoint.X);
  Inc(startPos.y, APoint.y);
  Inc(endpos.x, APoint.x);
  Inc(endpos.y, APoint.y);
   //調整圖元矩形區域
  tmprect.Left := Min(startPos.x, endPos.x);
  tmprect.Top := Min(startPos.y, endpos.Y);
  tmprect.Right := Max(startPos.x, endpos.x);
  tmprect.Bottom := Max(startPos.y, endPos.y);
  if tmprect.Right = tmprect.Left then Inc(tmprect.Right, 2);
  if tmprect.Top = tmprect.Bottom then Inc(tmprect.Bottom, 2);
  PicRect:=tmpRect;
end;

function  TArccPic.MouseInPicRegion(ACanvas:TCanvas;APoint:TPoint): MOUSE_POS;  //鼠標位置
var
  mPoint: Tpoint;
  mRect: TRect;
  FocusNumber: Integer; //焦點數量
  i: Integer;
  fPicHRGN: HRGN;
begin
  result := POS_OUT;
  focusNumber := FOCUS_NUM; // =2 焦點數量
  fPicHRGN := CreatePicRgn(ACanvas);
    //CreateLineRgn(startPoint.x,startPoint.y,endPoint.x,endPoint.y);//,Top,Right,Bottom);
  if not Choosed then begin //圖元未選中,只要判斷是否在圖元區域即可
    if PtInRegion(fPicHrgn, APoint.x, APoint.y) = True then result := POS_CENTER
  end else begin //圖元被選中,不僅要判斷是否在圖元區域,還需要判斷在圖元的具體位置
    if PtInRegion(fPicHrgn, APoint.x, APoint.y) = True then  result := POS_CENTER;
    GetFocusPoints;  //取焦點坐標
    LpToDp(ACanvas.Handle, focusPoint[1], focusNumber);
    mPoint:=APoint;
    for i := FocusNumber Downto 1 do  begin
      with mRect do  begin
        Left := focusPoint[i].x - FOCUS_SIZE;
        Top := focusPoint[i].y - FOCUS_SIZE;
        Right := focusPoint[i].x + FOCUS_SIZE;
        Bottom := focusPoint[i].y + FOCUS_SIZE;
      end;
      if PtInRect(mRect, mPoint) = True then  begin
        if i>8 then begin
          Result := MOUSE_POS(Ord(POS_ARCSTART)- 1 + (i-8));
        end else begin
          Result := MOUSE_POS(Ord(POS_LEFTTOP)- 1 + i);
        end;         // =14 圓弧起點
        Break;
      end
    end;
  end;
  DeleteObject(fPicHrgn);
end;

function  TArccPic.CreatePicRgn(ACanvas:TCanvas): HRGN; //產生圖元區域的句柄
var
  hrgnFlag: Integer;
  tmpHrgn: HRGN;
  centerX, centerY: Integer; //圓心坐標
  pp: array[1..4] of TPoint;
begin
  pp[1] := StartPos;
  pp[2] := Endpos;
  pp[3] := ArcStartPos;
  pp[4] := ArcendPos;
  LpToDp(ACanvas.Handle, pp[1], 4);
  hrgnFlag:=0; Result:=0;
  case fArccType of
    Arcc_Arc: //Arc
      begin
        hrgnFlag := 0; //圓弧
      end;
    Arcc_Sector: //Chord
      begin
        if PicBrush.style = bsClear then
          hrgnflag := 1 //chird and clear
        else
          hrgnflag := 2; //chord and solid
      end;
    Arcc_Chord: //Pie
      begin
        if PicBrush.style = bsClear then
          hrgnflag := 3 //Pie and clear
        else
          hrgnflag := 4; //Pie and solid
      end;
  end;
  case hrgnFlag of
    0: //Arc
      begin
        Result := CreateArcRgn(pp[1],pp[2],pp[3],pp[4]);
      end;
    1: //chord and clear
      begin
        Result := CreateArcRgn(pp[1],pp[2],pp[3],pp[4]);
        tmpHrgn := CreateLineRgn(arcStartPos.x, arcStartPos.y,arcEndPos.x, arcEndPos.y);
        CombineRGN(Result, Result, tmpHrgn, RGN_OR);
        DeleteObject(tmpHrgn);
      end;
    2: //chord and solid
      begin
        Result := CreatePieRgn(pp[1],pp[2],pp[3],pp[4],Ord(fArccType));
      end;
    3: //Pie and clear
      begin
        centerX := (StartPos.x + endPos.x) div 2; //圓心坐標
        centerY := (Startpos.y + endPos.y) div 2;
        Result := CreateArcRgn(pp[1],pp[2],pp[3],pp[4]);
        //起點至圓心
        tmpHrgn := CreateLineRgn(arcStartPos.x, arcStartPos.y, centerX, centerY);
        CombineRGN(Result, Result, tmpHrgn, RGN_OR);
        //終點至圓心
        tmpHrgn := CreateLineRgn(arcEndPos.x, arcEndPos.y, centerX, centerY);
        CombineRGN(Result, Result, tmpHrgn, RGN_OR);
        DeleteObject(tmpHrgn);
      end;
    4: //Pie and solid
      begin
        Result:= CreatePieRgn(pp[1],pp[2],pp[3],pp[4],Ord(fArcctype));
      end;
  end;
end;

procedure TArccPic.DrawFocusRect(ACanvas:TCanvas);  //在Acanvas上畫焦點
var
  mRect: TRect;
  FocusNumber: Integer; //焦點數量
  i: Integer;
begin
  focusNumber := FOCUS_NUM; //=2   焦點數量
  GetFocusPoints;  //取焦點坐標
  LpToDp(ACanvas.Handle,FocusPoint[1],FocusNumber);
  ACanvas.Pen:=FocusPen;
  ACanvas.Brush:=FocusBrush;
  for i := 1 to focusNumber do begin  //繪制焦點矩形
    if i>8 then ACanvas.Brush.Color:=clLime;
    mRect.Left := focusPoint[i].x - FOCUS_SIZE;
    mRect.Top := focusPoint[i].y - FOCUS_SIZE;
    mRect.Right := focusPoint[i].x + FOCUS_SIZE;
    mRect.Bottom := focusPoint[i].y + FOCUS_SIZE;
    ACanvas.Rectangle(mRect.Left, mRect.Top, mRect.Right, mRect.Bottom);
  end;
end;

//鼠標響應
procedure TArccPic.ParentMouseDown(ACanvas:TCanvas;CursorNum:Integer;
        Button: TMouseButton;Shift: TShiftState; APoint:TPoint);
var
  pp:TPoint;
begin
  if Button = mbRight then  Exit;
  //設置pen的格式
  ACanvas.Pen:=PicPen;
  ACanvas.Pen.Mode:=pmXor;
  //設置Brush的格式
  ACanvas.Brush:=PicBrush;
  case fDrawState of
    ARC_DRAW:
      begin
        StartPos:=APoint;  //設置圖元的起點
        EndPos := APoint;   //置終點坐標
        ArcStartPos:=APoint;
        ArcEndPos:=APoint;
      end;
    ARC_SET:   //確定圓弧的終點,圓弧的起點由mouseUp確定
      begin
        pp :=PointToCirclePoint(StartPos,EndPos, APoint);
        DpToLp(ACanvas.Handle, pp, 1);
        ArcEndPos:=pp;
      end;
  end;
end;

procedure TArccPic.ParentMouseMove(ACanvas:TCanvas;CursorNum:Integer;
        Shift: TShiftState;APoint:TPoint);
var
  radiu: Integer;
  centerX, centerY: Integer;
  pp: array[1..4] of TPoint;
begin
  case fDrawState of
    ARC_DRAW: //確定圓弧半徑和起點
       begin
         if (ssLeft in Shift) then begin
          //清除前一次繪制的圖形
           DrawArccPic(ACanvas,StartPos,EndPos,ArcStartPos,ArcEndPos);
           //繪制當前的圖形
           centerX := (endPos.X + StartPos.x) div 2; //圓心
           centerY := (EndPos.y + StartPos.y) div 2;
           radiu := round(sqrt(sqr(Apoint.X - centerX) + sqr(Apoint.Y - centerY))); //半徑
           StartPos.x := centerX - radiu; //調整圓弧的四角坐標
           StartPos.y := centerY - radiu;
           endPos.x := centerX + radiu;
           EndPos.y := centerY + radiu;
           DrawArccPic(ACanvas,StartPos,EndPos,ArcStartPos,ArcEndPos);
         end;
       end;
    ARC_SET: //確定圓弧終點
       begin
         //設置pen的格式
         ACanvas.Pen:=PicPen;
         ACanvas.Pen.Mode:=pmXor;
         //設置Brush的格式
         ACanvas.Brush:=PicBrush;
         centerX := (EndPos.x + StartPos.x) div 2; //圓心
         centerY := (EndPos.y + StartPos.y) div 2;
         //清除前一次繪制的圖形
         //if fArccType<>ARCC_SECTOR then begin
           ACanvas.MoveTo(centerX, centerY);
           ACanvas.LineTo(arcEndPos.x, arcEndPos.y);
         //end;
         DrawArccPic(ACanvas,StartPos,EndPos,ArcStartPos,ArcEndPos);
         //繪制當前的圖形
         pp[1] :=PointToCirclePoint(StartPos,EndPos, APoint);
         DpToLp(ACanvas.Handle, pp[1], 1);
         arcEndPos := pp[1]; //確定新的圓弧終點
         //if fArccType<>ARCC_SECTOR then begin
           ACanvas.MoveTo(centerX, centerY);
           ACanvas.LineTo(arcEndPos.x, arcEndPos.y);
         //end;
         DrawArccPic(ACanvas,StartPos,EndPos,ArcStartPos,ArcEndPos);
      end;
  end;
end;

procedure TArccPic.ParentMouseUp(ACanvas:TCanvas;CursorNum:Integer;
        Button: TMouseButton;  Shift: TShiftState; APoint:TPoint);
var
  pp: array[1..4] of TPoint;
  tmpRect:TRect;
  centerx,centery:Integer;
begin
  case fDrawState of
    ARC_DRAW: //確定半徑和圓弧的起點
      begin
        arcStartPos:=APoint;
        arcEndPos := APoint;
        if ((Abs(EndPos.x - StartPos.x) < MinCellSize) or
            (Abs(EndPos.y - StartPos.y) < MinCellSize)) then  begin
          endPos.x := endPos.x + MinCellSize;
          endpos.y := endpos.y + MinCellSize;
        end;
        pp[1] := StartPos;
        pp[2] := EndPos;
        pp[3] := arcStartPos;
        pp[4] := arcEndPos;
        DpToLp(ACanvas.Handle, pp[1], 4);
        StartPos := pp[1];
        endPos   := pp[2];
        arcStartPos := pp[3];
        arcEndPos := pp[4];
        with tmpRect do  begin //保證右下角坐標大于,等于左上角坐標

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图在线视频| 久久电影网站中文字幕| 亚洲小少妇裸体bbw| 韩国视频一区二区| 欧美日韩情趣电影| 国产欧美视频在线观看| 日本色综合中文字幕| 一本色道久久综合亚洲aⅴ蜜桃| 精品国产a毛片| 亚洲h动漫在线| 91免费视频观看| 中文字幕不卡一区| 国产成人精品三级麻豆| 91精品欧美一区二区三区综合在| 亚洲精品免费在线| 岛国一区二区在线观看| 亚洲精品一线二线三线| 奇米综合一区二区三区精品视频 | 麻豆精品在线视频| 欧洲中文字幕精品| 亚洲色图一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 精品盗摄一区二区三区| 精品一区二区三区在线观看 | 韩日av一区二区| 欧美一区午夜精品| 五月激情综合色| 7777精品伊人久久久大香线蕉最新版| 亚洲影视在线播放| 欧美日韩综合在线免费观看| 亚洲一二三四久久| 欧美四级电影网| 亚洲最大成人网4388xx| 欧美日韩中文字幕精品| 一区二区三区四区不卡视频| 91行情网站电视在线观看高清版| 欧美国产国产综合| 色综合 综合色| 亚洲一区二区成人在线观看| 欧美日韩第一区日日骚| 日本成人在线不卡视频| 精品久久久久久亚洲综合网| 精品一区二区三区免费视频| 久久久久久久性| av一二三不卡影片| 亚洲一区二区免费视频| 制服.丝袜.亚洲.另类.中文| 久久超碰97人人做人人爱| 久久久精品中文字幕麻豆发布| 国产高清精品在线| 亚洲激情在线激情| 欧美一区二区三区色| 久久99精品国产.久久久久久| 久久久久久免费网| 99国产精品视频免费观看| 亚洲一区二区三区四区五区黄| 69久久99精品久久久久婷婷| 韩国av一区二区| 欧美aⅴ一区二区三区视频| 国产午夜亚洲精品不卡| 97久久精品人人做人人爽| 亚洲国产一区二区a毛片| 精品欧美一区二区久久| 成人激情黄色小说| 天天操天天综合网| 国产人成一区二区三区影院| 欧美在线综合视频| 国产乱人伦精品一区二区在线观看| 国产精品无码永久免费888| 91福利在线播放| 国产真实精品久久二三区| 亚洲私人黄色宅男| 精品国产一区二区三区四区四| 99九九99九九九视频精品| 日产国产欧美视频一区精品 | 国产99久久久国产精品| 亚洲一区二区欧美日韩 | 国产精品久久看| 8x8x8国产精品| caoporn国产精品| 免费日韩伦理电影| 亚洲视频每日更新| 久久久综合九色合综国产精品| 日本道色综合久久| 成人午夜视频福利| 美女视频黄频大全不卡视频在线播放| 亚洲欧美日韩国产另类专区| 亚洲精品一区在线观看| 欧美福利一区二区| 日本韩国欧美在线| 777亚洲妇女| 91成人免费在线视频| 国产suv一区二区三区88区| 欧美aⅴ一区二区三区视频| 一区二区三区四区在线播放| 国产三级欧美三级日产三级99| 欧美日韩你懂的| 欧美性猛片xxxx免费看久爱| 91在线视频18| 成人a级免费电影| 国产成人精品亚洲777人妖| 久久99国产精品久久99| 男人的j进女人的j一区| 欧美a一区二区| 日韩电影在线看| 日韩在线一区二区三区| 午夜精品影院在线观看| 亚洲一二三级电影| 亚洲成av人片www| 亚洲成人免费视| 五月天久久比比资源色| 亚洲国产精品久久人人爱蜜臀| 一区二区三区国产豹纹内裤在线| 亚洲人成影院在线观看| 亚洲老妇xxxxxx| 一区二区三区波多野结衣在线观看 | 2020国产精品| 久久色成人在线| 欧美精品一区二区三区高清aⅴ| 日韩精品一区二区三区视频| 亚洲图片欧美一区| 亚洲国产精品自拍| 日韩精品亚洲专区| 久久国产夜色精品鲁鲁99| 国精产品一区一区三区mba桃花 | 一区二区视频在线| 一片黄亚洲嫩模| 日韩高清不卡在线| 国内精品伊人久久久久av影院| 激情图片小说一区| 不卡免费追剧大全电视剧网站| 一本一本大道香蕉久在线精品 | 国内精品久久久久影院一蜜桃| 国产综合久久久久影院| 成人激情黄色小说| 色爱区综合激月婷婷| 欧美日韩国产另类一区| 欧美成人性战久久| 国产精品视频第一区| 一区二区三区不卡在线观看| 日本中文字幕一区二区视频| 国产精品99久久久久| 91视频免费看| 欧美一级欧美一级在线播放| 久久久不卡网国产精品二区 | 99久久综合狠狠综合久久| 欧美亚洲精品一区| 久久日韩粉嫩一区二区三区| 中文字幕一区二区三区乱码在线| 亚洲成人你懂的| 风间由美一区二区三区在线观看 | 欧美日韩一二三| 久久久不卡网国产精品一区| 亚洲女与黑人做爰| 久久成人精品无人区| 色婷婷国产精品久久包臀| 欧美一区二区三区在线视频| 国产日韩影视精品| 日韩制服丝袜先锋影音| 成人亚洲一区二区一| 欧美一区二区在线观看| 综合亚洲深深色噜噜狠狠网站| 麻豆精品在线播放| 色女孩综合影院| 欧美激情在线观看视频免费| 午夜精品一区二区三区电影天堂| 从欧美一区二区三区| 日韩一区二区麻豆国产| 亚洲精品第一国产综合野| 国产综合久久久久影院| 这里是久久伊人| 亚洲精选视频免费看| 国产成人综合自拍| 欧美mv日韩mv国产网站app| 亚洲一区二区三区中文字幕在线| 成人黄动漫网站免费app| 26uuu精品一区二区| 午夜精品免费在线| 欧美做爰猛烈大尺度电影无法无天| 久久久99久久精品欧美| 美国一区二区三区在线播放| 欧美猛男超大videosgay| 中文字幕欧美一区| 粉嫩欧美一区二区三区高清影视| 日韩片之四级片| 视频一区二区三区在线| 欧美视频中文一区二区三区在线观看| 国产亚洲成aⅴ人片在线观看| 久久国产欧美日韩精品| 日韩一区二区三区免费看| 三级欧美在线一区| 欧美日韩国产a| 亚洲国产精品尤物yw在线观看| 色哟哟国产精品| 亚洲免费av网站| 在线观看视频一区二区欧美日韩| 中文字幕在线观看一区| 91天堂素人约啪| 一二三四社区欧美黄| 欧美欧美欧美欧美|