
DevExpress VCL擁有230個VCL界面控件、40個自定義設計的VCL應用主題它能幫助您創建優異的用戶體驗提供高影響力的業務解決方案并利用您現有的VCL技能為未來構建下一代應用程序。在剛更新的DevExpress VCL v23.1組件庫中包含了以下新的一些特性/功能增強的高DPI分辨率支持Light 樣式渲染Windows 11主題VCL圖表控件在本文中我們將重點介紹v23.1版本的圖標控件中實現的一個重要特性——自定義軸、系列和總標簽顯示文本的功能這個新功能對多種使用場景都十分有用包括需要對所有值標簽應用格式化模式、強調某些軸/系列值、為不同數量級顯示不同的測量單位等。DevExpress新舊版本幫助文檔下載可進QQ qun獲取169725316如何將格式化模式應用于值標簽DevExpress VCL Chart控件現在支持高級格式化模式類似于我們的WinForms Chart控件格式化模式可以由靜態文本和一個或多個支持的占位符字段標記組成這些占位符字段標記包含在大括號中。所有顯示數值的占位符標記也支持數值格式模式例如下面的格式化模式顯示具有兩位小數點的浮點序列值{V:0.00}大括號外的文本定義了相同格式化模式的通用值標簽。您可以將相同/不同的格式化模式分配給圖表、參數軸、值軸或簡單序列的總標簽中所有序列值的標簽。系列值標簽自定義沒有格式化模式的序列值標簽按原樣顯示值簡單系列也向標簽添加相應的參數。要在設計時將格式化模式應用于所有值標簽(對于一個系列)您必須雙擊Chart控件來調用Chart Designer對話框。選擇目標系列。在Object Inspector對象檢查器中展開View 和 ValueLabels 節點。為TextFormat屬性指定一個格式模式(例如{V:0.00}M km2)。在這個特殊的實例中值標簽顯示帶有兩個小數點后跟著一個度量單位的序列值??倶撕炞远x要自定義顯示在Doughnut系列中心的Total標簽您必須確保選擇了目標系列。在Object Inspector對象檢查器中展開View 和TotalLabel 節點。將相同的格式化模式分配給 TextFormat 屬性。完成后Total標簽將使用與value標簽相同的格式如何自定義個性化值標簽除了格式化模式(用于自定義值標簽中的顯示文本)之外還可以根據特定條件自定義單個標簽——例如可以隱藏中間點的值標簽或者為不同的數量級顯示不同的測量單位。DevExpress VCL 的圖表類包括以下值標簽自定義事件這些事件在Chart控件決定如何繪制單個標簽時發生OnGetValueLabelDrawParameters 和 OnGetAxisValueLabelDrawParameters 事件在XY圖中可用并允許您分別自定義系列和軸值標簽。OnGetValueLabelDrawParameters 和 OnGetTotalLabelDrawParameters事件在一個簡單的圖表中可用并允許您分別自定義系列值和總標簽。用戶可以處理這些事件來標識當前處理的標簽并定義Chart控件在屏幕上繪制標簽的方式。例如您可以通過以下方式在標記不同數量級的軸和序列值的標簽中顯示不同的測量單位如果一個序列值超過100萬對應的值標簽會顯示百萬數字后面的M字符。如果序列值超過1000但小于100萬則相應的值標簽顯示后面跟著k字符的千位數字。要實現這一點需要處理 OnGetValueLabelDrawParameters 事件procedure TMyForm.cdAreaGetValueLabelDrawParameters(Sender: TdxChartCustomDiagram; AArgs: TdxChartGetValueLabelDrawParametersEventArgs); begin if AArgs.SeriesPoint.Value 1000 * 1000 then // Millions AArgs.Text : Format(%.1fM, [AArgs.SeriesPoint.Value / (1000 * 1000)]) else if AArgs.SeriesPoint.Value 1000 then // Thousands AArgs.Text : Format(%.0fk, [AArgs.SeriesPoint.Value / 1000]) else AArgs.Text : Format(%0f, [AArgs.SeriesPoint.Value]); end;然后處理OnGetAxisValueLabelDrawParameters事件procedure TMyForm.cdAreaGetAxisValueLabelDrawParameters(Sender: TdxChartCustomDiagram; AArgs: TdxChartGetAxisValueLabelDrawParametersEventArgs); begin if AArgs.Axis.ClassName TdxChartAxisY then Exit; if AArgs.Value 1000 * 1000 then // Millions AArgs.Text : Format(%.1fM, [AArgs.Value / (1000 * 1000)]) else if AArgs.Value 1000 then // Thousands AArgs.Text : Format(%.0fk, [AArgs.Value / 1000]) else AArgs.Text : Format(%0f, [AArgs.Value]); end;因此序列和軸值標簽顯示不同數量級的不同測量單位