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

📄 qitank.pas

📁 Iocomp Ultra Pack v3.0.2 Sources.For.Delphi 数据显示编程插件,可用于工业控制
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                         MaxPixels      := Round(Width* FMaxPoint/100);
                         MinPixels      := Round(Width* FMinPoint/100);

                         if FPointerReverse then
                           begin
                             PositionPixels := Round(MaxPixels - PositionPercent*(MaxPixels-MinPixels));
                             Bitmap.Canvas.Rectangle(PositionPixels, 0, MaxPixels+1, Height);
                           end
                         else
                           begin
                             PositionPixels := Round(PositionPercent*(MaxPixels-MinPixels) + MinPixels);
                             Bitmap.Canvas.Rectangle(MinPixels, 0, PositionPixels, Height);
                           end;
                       end;
        end;

        Bitmap.Canvas.CopyMode := cmSrcAnd;
        Bitmap.Canvas.CopyRect(Rect(0, 0 ,Width, Height), FMaskingBitmap.Canvas, Rect(0, 0 ,Width, Height));

        Bitmap.Canvas.CopyMode := cmNotSrcCopy;
        Bitmap.Canvas.CopyRect(Rect(0, 0 ,Width, Height), Bitmap.Canvas, Rect(0, 0 ,Width, Height));

        Canvas.CopyMode := cmSrcAnd;
        Canvas.CopyRect(Rect(0, 0 ,Width, Height), Bitmap.Canvas, Rect(0, 0 ,Width, Height));
      finally
        Bitmap.Free;
      end;
    end;
end;
//****************************************************************************************************************************************************
procedure TiTank.DrawCutOut(Canvas: TCanvas; AColor: TColor);
var
  DataArray  : Array[0..1000] of TPointDouble;
  PointArray : Array[0..1000] of TPoint;
  Count      : Integer;
  i          : Integer;
begin
  with Canvas do
    begin
      Brush.Style := bsSolid;
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Count := 0;

      case FPointerStyle of
        itpsBar         : begin
                            DataArray[0].x := 40; DataArray[0].y := 10;
                            DataArray[1].x := 40; DataArray[1].y := 90;
                            DataArray[2].x := 60; DataArray[2].y := 90;
                            DataArray[3].x := 60; DataArray[3].y := 10;
                            Count := 4;
                          end;

        itpsCutOut1     : begin
                            DataArray[ 0].x := 47; DataArray[ 0].y := 10;
                            DataArray[ 1].x := 25; DataArray[ 1].y := 26;
                            DataArray[ 2].x := 25; DataArray[ 2].y := 41;
                            DataArray[ 3].x := 39; DataArray[ 3].y := 47;
                            DataArray[ 4].x := 26; DataArray[ 4].y := 58;
                            DataArray[ 5].x := 40; DataArray[ 5].y := 66;
                            DataArray[ 6].x := 29; DataArray[ 6].y := 78;
                            DataArray[ 7].x := 51; DataArray[ 7].y := 90;

                            DataArray[ 8].x := 83; DataArray[ 8].y := 75;
                            DataArray[ 9].x := 64; DataArray[ 9].y := 61;
                            DataArray[10].x := 75; DataArray[10].y := 55;
                            DataArray[11].x := 66; DataArray[11].y := 48;
                            DataArray[12].x := 77; DataArray[12].y := 35;
                            DataArray[13].x := 65; DataArray[13].y := 25;
                            DataArray[14].x := 65; DataArray[14].y := 15;
                            Count := 15;
                          end;
        itpsCutOut2     : begin
                            DataArray[ 0].x := 20; DataArray[ 0].y := 90;
                            DataArray[ 1].x := 30; DataArray[ 1].y := 70;
                            DataArray[ 2].x := 10; DataArray[ 2].y := 50;
                            DataArray[ 3].x := 30; DataArray[ 3].y := 30;
                            DataArray[ 4].x := 20; DataArray[ 4].y := 20;
                            DataArray[ 5].x := 30; DataArray[ 5].y := 10;
                            DataArray[ 6].x := 80; DataArray[ 6].y := 10;
                            DataArray[ 7].x := 70; DataArray[ 7].y := 20;
                            DataArray[ 8].x := 80; DataArray[ 8].y := 30;
                            DataArray[ 9].x := 60; DataArray[ 9].y := 50;
                            DataArray[10].x := 80; DataArray[10].y := 70;
                            DataArray[11].x := 70; DataArray[11].y := 80;
                            Count := 12;
                          end;
        itpsLargeWindow : begin
                            DataArray[ 0].x := 10; DataArray[ 0].y := 15;
                            DataArray[ 1].x := 10; DataArray[ 1].y := 85;
                            DataArray[ 2].x := 20; DataArray[ 2].y := 90;
                            DataArray[ 3].x := 80; DataArray[ 3].y := 90;
                            DataArray[ 4].x := 90; DataArray[ 4].y := 85;
                            DataArray[ 5].x := 90; DataArray[ 5].y := 15;
                            DataArray[ 6].x := 80; DataArray[ 6].y := 10;
                            DataArray[ 7].x := 20; DataArray[ 7].y := 10;
                            Count := 8;
                          end;
        itpsCustom      : begin
                            for i := 0 to FCustomList.Count-1 do
                              begin
                                DataArray[i].x := (FCustomList.Objects[i] as TTankCustomPoint).X;
                                DataArray[i].y := (FCustomList.Objects[i] as TTankCustomPoint).Y;
                              end;
                            Count := FCustomList.Count;
                          end;
      end;

      for i := 0 to Count-1 do
        begin
          case FOrientation of
            ioVertical : begin
                           PointArray[i].X := Round(DataArray[i].x*Width /100);
                           PointArray[i].Y := Round(DataArray[i].y*Height/100);
                         end;
            else         begin
                           PointArray[i].X := Round(DataArray[i].y*Width /100);
                           PointArray[i].Y := Round(DataArray[i].x*Height/100);
                         end;
          end;
        end;

      Polygon(Slice(PointArray, Count));

    end;
end;
//****************************************************************************************************************************************************
procedure TiTank.DrawGradientBackGround(Canvas: TCanvas);
var
  Red        : Integer;
  Green      : Integer;
  Blue       : Integer;
  StartRed   : Integer;
  StartGreen : Integer;
  StartBlue  : Integer;
  StopRed    : Integer;
  StopGreen  : Integer;
  StopBlue   : Integer;
  DrawRect   : TRect;
  RefPoint   : TPoint;
  i          : Integer;
  LastOffset : Integer;
  Size       : Integer;
  Offset     : Integer;
  Magnitude  : Integer;
begin
  with Canvas do
    begin
      DrawRect := Rect(0, 0 ,Width, Height);

      DrawRect    := Rect(DrawRect.Left, DrawRect.Top, DrawRect.Right, DrawRect.Bottom);

      StartRed    := (FTankColor and $0000FF);
      StartGreen  := (FTankColor and $00FF00) shr 8;
      StartBlue   := (FTankColor and $FF0000) shr 16;

      StopRed     := (FTankShadowColor and $0000FF);
      StopGreen   := (FTankShadowColor and $00FF00) shr 8;
      StopBlue    := (FTankShadowColor and $FF0000) shr 16;
      Brush.Style := bsClear;

      case FOrientation of
        ioVertical : Size := (DrawRect.Right  - DrawRect.Left) div 2;
        else         Size := (DrawRect.Bottom - DrawRect.Top ) div 2;
      end;

      if Size <> 0 then
        begin
          RefPoint   := Point(Size, Size);
          Pen.Color  := BackGroundColor;
          LastOffset := -1;

          for i := 0 to Size*4 do                 
            begin
              Offset    := Round(Cos(DegToRad(90*i/(Size*4))) * Size);
              Magnitude := Round(Sin(DegToRad(90*i/(Size*4))) * Size);
              if Offset = LastOffset then Continue;
              LastOffset := Offset;

              Red       := Round((Offset/Size*StopRed   + (Size-Offset)/Size*StartRed  ));
              Green     := Round((Offset/Size*StopGreen + (Size-Offset)/Size*StartGreen));
              Blue      := Round((Offset/Size*StopBlue  + (Size-Offset)/Size*StartBlue ));
              Pen.Color := $02000000 + (Red + Green shl 8 + Blue shl 16);

              case FOrientation of
                ioVertical : begin
                               Polyline([Point(RefPoint.X + Offset-1, DrawRect.Top    + Size - Magnitude),
                                         Point(RefPoint.X + Offset-1, DrawRect.Bottom - Size + Magnitude)]);
                               Polyline([Point(RefPoint.X - Offset  , DrawRect.Top    + Size - Magnitude),
                                         Point(RefPoint.X - Offset  , DrawRect.Bottom - Size + Magnitude)]);
                             end;
                else         begin
                               Polyline([Point(DrawRect.Left  + Size - Magnitude, RefPoint.Y + Offset-1),
                                         Point(DrawRect.Right - Size + Magnitude, RefPoint.Y + Offset-1)]);
                               Polyline([Point(DrawRect.Left  + Size - Magnitude, RefPoint.Y - Offset  ),
                                         Point(DrawRect.Right - Size + Magnitude, RefPoint.Y - Offset  )]);
                             end;
              end;
            end;
        end;
    end;
end;
//****************************************************************************************************************************************************
function TiTank.CustomPointsAdd(X, Y: Double): Integer;
var
  TankCustomPoint : TTankCustomPoint;
begin
  TankCustomPoint := TTankCustomPoint.Create;
  TankCustomPoint.X := X;
  TankCustomPoint.Y := Y;
  Result := FCustomList.AddObject('', TankCustomPoint);
end;
//****************************************************************************************************************************************************
procedure TiTank.CustomPointsClear;
begin
  while FCustomList.Count <> 0 do
    begin
      FCustomList.Objects[0].Free;
      FCustomList.Delete(0);
    end;
end;
//****************************************************************************************************************************************************
end.

⌨️ 快捷键说明

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