unit BCMaterialFloatSpinEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Spin; type { TBCMaterialFloatSpinEdit } TBCMaterialFloatSpinEdit = class(TCustomPanel) private FAccentColor: TColor; FDisabledColor: TColor; Flbl: TLabel; Fedt: TFloatSpinEdit; Ffocused: boolean; FOnChange: TNotifyEvent; FTexto: string; procedure ChangeEdit(Sender: TObject); procedure EnterEdit(Sender: TObject); procedure ExitEdit(Sender: TObject); procedure SetTexto(AValue: string); protected procedure Paint; override; public constructor Create(AOwner: TComponent); override; published property Color; property Text: string read FTexto write SetTexto; property Edit: TFloatSpinEdit read Fedt; property Title: TLabel read Flbl; property DisabledColor: TColor read FDisabledColor write FDisabledColor; property AccentColor: TColor read FAccentColor write FAccentColor; property OnChange: TNotifyEvent read FOnChange write FOnChange; end; procedure Register; implementation procedure Register; begin RegisterComponents('BGRA Controls', [TBCMaterialFloatSpinEdit]); end; { TBCMaterialFloatSpinEdit } procedure TBCMaterialFloatSpinEdit.EnterEdit(Sender: TObject); begin Ffocused := True; Invalidate; Flbl.Font.Color := AccentColor; end; procedure TBCMaterialFloatSpinEdit.ChangeEdit(Sender: TObject); begin if Assigned(FOnChange) then FOnChange(Self); end; procedure TBCMaterialFloatSpinEdit.ExitEdit(Sender: TObject); begin Ffocused := False; Invalidate; Flbl.Font.Color := DisabledColor; end; procedure TBCMaterialFloatSpinEdit.SetTexto(AValue: string); begin if FTexto = AValue then Exit; FTexto := AValue; Flbl.Caption := FTexto; //Fedt.TextHint := FTexto; end; procedure TBCMaterialFloatSpinEdit.Paint; begin inherited Paint; Canvas.Brush.Color := Color; Canvas.Pen.Color := Color; Canvas.Rectangle(0, 0, Width, Height); if (fFocused) then begin Canvas.Pen.Color := AccentColor; Canvas.Line(0, Height - 2, Width, Height - 2); Canvas.Line(0, Height - 1, Width, Height - 1); end else begin Canvas.Pen.Color := DisabledColor; Canvas.Line(0, Height - 1, Width, Height - 1); end; end; constructor TBCMaterialFloatSpinEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); Self.BevelOuter := bvNone; Self.Color := clWhite; AccentColor := clHighlight; DisabledColor := $00B8AFA8; Flbl := TLabel.Create(Self); Flbl.Align := alTop; Flbl.Caption := 'Buscar'; Flbl.BorderSpacing.Around := 4; Flbl.Font.Style := [fsBold]; Flbl.Font.Color := $00B8AFA8; Flbl.Parent := Self; Fedt := TFloatSpinEdit.Create(Self); Fedt.Color := Color; Fedt.Font.Color := clBlack; Fedt.OnEnter := @EnterEdit; Fedt.OnExit := @ExitEdit; Fedt.OnChange:=@ChangeEdit; Fedt.Align := alClient; Fedt.BorderStyle := bsNone; //Fedt.TextHint := 'Buscar'; Fedt.BorderSpacing.Around := 4; Fedt.Parent := Self; Fedt.MinValue := 0; Fedt.MaxValue := MaxInt; end; end.