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ı: 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ı: 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ı: 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
  Çözüldü Fastreport degisken alan yazdırma cinarbil 5 194 25-04-2019, Saat: 16:37
Son Yorum: cinarbil
  [ÇÖZÜLDÜ]Tarih ve Saat aralığı sorgulama wiseman 39 748 23-04-2019, Saat: 17:17
Son Yorum: wiseman
  F9 ile derleme sonrası ortaya çıkan hatalar (Çözüldü) cinarbil 4 234 27-03-2019, Saat: 08:45
Son Yorum: Tuğrul HELVACI
  [Çözüldü] JSon String içindeki son altı bilgi CesuR 7 309 23-03-2019, Saat: 18:15
Son Yorum: Fesih ARSLAN
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 3 1.442 06-03-2019, Saat: 00:47
Son Yorum: Yeliz



Konuyu Okuyanlar: 1 Ziyaretçi