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.

   
Cevapla
#2
(10-04-2019, Saat: 18:29)wiseman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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;
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
Cevapla
#7
(11-04-2019, Saat: 09:53)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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?
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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  treeview tarzı dbgrid önerisi wiseman 1 142 18-07-2019, Saat: 01:39
Son Yorum: fduman07
  Çözüldü. Fastreport ta çalışma anında dataset atama cinarbil 2 116 11-07-2019, Saat: 17:55
Son Yorum: cinarbil
  Çözüldü-sql kodu dengesiz çalışıyor sadikacar60 4 244 11-07-2019, Saat: 14:28
Son Yorum: mcuyan
  [ÇÖZÜLDÜ] WebDav ile Bulut Sunucuya Dosya Yükleme theSinan 4 343 08-07-2019, Saat: 15:42
Son Yorum: r3n4m3
  Çözüldü - FastReport Pivot ve Group birlikte kullanılabilirmi ? adelphiforumz 5 272 05-07-2019, Saat: 14:20
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi