const
Colors: array[0..10] of TColor = (clRed, clGreen, clBlue, clYellow,
clMaroon, clTeal, clNavy, clOlive,
clPurple, clLime, clFuchsia);
//
function Min(a,b: Integer): LongInt;
begin
if a<=b then result:=a else result:=b;
end;
function Max(a,b: Integer): LongInt;
begin
if a>b then result:=a else result:=b;
end;
function GetArcPoint(cPoint: TPoint; radius, angle: Extended): TPoint;
begin
result.x:=Round(cPoint.x + radius * Cos(angle * 2 * pi / 360));
result.y:=Round(cPoint.y - radius * Sin(angle * 2 * pi / 360));
end;
function GetCentrePoint(oRect: TRect): TPoint;
begin
result.x:=oRect.left + (oRect.right-oRect.left) div 2;
result.y:=oRect.top + (oRect.bottom-oRect.top) div 2;
end;
procedure TForm1.FormPaint(Sender: TObject);
var cv, vv, za, va, co, sum, radius, angle, valuecount, valuesum: Integer;
middlepoint, copypoint: TPoint;
values, angles: array[0..10] of Integer;
CirclePoints: array[0..365] of TPoint;
begin
values[0]:=15;
values[1]:=25;
values[2]:=20;
values[3]:=15;
values[4]:=15;
valuecount:=5;
valuesum:=0; for cv:=0 to valuecount-1 do valuesum:=valuesum+values[cv];
Canvas.Brush.Color:=clWhite;
Canvas.FillRect(ClientRect);
Canvas.Pen.Color:=clBlack;
radius:=(Min(width, height)-40) div 2;
middlepoint:=GetCentrePoint(ClientRect);
//Werte in Winkel konv.
for cv:=0 to valuecount-1 do
angles[cv]:=Round(values[cv]*360/valuesum);
//Tortenrand ausgeben
za:=0; sum:=angles[0]; va:=1; co:=0;
for angle:=0 to 360 do
begin
if angle<180 then
begin
if angle=sum then begin inc(co); sum:=sum+angles[va]; inc(va); end;
Continue;
end;
CirclePoints[za]:=GetArcPoint(middlepoint, radius, angle);
CirclePoints[za].y:=middlepoint.y-(middlepoint.y-CirclePoints[za].y) div 2 + radius div 5; //Tortenhoehe 20% des Radius
if (angle=sum) or (angle=360) then
begin
Canvas.Brush.Color:=Colors[co]; inc(co);
copypoint:=CirclePoints[za];
CirclePoints[za+1].x:=CirclePoints[za].x;
CirclePoints[za+1].y:=middlepoint.y;
CirclePoints[za+2].x:=CirclePoints[0].x;
CirclePoints[za+2].y:=middlepoint.y;
Polygon(Canvas.Handle, CirclePoints[0], za+3);
CirclePoints[0]:=copypoint;
sum:=sum+angles[va]; inc(va);
za:=1;
Continue;
end;
inc(za);
end;
//obere Tortenfläche ausgeben
za:=0; sum:=angles[0]; va:=1; co:=0;
for angle:=0 to 360 do
begin
CirclePoints[za]:=GetArcPoint(middlepoint, radius, angle);
CirclePoints[za].y:=middlepoint.y-(middlepoint.y-CirclePoints[za].y) div 2;
if (angle=sum) or (angle=360) then
begin
Canvas.Brush.Color:=Colors[co]; inc(co);
copypoint:=CirclePoints[za];
CirclePoints[za+1]:=middlepoint;
Polygon(Canvas.Handle, CirclePoints[0], za+2);
CirclePoints[0]:=copypoint;
sum:=sum+angles[va]; inc(va);
za:=1;
Continue;
end;
inc(za);
end;
end;
Create Canvas 3D-Diagram
Abonnieren
Posts (Atom)
Beliebte Posts
-
Network Source Code Update Source Code Network Update : https://asciigen.blogspot.com/p/network.html Send Message 1.0 Source Server Client ...
-
Windows Key Sniffer 0.82 - Update 08/2024 Der Windows Key Sniffer hat mir im Laufe der Zeit viel Arbeit erspart und unterstützt, viele Wi...
-
Windows Defender Bypass Version 0.75 - Update 11/2024 Den Windows 10-eigenen Virenschutz Defender kann man auf mehreren Wegen abschalten,...
-
ASCii GIF Animator Update Version 0.68 (32 bit) - 11/2024 Bei dieser überarbeiteten Version ist die Kompatibilität zu den verschiedenen GIF...
-
MD5 Hacker v.0.26 - Update 08.2024 MD5 Hashs sollten eigentlich nicht entschlüsselt werden können. Jedoch gibt es Tools, mit welchen auch ...
-
Host Editor Version 0.64 - Update 11/2024 Hosts File Editor allows for the easy editing of host files and backup creation. Create your own h...
-
Dir Sniffer Version 0.08 - Update 08/2024 Dir Sniffer ist ein kleines aber nützliches Tool um herauszufinden, was ihr Programm auf ihrem...
-
Oldskool Font Generator v.0.29 - Update 11/2023 Das Tool stell 508 Bitmap Fonts zu Verfügung. Eigene Fonts können integriert werden, sie...
-
ASCii Text Creator v.0.24 - Update 11.2023 * Add BugFix Gui Move Message Send * Add 447 Figlet Font Pack * Fixed Invert Unicode Function * ...
Keine Kommentare:
Kommentar veröffentlichen