Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

dxBarRegisterItem, dxBarUnregisterItem Example

  • 2 minutes to read

The following code demonstrates custom item creation. This custom item is similar to TdxBarStatic, but allows you to specify text color.

Delphi
unit CustomItem;
interface
uses
  Classes, Graphics, Windows, dxBar, cxGraphics;
type
  // defines the item class
  TdxBarColorStatic = class(TdxBarItem)
  private
    FColor : TColor;
    procedure SetColor(AColor : TColor);
  public
    constructor Create(AOwner : TComponent); override;
  published
    property Color: TColor read FColor write SetColor;
  end;
  // defines the item control class
  TdxBarColorStaticControl = class(TdxBarItemControl)
  private
    function GetItem: TdxBarColorStatic;
  protected
    function GetDefaultHeight: Integer; override;
    function GetDefaultWidth: Integer; override;
    function CanDestroyOnClick: Boolean; override;
    procedure DoPaint(ARect: TRect; PaintType: TdxBarPaintType); override;
  public
    property Item : TdxBarColorStatic read GetItem;
  end;
procedure Register;
implementation
constructor TdxBarColorStatic.Create(AOwner : TComponent);
begin
  inherited;
  FColor := 0;
end;
procedure TdxBarColorStatic.SetColor(AColor : TColor);
begin
// sets a new color and updates all linked item controls
  FColor := AColor;
  Update;
end;
function TdxBarColorStaticControl.GetItem : TdxBarColorStatic;
begin
  Result := TdxBarColorStatic(ItemLink.Item);
end;
// paints the item control on screen
procedure TdxBarColorStaticControl.DoPaint(ARect : TRect; PaintType : TdxBarPaintType);
var
  ASize: TSize;
  AText: string;
begin
  with DrawParams do
  begin
    if ARect.Left = ARect.Right then Exit;
    SetBkMode(Canvas.Handle, TRANSPARENT);
    SetTextColor(Canvas.Handle, Item.Color);
    Windows.FillRect(Canvas.Handle, ARect, GetSysColorBrush(COLOR_BTNFACE));
    AText := Item.Caption;
    cxGetTextExtentPoint32(Canvas.Handle, AText, ASize);
    if PaintType = ptVert then
      with ARect do
        OffsetRect(ARect,(Right-Left+ASize.cy)div 2,(Bottom-Top-ASize.cx)div 2)
    else
      with ARect do
        OffsetRect(ARect,(Right-Left-ASize.cx)div 2,(Bottom-Top-ASize.cy)div 2);
    cxDrawText(Canvas.Handle, AText, ARect, DT_SINGLELINE or DT_NOCLIP);
  end;
end;
function TdxBarColorStaticControl.GetDefaultWidth: Integer;
var
  ASize: TSize;
  AText string;
begin
  AText := Item.Caption;
  cxGetTextExtentPoint32(Canvas.Handle, AText, ASize);
  if Parent.IsVertical then
    Result := Parent.TextSize
  else
    Result := ASize.cx + (Parent.TextSize div 2);
end;
// returns the item control height based on its layout
function TdxBarColorStaticControl.GetDefaultHeight: Integer;
var
  ASize: TSize;
  AText: string;
begin
  AText := Item.Caption;
  cxGetTextExtentPoint32(Canvas.Handle, AText, ASize);
  if Parent.IsVertical then
    Result := ASize.cx + (Parent.TextSize div 2)
 else
    Result := Parent.TextSize;
end;
function TdxBarColorStaticControl.CanDestroyOnClick: Boolean;
begin
  Result := False;
end;
function TdxBarColorStaticControl.GetDefaultWidth: integer;
var
  Size : TSize;
  AText: string;
begin
  AText := Item.Caption;
  GetTextExtentPoint32(Parent.Canvas.Handle, PChar(AText), Length(AText), Size);
  if Parent.IsVertical then
    Result := Parent.TextSize
  else
    Result := Size.cx + (Parent.TextSize div 2);
end;
// returns the item control height according to its layout
function TdxBarColorStaticControl.GetDefaultHeight: integer;
var
  Size : TSize;
  AText: string;
begin
  AText := Item.Caption;
  GetTextExtentPoint32(Parent.Canvas.Handle, PChar(AText), Length(AText), Size);
  if Parent.IsVertical then
    Result := Size.cx + (Parent.TextSize div 2)
 else
    Result := Parent.TextSize;
end;
procedure Register;
begin
  RegisterNoIcon([TdxBarColorStatic]);
end;
initialization
dxBarRegisterItem(TdxBarColorStatic, TdxBarColorStaticControl, True);
finalization
dxBarUnregisterItem(TdxBarColorStatic);
end.