Блог


Последние записи


Теги

Информация

Изменить размер кнопок у cxSpinEdit

добавлено: 30 окт 13
понравилось:0
просмотров: 2356
комментов: 1

теги:

Автор: X11

У компоненты TcxSpinEdit нет возможности простым путём менять размеры кнопок.
Благодаря подсказке из этой темы на форуме sql.ru удалось решить проблему.

Вот как можно увеличить (изменить) размер кнопок у компоненты TcxSpinEdit
Добавляем в проект новый модуль, вот его код.

unit uSpinEditHack;

interface

uses
  cxEdit, cxSpinEdit, cxGraphics, Windows, Classes;

// этот модуль должен быть последним в верхнем списке USES
   
type
  TMySpinEditViewData = class(TcxSpinEditViewData)
  protected
    procedure CalculateButtonsBounds(ACanvas: TcxCanvas; AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect); override;
  end;

  TMySpinEditProperties = class(TcxSpinEditProperties)
  public
    class function GetViewDataClass: TcxCustomEditViewDataClass; override;
  end;

  TMySpinEdit = class(TcxSpinEdit)
  public
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
  end;

  TcxSpinEdit = class(TMySpinEdit);

implementation

uses
  uShares;

{ TMySpinEdit }

class function TMySpinEdit.GetPropertiesClass: TcxCustomEditPropertiesClass;
begin
  Result := TMySpinEditProperties;
end;

{ TMySpinEditProperties }

class function TMySpinEditProperties.GetViewDataClass: TcxCustomEditViewDataClass;
begin
  Result := TMySpinEditViewData;
end;

{ TMycxSpinEditViewData }

procedure TMySpinEditViewData.CalculateButtonsBounds(ACanvas: TcxCanvas;
  AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect);
begin

  with AViewInfo.ButtonsInfo[cxSpinForwardButtonIndex] do
  begin
    Bounds := Rect(ButtonsRect.Right - uShares.iSpinEditButtonSize , ButtonsRect.Top, ButtonsRect.Right, ButtonsRect.Bottom);
    ButtonsRect.Right := Bounds.Left + 200;
  end;

  with AViewInfo.ButtonsInfo[cxSpinBackwardButtonIndex] do
  begin
    Bounds := Rect(ButtonsRect.Left, ButtonsRect.Top, ButtonsRect.Left + uShares.iSpinEditButtonSize, ButtonsRect.Bottom);
    ButtonsRect.Left := Bounds.Right - 200;
  end;
end;

end.

{iSpinEditButtonSize - это глобальная переменная, а где-то в другой форме меняем размер кнопок и присваиваем его этой переменной}


Теперь достаточно включить в USES (верхний, в тот, что в секции interface) этот модуль и размеры кнопок можно менять. только этот модуль (uSpinEditHack) должен быть последним в списке.

Ссылка на источник
https://www.devexpress.com/Support/Center/Question/Details/Q580764



Если без хака, то работают такие странные условия.
Если менять значение всех четырёх кнопок, то изменение размера кнопок работает работает
 cxSpinEdit1.Properties.Buttons[0].Width := 42;
 cxSpinEdit1.Properties.Buttons[1].Width := 42;

если только двух, то не работает.

Есть зависимость размера кнопок от размера самой компоненты cxSpinEdit. Т.е. больше какого-то определённого значения размер кнопок не установить. Т.е. нужно отключить AutoSize, сделать высоту компоненты огромной и только тогда можно делать размеры кнопок побольше.

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии