Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ]canlı trend
#1
Selamlar

Arkadaşlar veritabanına 2 saniye aralıklarla datetime ve float olmak üzere değer kaydediyorum. Daha sonra bu değerleri trend olarak ekranda gösteriyorum. Ancak bunu canlı olarak nasıl akan bir grafik haline getirebilirim. Bi türlü kafamda oturtamadım. Teechart kullanıyorum. örnekleme resim aşağıdaki gibi olmalı. Fikirlerinizi rica ederim.
   
Cevapla
#2
Bu tarz bir işlemi gerçekleştirebilmeniz için ekran güncellemesi yapmanız gerektiğini gözlemlediğinizi kabul ederek söylüyorum; canlı değişim için belirlediğiniz süre aralığını tespit ettikten sonra sıradaki yüklenecek verileri elinizde hazır edin. Güncelleme zamanı geldiğinde görsel komponentlerin durumlarını tazeleyin, ve yeni verilerin değer atamalarını gerçekleştirin.
Cevapla
#3
(23-05-2020, Saat: 14:29)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Bu tarz bir işlemi gerçekleştirebilmeniz için ekran güncellemesi yapmanız gerektiğini gözlemlediğinizi kabul ederek söylüyorum; canlı değişim için belirlediğiniz süre aralığını tespit ettikten sonra sıradaki yüklenecek verileri elinizde hazır edin. Güncelleme zamanı geldiğinde görsel komponentlerin durumlarını tazeleyin, ve yeni verilerin değer atamalarını gerçekleştin
Cevabınız için teşekkür ederim. Canlı veri ve taarih aralıklı veri olmak üzere her iki yapıda da akıcı bir trend denemeleri yaptım ama bir türlü oturtamadım. Aslında istediğim örnekleme aşağıdakiler gibi.

   
   
Cevapla
#4
@wiseman, rica ederim. Aşağıdaki görselin hangi platformdan alındığını bilmiyorum ama bu şekilde gerçek zamanlı iletişim kurarak güncelleme yapıp bunu ekrana çizmesi için görsel komponentlerden fazlasına ihtiyacınız olduğunu söyleyebilirim.

stock.txt dosyasındaki verileri öncelikli olarak sabit yerleştirip grafiği kısa sürelerde güncelleyerek performansın ve beklentilerinizin karşılanıp karşılanmadığını teyit edebilirseniz size sunabileceği alternatifleri olan bir çok arkadaşımız burada yanıt verecektir.
Cevapla
#5
(24-05-2020, Saat: 23:18)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: @wiseman, rica ederim. Aşağıdaki görselin hangi platformdan alındığını bilmiyorum ama bu şekilde gerçek zamanlı iletişim kurarak güncelleme yapıp bunu ekrana çizmesi için görsel komponentlerden fazlasına ihtiyacınız olduğunu söyleyebilirim.

stock.txt dosyasındaki verileri öncelikli olarak sabit yerleştirip grafiği kısa sürelerde güncelleyerek performansın ve beklentilerinizin karşılanıp karşılanmadığını teyit edebilirseniz size sunabileceği alternatifleri olan bir çok arkadaşımız burada yanıt verecektir.

Tekrar teşekkürler cevabınız için.
Örnekleme olarak form üzerine bir tabloya verleri saniyede bir insert edecek bir kod yazdım. bir tane dbchart ekledim. Tabloya her veri eklendiğinde, chart refresh oluyor ve ekranda hareketleri görüyorum. Ancak autoscroll işlemi gerçekleşmediği için, ilk veri ve son veri arasındaki tüm değerleri trend de sıkıştırıyor. Aslında autoscroll işlemi gerçekleşirse, verinin ilk eklendiği tarihten itibaren sola doğru trend akacak. Şu anda ancak mouse sağ tık basılı tutarak trendi sola ya da sağa doğru ilerletebiliyorum. Her veri eklendiğinde, autoscroll olabilirse, yani real time olarak verileri izlemiş olacağım. Sizin nezdinizde tüm arkadaşlardan bununla ilgili destek bekliyorum.

   

   
Cevapla
#6
Çözüme yaklaşmışsınız.

Sorunun ne olduğunu tanımlayana kadar sabredeceğim demiştim kendimce  Smile  SetMinMax() anahtarı sizin çözümünüzdür. 

- "The Matrix" filmindeki bir sahnede neo "kaşık nasıl bükülüyor" diye çocuğa sorunca, "aslında kaşık yok" cevabı gibi olacak ancak sorunuzda aslında Scroll yok siz zeminin sınırlarını TimerOnTimer eventinde ( sizde 2 saniyelik periyot ile) yeniden belirterek zemini kaydıracaksınız.

Chart_ScrollAxis.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#7
(25-05-2020, Saat: 11:36)mrmarman Adlı Kullanıcıdan Alıntı: Çözüme yaklaşmışsınız.

Sorunun ne olduğunu tanımlayana kadar sabredeceğim demiştim kendimce  Smile  SetMinMax() anahtarı sizin çözümünüzdür. 

- "The Matrix" filmindeki bir sahnede neo "kaşık nasıl bükülüyor" diye çocuğa sorunca, "aslında kaşık yok" cevabı gibi olacak ancak sorunuzda aslında Scroll yok siz zeminin sınırlarını TimerOnTimer eventinde ( sizde 2 saniyelik periyot ile) yeniden belirterek zemini kaydıracaksınız.

Chart_ScrollAxis.gif

Sevgili @mrmarman Hocam,
"Bana balık verme, balık tutmayı öğret" düsturunuza her zaman hayran kalmışımdır. Ama inanın ki, kaç gündür uğraşıyorum. minmax konusuna birkaç yerde denk geldim lakin bir türlü çözemedim.  Bana, "biraz daha çabala bulacaksın" mesajını veriyorsunuz. Sanırım Matrix i birkaç defa daha izlemem gerek.

@mrmarman hocam,
Chart1.BottomAxis.SetMinMax(1234,5678); kodunu yaptım olmadı.
Chart1.BottomAxis.SetMinMax(EncodeDate(1997,1,1 ),EncodeDate(1997,12,31)); bu şekilde kodladım olmadı.
Hatayı bulamadım hala. Sanırım bir üstad eli dokunması lazım.
Cevapla
#8
Şu şekilde bir örnek verebilirim. 

Son kaç veri gösterilecek ise onu iVisibleValuesCount ile belirleyin. 
Daima son veri ile sondan iVisibleValuesCount  kadar veri geriye doğru görüntülecektir.  :idea:

procedure TForm1.AddNewValue( aChartSeries: TChartSeries; aValue : Integer );
const
 iVisibleValuesCount = 80;
var
 iMin, iMax  : Integer;
begin
 With aChartSeries do
 begin
   AddXY( Count, aValue );
   iMin := Count - iVisibleValuesCount;
   iMax := pred( Count );

   if iMin < 0 then iMin := 0;
   // Hide old/previous visible marks
   // ( to prevent show marks outside the chart canvas )
   Marks[ iMin ].Visible := False;
   ParentChart.BottomAxis.SetMinMax( iMin, iMax ); // this is the magic :)
 end;
end;

Timer ile kullanım örneği. 
procedure TForm1.Timer1Timer(Sender: TObject);
var
 aValue : Integer;
begin
 aValue := Random( 100 );
 AddNewValue(  Chart1.SeriesList[0], aValue ); 
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#9
(25-05-2020, Saat: 19:33)mrmarman Adlı Kullanıcıdan Alıntı: Şu şekilde bir örnek verebilirim. 

Son kaç veri gösterilecek ise onu iVisibleValuesCount ile belirleyin. 
Daima son veri ile sondan iVisibleValuesCount  kadar veri geriye doğru görüntülecektir.  Idea

procedure TForm1.AddNewValue( aChartSeries: TChartSeries; aValue : Integer );
const
 iVisibleValuesCount = 80;
var
 iMin, iMax  : Integer;
begin
 With aChartSeries do
 begin
   AddXY( Count, aValue );
   iMin := Count - iVisibleValuesCount;
   iMax := pred( Count );

   if iMin < 0 then iMin := 0;
   // Hide old/previous visible marks
   // ( to prevent show marks outside the chart canvas )
   Marks[ iMin ].Visible := False;
   ParentChart.BottomAxis.SetMinMax( iMin, iMax ); // this is the magic Smile
 end;
end;

Timer ile kullanım örneği. 
procedure TForm1.Timer1Timer(Sender: TObject);
var
 aValue : Integer;
begin
 aValue := Random( 100 );
 AddNewValue(  Chart1.SeriesList[0], aValue ); 
end;
@mrmarman  hocam,
balığı tutmayı öğrettiğinize göre, bana da, onu temizlemek, pişirmek, ve diğer arkadaşların da faydalanması için örneği burada yayınlamak düşer. Elinize sağlık. Smile

(25-05-2020, Saat: 19:33)mrmarman Adlı Kullanıcıdan Alıntı: Şu şekilde bir örnek verebilirim. 

Son kaç veri gösterilecek ise onu iVisibleValuesCount ile belirleyin. 
Daima son veri ile sondan iVisibleValuesCount  kadar veri geriye doğru görüntülecektir.  Idea

procedure TForm1.AddNewValue( aChartSeries: TChartSeries; aValue : Integer );
const
 iVisibleValuesCount = 80;
var
 iMin, iMax  : Integer;
begin
 With aChartSeries do
 begin
   AddXY( Count, aValue );
   iMin := Count - iVisibleValuesCount;
   iMax := pred( Count );

   if iMin < 0 then iMin := 0;
   // Hide old/previous visible marks
   // ( to prevent show marks outside the chart canvas )
   Marks[ iMin ].Visible := False;
   ParentChart.BottomAxis.SetMinMax( iMin, iMax ); // this is the magic Smile
 end;
end;

Timer ile kullanım örneği. 
procedure TForm1.Timer1Timer(Sender: TObject);
var
 aValue : Integer;
begin
 aValue := Random( 100 );
 AddNewValue(  Chart1.SeriesList[0], aValue ); 
end;

@mrmarman  hocam,

Peki, databasede zaten veri mevcut. Bunu insert etmeden, varolan verilerle nasıl görüntüleyeceğim? Her halukarda ontimer ile data insert ediyoruz sisteme. Yine takıldım. Sad Benim tabloda datetime alanı ve value alanı mevcut. Acaba datetime alanı olduğundan dolayı mı bir türlü kodu oturtamıyorum bilemedim.
Cevapla
#10
Data veritabanından nasıl çekiliyor düşünün.
Ne zaman veri refresh ediliyor?
Nerede refresh ediliyor?
Verdiğim AddNewValue proc içinde AddXY satırını silince, silinmiş haliyle yeni veri eklediğiniz yerde kullanırsanız nasıl son6ç alırdınız? Bir düşünelim...
Count Dataset recordcount olduğuna göre oradan yürüyün derim.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] FDEventAlerter ağdan form kapanmıyor info@guzelceker.com 23 493 Dün, Saat: 18:00
Son Yorum: info@guzelceker.com
  [ÇÖZÜLDÜ]animate işlemi wiseman 2 211 11-05-2020, Saat: 09:23
Son Yorum: wiseman
  [ÇÖZÜLDÜ]Chart Hatası hk. wiseman 5 366 05-05-2020, Saat: 17:50
Son Yorum: wiseman
  [çözüldü] TeeChart 10.2 yeniden kurulum wiseman 4 343 29-04-2020, Saat: 01:02
Son Yorum: hi_selamlar
  çözüldü-lazarusda md5 işlemi hk. sadikacar60 3 292 06-04-2020, Saat: 22:13
Son Yorum: ihalilcoban



Konuyu Okuyanlar: 1 Ziyaretçi