Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Timeline önerisi 2
#1
Öncelikle tün delphican lara hayırlı cumalar diliyorum Allah sağlık afiyet versin.

Daha önce açtığım https://www.delphican.com/showthread.php?tid=3730 konuda olayları sıra ile görerebileceğim timeline önerisi istemiştim. Önerilere göre bir kaç çalışma yaptım ama artık tıkandığım için tekrar yardıma ihtiyaç duyuyorum.

evvela size table gösteriyim:
[img]Xu3i5E.jpg[/img]
Ham verileri bir sql procedure ile bu table kaydediyorum
burda olayın başlama tarihi, saati ve bitiş tarih, saati, sn. olarak farkı ve '00:00:00' şeklinde formatlı verileri var.

Bu verilere göre  dbchartla yapıyım dedim. 

[img]P6t4ld.jpg[/img]

kodlarla sn. leri bu şekilde sıraladım. ama bi türlü x eksenine gelmesi gereken zaman çizelgesini getiremedim. bu olayların olduğu zaman aralağını  saat bazında göstermeye çalıştım ama -cahilliğimi bağışlayın- bi türlü tutturamadım.

bu görüntüyü elde ettiğim kodların bir kısmı:

with timeline_form.tsorgu do
begin
  close;
  open;
  first;
  while not eof do
   begin
     if fieldbyname('Durus_durum').Value=12 then ///  BOŞTA
       begin
         deger:=fieldbyname('Durus_fark').AsFloat;
         bar:=THorizBarSeries.Create(chart);  //THorizBarSeries
         Chart.AddSeries(bar);
//          bar.MarksOnBar:=true;
//          bar.MarksLocation:=mlcenter;
//         bar.Marks.Style := smsLabel;
//          bar.Labels[bar.SeriesIndex]:=fieldbyname('Durus_isemri').AsString;
//          bar.Marks.Show;
          bar.Marks.Hide;
          bar.BarPen.Hide;
          bar. CustomBarHeight:=30;
          bar.MultiBar:=mbStacked;
          bar.AddBar(deger,'',ClBlue);

        // ShowMessage('Değer'+'-->'+fieldbyname('Durus_fark').AsString+'  '+'--Renk Mavi--');
       end//end 1.if
.
.
.
.
.

Amaç şöyle bi şey elde etmekti
[img]miBbhL.jpg[/img]

---------------------------------------------------------------------
Sonra  @Abdullah ILGAZ hocamın  önerisini değerlendirerek  devexpress in schedule yöneldim. @"Fesih ARSLAN"  hocamın https://www.delphican.com/showthread.php?tid=5397 konusundan ve yardımlarından  ziyadesi ile faydalanıp ; 

çalıştığım tabloyu şu şekilde değiştirip:

[img]WhHeia.jpg[/img]

dxschedule uyarladım(-maya çalıştım)

ama ordaki sorunda zaman çizelgesi düz olması gerekirken  birçok bölmeye ayrıldı. zamanı kontrol ediyorum bir sıkıntı göremiyorum ki tablodada görebilirsiniz ama ne hikmetse ayne şöyle oldu

[img]ol1rB0.gif[/img]  fare ile üzerinde gezdiğimde zamanın aslında birbirinin ardından geldiğini görebilirsiniz ama yapı bu şekilde.

Aslında elde etmeye çalıştığım çalışma:

[img]siFb9z.jpg[/img]    şeklinde....

1. chartta x ekseninde value olarak 300, 400, 500.. gibi değerler varken etikette 08:00, 09:00...gibi gösterilebilrimi
2. devexpress schedule da olayları ardı ardına sıralamanın bir yolu varmı
3. bunların dışında şu yoldan ilerlersen daha verimli olur diyecek arkadşların önerisi nedir

Yeniden önerilere açığım.... teşekkür ederim
Cevapla
#2
Merhaba

TChart ile yapmak mümkün olabilir. Gantt Series denemenizi öneririm. Sizin verileriniz ile bir örnek denedim başlangıç olarak fena olmadı.


Boş bir forma bir TChart ekleyin bir de TButton. Aşağıdaki şekilde kodlayın ve butona basın.

procedure TForm1.Button1Click(Sender: TObject);
var
 i : Integer;
begin
 with Chart1 do begin
   // Varsa eski içerik temizlensin...
   for i := 0 to (SeriesCount -1) do Series[i].Free;

   AxisBehind                  := True; // Aks referans çizfgileri arkada kalsın...

   Title.Visible       := True;
   Title.Text.Clear;
   Title.Text.Add( 'Gantt Series Örneği' );
   Title.Text.Add( '' );
   Title.Alignment     := TAlignment.taCenter;
   Title.Font.Style    := [fsBold];
   Title.Font.Size     := 12;
   Title.Font.Name     := 'Tahoma';
   Title.Font.Color    := clMaroon;
   Title.Bevel         := bvRaised;

   Walls.Back.Gradient.Visible := False;
   Walls.Back.Transparent      := False;
   Walls.Back.Color            := $00E1FFFF;
   MarginLeft                  := 1;
   MarginRight                 := 1;
   MarginTop                   := 1;
   MarginBottom                := 15;

   View3D                      := False;
   Legend.Visible              := True;
   Legend.Alignment            := TLegendAlignment.laTop;

   RightAxis.Visible           := False;
   TopAxis.Visible             := False;

   LeftAxis.Visible            := True;
   LeftAxis.AutomaticMaximum   := false;
   // AddGantt ile traih aralığına vereceğimiz değer 0 olacağından grafiğin dikey ortda görünmesi sağlanır.
     LeftAxis.SetMinMax( -1, 1 );
   LeftAxis.Increment          :=   1.0;
   LeftAxis.Grid.Visible       := False;
   LeftAxis.Inverted           := False;

   BottomAxis.Visible              := True;
   BottomAxis.Texts.Angle          := 90;
   BottomAxis.Texts.Size           := 20;
   BottomAxis.Ticks.Color          := clRed;

   // Aşağıdaki tarih aralığına göre X aksisi ayarlanır. Gantt'a eklenecek veriye göre ayarlamalısınız.
     BottomAxis.SetMinMax( StrToDateTime( '10.09.2020 06:00:00' ), StrToDateTime( '11.09.2020 06:00:00' ) );
     BottomAxis.AutomaticMaximum   := False;
     BottomAxis.Automatic          := False; // True yaparsanız adımlar  verinize göre şekillenir.
     BottomAxis.Increment := StrToDateTime( '00:10:00' ); // Adımların kaçar dakika olacağına karara verirsiniz.
   BottomAxis.MinorTicks.Visible   := True;
 end;

 with Chart1.AddSeries(TGanttSeries) as TGanttSeries do
 begin
   BeginUpdate;

   Pointer.Size    := 10;
   Legend.Visible  := False;

   AddGanttColor( StrToDateTime( '10.09.2020 09:36:00' ), StrToDateTime( '10.09.2020 09:47:00' ), 0, 'TEST', clRed );
   AddGanttColor( StrToDateTime( '10.09.2020 09:47:00' ), StrToDateTime( '10.09.2020 09:49:00' ), 0, '' , clYellow );
   AddGanttColor( StrToDateTime( '10.09.2020 09:49:00' ), StrToDateTime( '10.09.2020 09:58:00' ), 0, '' , clRed    );
   AddGanttColor( StrToDateTime( '10.09.2020 09:58:00' ), StrToDateTime( '10.09.2020 10:26:00' ), 0, '' , clYellow );
   AddGanttColor( StrToDateTime( '10.09.2020 10:26:00' ), StrToDateTime( '10.09.2020 10:26:00' ), 0, '' , clBlue   );
   AddGanttColor( StrToDateTime( '10.09.2020 10:26:00' ), StrToDateTime( '10.09.2020 10:36:00' ), 0, '' , clMaroon );
   AddGanttColor( StrToDateTime( '10.09.2020 10:36:00' ), StrToDateTime( '10.09.2020 10:36:00' ), 0, '' , clGreen );
   AddGanttColor( StrToDateTime( '10.09.2020 10:36:00' ), StrToDateTime( '10.09.2020 10:37:00' ), 0, '' , clYellow );
   AddGanttColor( StrToDateTime( '10.09.2020 10:37:00' ), StrToDateTime( '10.09.2020 10:41:00' ), 0, '' , clOlive  );
   AddGanttColor( StrToDateTime( '10.09.2020 10:42:00' ), StrToDateTime( '10.09.2020 10:48:00' ), 0, '' , clRed    );

   EndUpdate;
 end;
end;

mtyuulaizgfwnwuguat7.png


Aralığı biraz daha veriye göre özelleştirirseniz şu çıkacaktır.

Değişen kod parçası :
    // Aşağıdaki tarih aralığına göre X aksisi ayarlanır. Gantt'a eklenecek veriye göre ayarlamalısınız.
     BottomAxis.SetMinMax( StrToDateTime( '10.09.2020 06:00:00' ), StrToDateTime( '11.09.2020 06:00:00' ) );
     BottomAxis.AutomaticMaximum   := False;
     BottomAxis.Automatic          := True; // True yaparsanız adımlar  verinize göre şekillenir.
     BottomAxis.Increment := StrToDateTime( '00:01:00' ); // Adımların kaçar dakika olacağına karara verirsiniz.
b9g3leq58c5yjt2qttkm.png
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
@mrmarman Hocam yani tonlarca siteden araştırdım. Bu işin mantığı kavratacak bu kadar açık bi bilgiye rast gelmedim.  Yani abi öyle bi ufkumu açtınki öyle bi kapı gösterdinki..... 

Burda olsan elini ayağını öperdim(bana bir harf öğretenin kırk yıl kölesi olurum Hz. Ali) Blush

ben şimdi buna table entegre edip uçuşa geçiyorum.....

Bu arada devexpressten cevap veren olursa onuda öğrenmiş oluruz.
Cevapla
#4
Memnun oldum Smile , devexpress konusundaki fikrim şu şekilde, Tarih ikililerinin bitiş dakikası, bir sonrakinin başlangıç dakikası ile örtüştüğünden yeni satıra geçiyor olmalı.

Başlama saniye değerlerini 01 Bitenleri 00 olarak belirtirseniz, bir sonraki başlayan 01 olacağından ardışık sıralı dizilebilir gibi değerlendiriyorum.

Yani
Baş : 09:36:01 - Bitiş 09:47:00
sonraki değer ikilisi
Baş : 09:47:01 - Bitiş 09:49:00
sonra
Baş : 09:49:01 - Bitiş 09:58:00
sonra
Baş : 09:58:01 - Bitiş 10:26:00

Devexpress kullanmadığım için denemeyi size bırakıyorum. Sonuçtan bizi de aydınlatırsanız memnun oluruz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Desktop uygulaması için arayüz önerisi rmzgenius 2 824 27-10-2022, Saat: 15:33
Son Yorum: delphi.developer
  VCL Ana menü Tasarım önerisi 3ddark 22 7.170 08-12-2020, Saat: 17:07
Son Yorum: shooterman
  form tasarım önerisi shooterman 10 4.098 18-11-2020, Saat: 11:04
Son Yorum: shooterman
  [ÇÖZÜLDÜ] treeview tarzı dbgrid önerisi shooterman 1 1.935 18-07-2019, Saat: 01:39
Son Yorum: fduman07
Exclamation timeline önerisi forumcuali 7 4.532 18-06-2019, Saat: 08:50
Son Yorum: forumcuali



Konuyu Okuyanlar: 1 Ziyaretçi