Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Grafik VCL önerisi
#1
Herkese selamlar,

bir projemde kullanılmak üzere ekteki resimdeki gibi bir grafik yapmam gerekiyor. Teechart ile bu şekle bep getiremedim. Önereceğiniz bir VCL varsa, yardımcı olmanızı rica ederim.

   
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#2
(10-04-2019, Saat: 18:29)wiseman Adlı Kullanıcıdan Alıntı: Herkese selamlar,

bir projemde kullanılmak üzere ekteki resimdeki gibi bir grafik yapmam gerekiyor. Teechart ile bu şekle bep getiremedim. Önereceğiniz bir VCL varsa, yardımcı olmanızı rica ederim.
Teecharta bakmışsınız herhalde fakat ben sample larında boyle bir ornek hatirliyorum sanki
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#3
Basit bir örnek vereyim, oradan mantığı yürütürsünüz...  Idea

Uses  VclTee.Series,
      VclTee.TeeGDIPlus,
      VclTee.TeEngine,
      Vcl.ExtCtrls,
      VclTee.TeeProcs,
      VclTee.Chart;

var
  FChart : VclTee.Chart.TChart;

Procedure PieChartHazirla( aControl: TWinControl );
begin
  if NOT Assigned( FChart )
    then FChart := VclTee.Chart.TChart.Create(nil);

  With FChart do begin
    Parent  := aControl;
    Width   := aControl.Width  - 20;
    Height  := aControl.Height - 20;
    Left    := 10;
    Top     := 10;
    Anchors := [akLeft, akTop, akRight, akBottom];
    Visible := True;

    View3D := True;
    Legend.Visible := True;

    while SeriesCount > 0 do Series[0].DisposeOf;

    Title.Text.Clear;
      Title.Text.Add( 'Ana Başlık 1. Satır' );
      Title.Text.Add( 'Ana Başlık 2. Satır' );
      Title.Text.Add( 'Ana Başlık 3. Satır' );

    AddSeries( VCLTee.Series.TPieSeries.Create(nil) );
    Series[0].Name := 'PieChart';
    Series[0].Add( 10, '10 birim', clYellow  );
    Series[0].Add( 20, '20 birim', clBlue    );
    Series[0].Add( 30, '30 birim', clMaroon  );
    Series[0].Add( 40, '40 birim', clRed     );
  end;
end;

Procedure PieChartKaldir;
begin
  if Assigned( FChart ) then
  begin
    while FChart.SeriesCount > 0
      do FChart.Series[0].DisposeOf;
    FreeAndNil( FChart );
  end;
end;



Örnek Kullanım

procedure TForm1.Button1Click(Sender: TObject);
begin
  PieChartHazirla( self );
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  PieChartKaldir();
end;



uhkfflgl06kdaguvnxvc.png
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#4
Muharrem hocam, çok teşekkür ederim ilginize. Aşağıdaki satırda disposeof komutunu kabul etmedi.
while SeriesCount > 0 do Series[0].DisposeOf;
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#5
Free deyin disposeof yerine çalışacaktır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
Muharrem hocam, teşekkür ederim. Yine bir derdimize çare oldunuz. Smile
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#7
(11-04-2019, Saat: 09:53)mrmarman Adlı Kullanıcıdan Alıntı: Free deyin disposeof yerine çalışacaktır.

Muharrem hocam, bir de chart onmousemove eventinda, mouse hangi dilimin üzerinde ise, onun değerini hint olarak nasıl alabileceğim konusunda da yardım istesem olur mu?
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#8
Hemen örnekleyelim...

  With FChart do begin
    Parent  := aControl;
   Width   := aControl.Width  - 20;
   Height  := aControl.Height - 20;
   Left    := 10;
   Top     := 10;
   Anchors := [akLeft, akTop, akRight, akBottom];
   Visible := True;
// Eklenen Event
   OnMouseMove := Form1.PieMouseMove; //Bunu Ekledik....

procedure TForm1.PieMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
var
  sIdx   : Integer;
  aPoint : TPoint;
begin
  sIdx   := FChart.Series[0].Clicked(X, Y);
  FChart.ShowHint := sIdx <> -1;

  if FChart.ShowHint then
  begin
    FChart.Hint := FChart.Series[0].ValueMarkText[sIdx];
    aPoint.X := X;
    aPoint.Y := Y - 30;
    Application.ActivateHint( ClientToScreen( aPoint ));
  end;
end;


csbges7difcp7zjtzuix.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#9
(11-04-2019, Saat: 18:33)mrmarman Adlı Kullanıcıdan Alıntı: Hemen örnekleyelim...

  With FChart do begin
    Parent  := aControl;
   Width   := aControl.Width  - 20;
   Height  := aControl.Height - 20;
   Left    := 10;
   Top     := 10;
   Anchors := [akLeft, akTop, akRight, akBottom];
   Visible := True;
// Eklenen Event
   OnMouseMove := Form1.PieMouseMove; //Bunu Ekledik....

procedure TForm1.PieMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
var
  sIdx   : Integer;
  aPoint : TPoint;
begin
  sIdx   := FChart.Series[0].Clicked(X, Y);
  FChart.ShowHint := sIdx <> -1;

  if FChart.ShowHint then
  begin
    FChart.Hint := FChart.Series[0].ValueMarkText[sIdx];
    aPoint.X := X;
    aPoint.Y := Y - 30;
    Application.ActivateHint( ClientToScreen( aPoint ));
  end;
end;


csbges7difcp7zjtzuix.gif
Teşekkürler hocam. Oldu.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 181 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.253 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 451 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 694 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60
  DbGrid'de Seçili Satırların Fast Reportta Raporlanması [ÇÖZÜLDÜ] bünyamin68 4 637 17-12-2023, Saat: 15:08
Son Yorum: bünyamin68



Konuyu Okuyanlar: 1 Ziyaretçi