| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- // SPDX-License-Identifier: LGPL-3.0-linking-exception
- unit BGRAThemeCheckBox;
- {$mode delphi}
- interface
- uses
- Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
- BGRATheme, Types, LMessages, LCLType;
- type
- { TBGRAThemeCheckBox }
- TBGRAThemeCheckBox = class(TBGRAThemeControl)
- private
- FChecked: boolean;
- FOnChange: TNotifyEvent;
- FState: TBGRAThemeButtonState;
- procedure SetChecked(AValue: boolean);
- protected
- procedure KeyDown(var Key: word; Shift: TShiftState); override;
- procedure KeyUp(var Key: word; Shift: TShiftState); override;
- procedure WMSetFocus(var Message: {$IFDEF FPC}TLMSetFocus{$ELSE}TWMSetFocus{$ENDIF}); message {$IFDEF FPC}LM_SETFOCUS{$ELSE}WM_SETFOCUS{$ENDIF};
- procedure WMKillFocus(var Message: {$IFDEF FPC}TLMKillFocus{$ELSE}TWMKillFocus{$ENDIF}); message {$IFDEF FPC}LM_KILLFOCUS{$ELSE}WM_KILLFOCUS{$ENDIF};
- procedure UpdateFocus(AFocused: boolean);
- class function GetControlClassDefaultSize: TSize; override;
- procedure MouseEnter; override;
- procedure MouseLeave; override;
- procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
- X, Y: integer); override;
- procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
- procedure Click; override;
- procedure SetEnabled(Value: boolean); override;
- procedure TextChanged; override;
- procedure Paint; override;
- procedure Resize; override;
- public
- constructor Create(AOwner: TComponent); override;
- published
- property Align;
- property Anchors;
- property BorderSpacing;
- property Caption;
- property Checked: boolean read FChecked write SetChecked;
- property Font;
- property Enabled;
- property OnChange: TNotifyEvent read FOnChange write FOnChange;
- property TabStop;
- property TabOrder;
- end;
- procedure Register;
- implementation
- uses BGRABitmapTypes;
- procedure Register;
- begin
- RegisterComponents('BGRA Themes', [TBGRAThemeCheckBox]);
- end;
- { TBGRAThemeCheckBox }
- procedure TBGRAThemeCheckBox.SetChecked(AValue: boolean);
- begin
- if FChecked = AValue then
- Exit;
- FChecked := AValue;
- Invalidate;
- if Assigned(FOnChange) then FOnChange(Self);
- end;
- procedure TBGRAThemeCheckBox.KeyDown(var Key: word; Shift: TShiftState);
- begin
- inherited KeyDown(Key, Shift);
- if (Key = VK_SPACE) or (Key = VK_RETURN) then
- MouseDown(mbLeft, [], 0, 0);
- end;
- procedure TBGRAThemeCheckBox.KeyUp(var Key: word; Shift: TShiftState);
- begin
- if (Key = VK_SPACE) or (Key = VK_RETURN) then
- begin
- MouseUp(mbLeft, [], 0, 0);
- MouseLeave;
- end;
- inherited KeyUp(Key, Shift);
- end;
- procedure TBGRAThemeCheckBox.WMSetFocus(var Message: TLMSetFocus);
- begin
- inherited;
- UpdateFocus(True);
- end;
- procedure TBGRAThemeCheckBox.WMKillFocus(var Message: TLMKillFocus);
- begin
- inherited;
- if Message.FocusedWnd <> Handle then
- UpdateFocus(False);
- end;
- procedure TBGRAThemeCheckBox.UpdateFocus(AFocused: boolean);
- var
- lForm: TCustomForm;
- begin
- lForm := GetParentForm(Self);
- if lForm = nil then
- exit;
- {$IFDEF FPC}//#
- if AFocused then
- ActiveDefaultControlChanged(lForm.ActiveControl)
- else
- ActiveDefaultControlChanged(nil);
- {$ENDIF}
- Invalidate;
- end;
- class function TBGRAThemeCheckBox.GetControlClassDefaultSize: TSize;
- begin
- Result.CX := 165;
- Result.CY := 19;
- end;
- procedure TBGRAThemeCheckBox.MouseEnter;
- begin
- inherited MouseEnter;
- FState := btbsHover;
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.MouseLeave;
- begin
- inherited MouseLeave;
- FState := btbsNormal;
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.MouseDown(Button: TMouseButton;
- Shift: TShiftState; X, Y: integer);
- begin
- inherited MouseDown(Button, Shift, X, Y);
- FState := btbsActive;
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.MouseUp(Button: TMouseButton;
- Shift: TShiftState; X, Y: integer);
- begin
- inherited MouseUp(Button, Shift, X, Y);
- if ClientRect.Contains(Point(X, Y)) then
- FState := btbsHover
- else
- FState := btbsNormal;
- if ClientRect.Contains(Point(X, Y)) then
- Checked := not FChecked
- else
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.Click;
- begin
- inherited Click;
- end;
- procedure TBGRAThemeCheckBox.SetEnabled(Value: boolean);
- begin
- inherited SetEnabled(Value);
- if Value then
- FState := btbsNormal
- else
- FState := btbsDisabled;
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.TextChanged;
- begin
- inherited TextChanged;
- Invalidate;
- end;
- procedure TBGRAThemeCheckBox.Paint;
- var
- surface: TBGRAThemeSurface;
- begin
- surface := TBGRAThemeSurface.Create(self);
- try
- if Assigned(Theme) then
- Theme.DrawCheckBox(Caption, FState, Focused, Checked, ClientRect, surface)
- else
- BGRADefaultTheme.DrawCheckBox(Caption, FState, Focused, Checked, ClientRect, surface);
- finally
- surface.Free;
- end;
- end;
- procedure TBGRAThemeCheckBox.Resize;
- begin
- Invalidate;
- inherited Resize;
- end;
- constructor TBGRAThemeCheckBox.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- FState := btbsNormal;
- ControlStyle := ControlStyle + [csParentBackground, csAcceptsControls];
- with GetControlClassDefaultSize do
- SetInitialBounds(0, 0, CX, CY);
- end;
- end.
|