Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 'Hübsche' Teechart-Komponente (https://www.delphipraxis.net/24225-huebsche-teechart-komponente.html)

gkoeder 17. Jun 2004 20:56


'Hübsche' Teechart-Komponente
 
Hallo!

Ich bin auf der Suche nach einer optisch ansprechenden TeeChart-Komponente. Die Komponente soll ein einfaches Kreisdiagramm ähnlich der Speicherkapazität-Anzeige des Windows-Systems anzeigen können. Delphi liefert hier ja eine Komponente mit - nur sieht die schlicht potthässlich aus (Was bringt ein Userinterface mit dem neuesten Look and Feel wenn Teile davon im Win3.11 Look daherkommen).
Da die Komponente nur simple Werte darstellen soll, sind die meisten kommerziellen Lösungen zu umfangreich und blähen das Programm nur sehr auf.

Kennt jemand eine ressourcenschonende und optisch Ansprechende TeeChart-Komponente (Sowas wie in den aktuellen Acronis-Produkten wär nicht schlecht :-D )?

MfG
Gerald

Alibi 17. Jun 2004 21:02

Re: 'Hübsche' Teechart-Komponente
 
Schreib doch selber? Ist nicht wirklich schwer. Hatte mal sowas in nem Programm von mir gemacht.
Delphi-Quellcode:
procedure DrawPie(image: TImage;values:array of integer; thecolors: array of TColor;height: integer);
var
  p1, p2: TPoint;
  angle: array[0..3] of extended;
  offset, i, max: integer;
begin
  offset := (height) div 2+1;

  Image.Canvas.Brush.Color := $005A5656;
  Image.Canvas.FillRect(Image.Canvas.ClipRect);

  Image.Canvas.Arc(0,height,image.width, image.height-offset*2 + height,
                   0,image.height div 2-offset+height,
                   image.width,image.height div 2-offset+height);

  max := 0;
  for i := 0 to 2 do
    inc(max,values[i]);

  if max > 0 then begin

    angle[0] := 0;
    angle[1] := 3.6 * (100 / max * values[0]);
    angle[2] := 3.6 * (100 / max * values[1]) + angle[1];
    angle[3] := 3.6 * (100 / max * values[2]) + angle[2];

    for i := 0 to 2 do begin
      if angle[i] <> angle[i+1] then begin
        p2.x :=trunc(cos(pi/180 * angle[i]) * (image.Width div 2) + image.Width div 2);
        p2.Y :=trunc(sin(pi/180 * angle[i]) * (image.Height div 2 -offset) + (image.Height div 2-offset));
        p1.X :=trunc(cos(pi/180 * angle[i+1]) * (image.Width div 2) + image.Width div 2);
        p1.Y :=trunc(sin(pi/180 * angle[i+1]) * (image.Height div 2-offset) + (image.Height div 2-offset));
        Image.canvas.brush.Color := thecolors[i];
        Image.Canvas.Pie(0,0, Image.Width, Image.Height-offset*2, p1.x,p1.y,p2.x,p2.y);
      end;
    end;

  end else
    Image.Canvas.Ellipse(0,0, Image.Width, Image.Height-offset*2);

  Image.Canvas.Brush.Color := clWhite;
  Image.Canvas.FloodFill(0,0,clBlack,fsBorder);
  Image.Canvas.FloodFill(Image.Width-1,0,clBlack,fsBorder);
  Image.Canvas.FloodFill(0,Image.Height-1,clBlack,fsBorder);
  Image.Canvas.FloodFill(Image.Width-1,Image.Height-1,clBlack,fsBorder);
end;

andimx 20. Jun 2005 12:25

Re: 'Hübsche' Teechart-Komponente
 
Das funktioniert aber nicht wirklich einwandfrei.
Bei mir wird nur ein weißer Kasten mit einer schwarzen linie gezeichnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz