Autor Beitrag
gerd8888
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Do 14.03.13 22:00 
Hallo,

ich würde gerne ein Kreis-Diagramm bzw. Kuchendiagramm oder einzelne Segmente in canvas darstellen.
Mit canvas.elipse kann ich zwar einen Kreis zeichnen aber die einzelnen Prozente dann nicht mehr trennen.

Ich stelle mir das etwas komplizierter vor. Muss man die Vektorgrafik vielleicht selbt irgendwie mit cos(a)
arbeiten.

So ein Diagramm was man z.B. bei der Bundestagswahl sieht mit Prozenten, das suche ich.
Hat da vielleicht schon jemand etwas fertiges?
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 14.03.13 23:01 
Etwas fertiges dazu kann ich nicht anbieten, aber TCanvas besitzt die Methode Arc. Damit kannst du Kreisbögen zeichnen.

€: Eben nachgeschaut, es gibt sogar die Methode Pie, die zeichnet direkt das ganze Kuchenstück.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.03.13 23:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Fr 15.03.13 19:34 
Hallo,

ich konnte jetzt das Problem lösen. Weiss aber nicht, ob es noch einfacher geht?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure kreissegment(w1,w2:real; f1,f2,f3:byte);
var
Pi,winkel,grad1,grad2:real;
m,r,h,w,x1,y1,x2,y2:integer;

begin

  Pi := 3.14159268;
  m := 100;          // Mittelpunkt
  r := 50 ;          // Radius
  h := 200;          // Höhe
  w := 200;          // Breite

  grad1 := -90+w1; //bei 12 Uhr, dann dem Urzeigersinn, darum -90
  winkel := pi*grad1/180;
  x1 := Trunc(Cos(winkel)* r) + m;
  y1 := Trunc(Sin(winkel)* r) + m;

  grad2 := grad1+w2;
  winkel := pi*grad2/180;
  x2 := Trunc(Cos(winkel)* r)+m;
  y2 := Trunc(Sin(winkel)* r)+m;

  statistik1.Canvas.Pen.Color := 0;
  statistik1.canvas.Brush.Color := rgb(f1,f2,f3);
  statistik1.Canvas.Pie(10,10,h-10,w-10,x2,y2,x1,y1);
end;

function prozent_to_winkel(prozent:real):real;
begin
  prozent_to_winkel:=360*prozent/100
end;

procedure Tstatistik1.Button1Click(Sender: TObject);
begin
 //erstes Beispiel mit Grad Angabe (90 Grad, 90 Grad, 45 Grad)
 // kreissegment(0,90,0,0,255);
 // kreissegment(90,90,0,255,0);
 // kreissegment(180,45,255,0,0);

  //zweites Beispiel mit Prozent (3 Stück Kuchen mit jeweils 33.33 Prozent)
  kreissegment(0,prozent_to_winkel(33.33),0,0,255);
  kreissegment(prozent_to_winkel(33.33),prozent_to_winkel(33.33),0,255,0);
  kreissegment(prozent_to_winkel(66.66),prozent_to_winkel(33.33),255,0,0);
end;
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.03.13 18:30 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Horst_H
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: So 17.03.13 17:12 
Hallo Frühlingsrolle,

ich wollte das Beispiel ausprobieren.
Das chart1 bzw. chart was dahinter steht unterstreicht mein delphi 2009 rot. Obwohl ich die 2 units eingebunden habe.
Wenn ich statt chart1 nur chart. hernehme unterstreicht er mir das nicht rot, aber das was dahinter steht.
Ich konnte es demnach nicht compilieren.

Gerd
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.03.13 17:31 
- Nachträglich durch die Entwickler-Ecke gelöscht -
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: So 17.03.13 18:07 
Hallo Frühlingsrolle,

jetzt habe ich das Tchart in die Form platziert und es hat funktioniert.
Ich bekomme ein Kreisdiagramm und oben rechts noch mit der Schrift die dazugehoerige Farbe.
Ja, so wie ich es wollte.
Danke

Gerd
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.03.13 18:40 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: gerd8888
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 18.03.13 10:32 
Hallo,

@gerd8888:
ich fand Deine Version etwas statisch in Bezug auf die Koordinaten.
Auf beispielsweise stackoverflow.com/qu...all-the-pie-function steht es beschrieben, wie man es allgemeiner lösen kann.
Ich habe es etwas umgestrickt und in Lazarus umgesetzt.
ZufallsKuchendiagramm
Die TChart Lösung ist aber sicher viel fexibler und einfacher in der Handhabung.

Gruß Horst
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: gerd8888
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Mo 18.03.13 14:27 
Hallo Horst,

naja gut, das ist eine kleine Spielerei. Ich musste das RequireDerivedFormResource := True; löschen, dann konnte ich es mir auch auf Lazerus ansehen.

Die Sachen mit dem Objektinspektor habe ich mir auch angesehen. Da kann man wirklich unglaublich viel machen.
Ich glaube mit view3d:=true und kreisdiagramm bin ich ganz glücklich.
Ist ja auch nur eine kleine Statistik (Auskunft über meine Video-dateien), die ich machen wollte.

Gerd