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
  Logo Go3 de döviz tablosunda Date_ alanına veri (Çözüldü) yazma cinarbil 4 285 19-04-2024, Saat: 08:25
Son Yorum: cinarbil
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 243 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 283 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.533 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 606 02-02-2024, Saat: 09:54
Son Yorum: shooterman



Konuyu Okuyanlar: 1 Ziyaretçi