📄 itank.pas
字号:
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 + -