Quantcast
Channel:
Viewing all articles
Browse latest Browse all 74

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

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

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

unit uSpinEditHack;interfaceuses
  cxEdit, cxSpinEdit, cxGraphics, Windows, Classes;// этот модуль должен быть последним в верхнем списке USEStype
  TMySpinEditViewData = class(TcxSpinEditViewData)protectedprocedure CalculateButtonsBounds(ACanvas: TcxCanvas; AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect); override;end;

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

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

  TcxSpinEdit = class(TMySpinEdit);implementationuses
  uShares;{ TMySpinEdit }classfunction TMySpinEdit.GetPropertiesClass: TcxCustomEditPropertiesClass;begin
  Result := TMySpinEditProperties;end;{ TMySpinEditProperties }classfunction TMySpinEditProperties.GetViewDataClass: TcxCustomEditViewDataClass;begin
  Result := TMySpinEditViewData;end;{ TMycxSpinEditViewData }procedure TMySpinEditViewData.CalculateButtonsBounds(ACanvas: TcxCanvas;
  AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect);beginwith AViewInfo.ButtonsInfo[cxSpinForwardButtonIndex] dobegin
    Bounds := Rect(ButtonsRect.Right - uShares.iSpinEditButtonSize , ButtonsRect.Top, ButtonsRect.Right, ButtonsRect.Bottom);
    ButtonsRect.Right := Bounds.Left + 200;end;with AViewInfo.ButtonsInfo[cxSpinBackwardButtonIndex] dobegin
    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, сделать высоту компоненты огромной и только тогда можно делать размеры кнопок побольше.

Viewing all articles
Browse latest Browse all 74