İlerleme göstergesi — arayüzün en anlaşılır öğelerinden biridir: ne kadar işin tamamlandığını ve sürecin bitmesine ne kadar kaldığını anında gösterir. Bu makalede, yeni TfrProgressBar ve TfrxProgressBar bileşenleriyle böyle bir göstergenin hem Delphi uygulamasının arayüzüne hem de raporlara nasıl ekleneceğini inceleyeceğiz.
FastReport VCL Ultimate kullanıcıları, FastEditors VCL ve FastGrid VCL setleri kapsamında ek görsel arayüz bileşenlerine erişebilir. Şimdi bu setlere yeni bir kullanışlı editör — TfrProgressBar, raporlara ise TfrxProgressBar bileşeni eklendi. Ayrıca rapor bileşeni yalnızca Ultimate sahiplerine değil, ana rapor bileşenine erişimi olan herkese — TfrxReport'a da açıktır.
Aşağıda yeni bileşenlerin özelliklerini ve yeteneklerini ayrıntılı olarak inceleyecek, ardından bunları iş başında göstereceğiz: FastReport VCL Ultimate ile birlikte gelen gerçekçi verilere sahip bir demo projesi örneğinde.
ProgressBar bileşeni IDE'de FastEditors VCL paletinde sunulur ve sayısal değerleri ilerleme göstergesi biçiminde göstermek için tasarlanmıştır. Bileşen:
Bu ilerleme bileşenini FastEditors VCL setindeki diğer editörlerden ayıran temel özellikleri inceleyelim.
Bu özelliklerin tümü, ilerleme ölçeğinin görüntülenme görsel stilini esnek biçimde ayarlamanızı ve gerektiğinde birkaç farklı değer aralığı ve işaretçi kullanmanızı sağlar:
Properties.Thresholds koleksiyonundaki her eşik değeri şu özelliklere sahiptir:
Raporlarda sunulan özel TfrxProgressBar bileşeni de benzer bir özellik kümesine sahiptir. Onu raporunuza gömmek için:
1. görsel olmayan TfrxProgressBarObject bileşenini forma yerleştirin — gerekli modülleri projenize otomatik olarak ekler;
2. TfrxReport bileşenini kullanarak rapor tasarımcısını açın;
3. bileşen panelinden ilerleme bileşenini seçin ve rapor sayfasına yerleştirin.
Arayüz bileşenine kıyasla rapor bileşeninin bir dizi özelliği vardır:
İlerleme gösterme bileşeni, değerlerin zaman içindeki dinamikte sınır ve eşik değerleriyle karşılaştırılarak görselleştirilmesi gereken uygulamalarda kullanışlıdır: proses kontrol sistemlerinde, KPI takibinde veya depo doluluğu denetiminde.
ProgressBar'ın yeteneklerini göstermek için metalürjiyi seçtik. Metalürjide tam da sıcaklık eşik değerleri ve teknolojik eritme sürecinin değişkenliği önemlidir; veri kesikleri ise baskıya uygundur. Başka bir deyişle, ProgressBar'ın iyi olduğu her şey buradadır.
Önce eritme fırınının çeşitli bölgelerindeki sıcaklık sensörlerinin salınımlarını taklit eden küçük bir yardımcı kod yazacağız: yükleme bölgesi, eritme bölgesi, aşırı ısınma bölgesi, boşaltma bölgesi ve fırın astarı. Her bölgede sıcaklık, sürecin şu aşamaları boyunca nominal değerler etrafında rastgele salınır: ısınma, eritme, aşırı ısıtma, düzeltme. Elbette bu, gerçek sürece karşılık gelmeyen çok basitleştirilmiş bir şemadır, ancak bileşenin yeteneklerini göstermek için böyle bir simülasyon mükemmel uygundur.
Simülasyonun kaynak kodunu FastGrid demo projesinde frFurnaceZones ve frFurnaceSimulator modüllerinde, bileşenle çalışmanın ana kodunu ise ProgressBarDemo modülünde bulabilirsiniz.
Bu projedeki ana iş OnShow ve UpdateUI olay işleyicilerinde gerçekleşir.
OnShow'da standart TClientDataSet bileşeni temelinde bir veri kümesi oluşturulur ve bu verilerin FastGrid'e bağlanması gerçekleştirilir. Elbette FastGrid verilerle DataSet biçiminde bir aracı olmadan doğrudan da çalışabilir, ancak bu projede ProgressBar ile biçimlendirilmiş verilerin baskı yeteneklerini hem kaynaktan hem de FastGrid üzerinden göstermek istedik. Bunun için TClientDataSet veya benzeri başka bir bileşen biçimindeki evrensel veri deposu daha uygundur.
Sonrasında OnShow işleyicisinde ilerlemenin görüntülenmesinden sorumlu FastGrid sütununun özellikleri ve eritme fırını şemasında yer alan ayrı TfrProgressBar bileşenlerinin özellikleri yapılandırılır:
gFurnaceTableView1.Columns.RetrieveMissingColumns; LColumn := gFurnaceTableView1.Columns[0]; LColumn.Caption := 'Furnace Zone'; LColumn.Options.Editing := False; LColumn.PropertiesClass := TfrEditProperties; LColumn := gFurnaceTableView1.Columns[1]; LColumn.Caption := 'Temperature, C'; LColumn.Width := 300; LColumn.PropertiesClass := TfrProgressBarProperties; LProperties := TfrProgressBarProperties(LColumn.Properties); LProperties.CaptionType := frpbctPosition; LProperties.CaptionColor := clBlack; LProperties.ProgressBarStyle := frpbsGradient; LProperties.MaxValue := FConfig.ScaleMax; LProperties.MinValue := FConfig.ScaleMin; LProperties.MarkerLinesVisible := True; LProperties.CaptionType := frpbctPosition; LProperties.ProgressBeginColor := clWhite; LProperties.ProgressEndColor := FConfig.Thresholds[0].Color; LProperties.ProgressChunkBorder := False; LProperties.OnGetDisplayText := DoGetDisplayText; for J := 1 to Length(FConfig.Thresholds) - 1 do begin LThresholdItem := LProperties.Thresholds.Add; LThresholdItem.MarkerLineVisible := False; LThresholdItem.ProgressBarStyle := frpbsGradient; LThresholdItem.MarkerLineVisible := FConfig.Thresholds[J].Caption = 'Overheat'; LThresholdItem.MarkerLineSize := 2; LThresholdItem.Value := FConfig.Thresholds[J - 1].UpperBound; LThresholdItem.BeginColor := FConfig.Thresholds[J - 1].Color; LThresholdItem.EndColor := FConfig.Thresholds[J].Color; end; pbLoading.Properties.Assign(LProperties); pbLoading.Properties.Thresholds.Assign(LProperties.Thresholds); pbLoading.Properties.CaptionType := frpbctPercent; pbMelting.Properties.Assign(LProperties); pbMelting.Properties.Thresholds.Assign(LProperties.Thresholds); pbMelting.Properties.CaptionType := frpbctPercent; pbDischarge.Properties.Assign(LProperties); pbDischarge.Properties.Thresholds.Assign(LProperties.Thresholds); pbDischarge.Properties.Orientation := frpboVertical; pbDischarge.Properties.CaptionType := frpbctPercent; pbOverheat.Properties.Assign(LProperties); pbOverheat.Properties.Thresholds.Assign(LProperties.Thresholds); pbOverheat.Properties.Orientation := frpboVertical; pbOverheat.Properties.CaptionType := frpbctPercent; pbLining.Properties.Assign(LProperties); pbLining.Properties.Thresholds.Assign(LProperties.Thresholds); pbLining.Properties.Orientation := frpboVertical; pbLining.Properties.CaptionType := frpbctPercent;
FastGrid bileşeniyle çalışma hakkında daha fazla bilgiyi «FastGrid kitaplığının yeteneklerine ayrıntılı genel bakış» makalesinde bulabilirsiniz.
UpdateUI olay işleyicisinde veri kümesindeki ve ayrı bileşenlerdeki değerler zamanlayıcıyla güncellenir:
procedure TfrmProgressBar.UpdateUI; var I: Integer; LZoneRuntime: TFurnaceZoneRuntime; LControl: TfrProgressBar; LZoneName: string; begin dmData.cdsZones.DisableControls; try dmData.cdsZones.First; for I := 0 to Length(FProcess.FRuntime) - 1 do begin LZoneRuntime := FProcess.FRuntime[I]; dmData.cdsZones.Edit; dmData.cdsZones.FieldByName('Temperature').AsFloat := LZoneRuntime.CurrentTemp; dmData.cdsZones.Post; dmData.cdsZones.Next; LZoneName := LZoneRuntime.Zone.Name; if LZoneName = 'Loading zone' then LControl := pbLoading else if LZoneName = 'Melting zone' then LControl := pbMelting else if LZoneName = 'Overheat zone' then LControl := pbOverheat else if LZoneName = 'Discharge zone' then LControl := pbDischarge else LControl := pbLining; LControl.Value := LZoneRuntime.CurrentTemp; end; finally dmData.cdsZones.EnableControls; end; // General progress lOrders.Caption := ' Furnace Grid - Progress: ' + IntToStr(Round(FProcess.Progress01 * 100)) + ' % finished. ' + Format('Melting time: %s', [FormatDateTime('nn:ss', FProcess.TotalElapsed / SecsPerDay)]); end;
Rapor bileşeninin yapılandırılması ve veriye bağlanması rapor tasarımcısında şu şekilde yapılır:
Sonuç olarak fırında ısınma ve eritme aşamalarını açıkça gösteren küçük bir uygulama elde ederiz:
Ayrıca herhangi bir anda sıcaklık verilerinin kesğini rapor biçiminde alabilirsiniz:
TfrProgressBar ve TfrxProgressBar bileşenleri — görsel ilerleme gösterimi yalnızca uygulamanızın kullanıcı arayüzüne değil, raporlara da eklemeye izin veren kullanışlı araçlardır. Verilere bağlanma, tablo hücrelerine gömme, ölçek ve metin stillerinin esnek ayarları — tüm bunlar bilgiyi kolayca algılanabilir biçimde sunmayı sağlar.
Görevleriniz arasında proses izleme, KPI panoları veya görev ilerleme raporları varsa — FastReport VCL Ultimate'ın en son sürümünü indirin, FastGrid demo projesini açın ve yeni ilerleme göstergesini kendi verileriniz üzerinde deneyin.