|
#1
|
|||
|
|||
Кнопка на кнопке
Доброго времини суток. Ни когда не писал собственых компонентов. И столкнулся с проблемой. Есть код, обычной кнопки, как на этой же кнопке внутри неё создать кнопку меньшего размера?
Код:
unit MyButton; interface uses Classes, Vcl.Controls, Windows, Vcl.Graphics, Messages; type TMyButton = class(TCustomControl) private FSelected: Boolean; FCaption: String; procedure SetCaption(Val: String); procedure MEnter(var Mes: TMessage); message CM_MOUSEENTER; procedure MLeave(var Mes: TMessage); message CM_MOUSELEAVE; procedure Paint; override; public constructor Create(AOwner: TComponent); property Caption: String read FCaption write SetCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('TMyButton', [TMyButton]); end; constructor TMyButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Parent := AOwner as TWinControl; Width := 100; Height := 100; end; procedure TMyButton.SetCaption(Val: string); begin FCaption := Val; paint; end; procedure TMyButton.Paint; begin If not FSelected then begin Canvas.Pen.Color := $FFFFFF; Canvas.Brush.Color := $FFFFFF; end else begin Canvas.Pen.Color := $EEEEEE; Canvas.Brush.Color := $EEEEEE; end; Canvas.Rectangle(0,0,Width,Height); Canvas.Font.Color := 0; Canvas.TextOut((Width - Canvas.TextWidth(FCaption))div 2,(Height - Canvas.TextHeight(FCaption)) div 2,FCaption); end; procedure TMyButton.MEnter(var Mes: TMessage); begin FSelected := True; Paint; end; procedure TMyButton.MLeave(var Mes: TMessage); begin FSelected := False; Paint; end; end. Буду рад за любые предложения |
#2
|
||||
|
||||
Почему бы не посмотреть исходный код TSpinEdit.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
bulldog (25.08.2013)
|
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Идея в обоих компонентах одинакова - встраивание одного контрола в другой.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |