lazarus-ccr/components/mbColorLib/mbDeskPickerButton.pas
2016-12-15 11:27:12 +00:00

103 lines
3.0 KiB
ObjectPascal

unit mbDeskPickerButton;
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
interface
uses
{$IFDEF FPC}
LCLIntf, LCLType,
{$ELSE}
Windows,
{$ENDIF}
SysUtils, Classes, Controls, StdCtrls, Graphics, Forms, ScreenWin;
type
TmbDeskPickerButton = class(TButton)
private
FSelColor: TColor;
ScreenFrm: TScreenForm;
FOnColorPicked: TNotifyEvent;
FOnKeyDown: TKeyEvent;
FHintFmt: string;
FShowScreenHint: boolean;
OnWUp, OnWDown: TMouseWheelUpDownEvent;
protected
procedure StartPicking;
procedure ColorPicked(Sender: TObject);
procedure ScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
public
constructor Create(AOwner: TComponent); override;
procedure Click; override;
property SelectedColor: TColor read FSelColor;
published
property OnSelColorChange: TNotifyEvent read FOnColorPicked write FOnColorPicked;
property OnScreenKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnSelMouseWheelUp: TMouseWheelUpDownEvent read OnWUp write OnWUp;
property OnSelMouseWheelDown: TMouseWheelUpDownEvent read OnWDown write OnWDown;
property ScreenHintFormat: string read FHintFmt write FHintFmt;
property ShowScreenHint: boolean read FShowScreenHint write FShowScreenHint default false;
end;
implementation
constructor TmbDeskPickerButton.Create(AOwner: TComponent);
begin
inherited;
// DoubleBuffered := true;
// ControlStyle := ControlStyle - [csAcceptsControls] + [csOpaque{$IFDEF DELPHI_7_UP}, csParentBackground{$ENDIF}];
FHintFmt := 'RGB(%r, %g, %b)'#13'Hex: %h';
FShowScreenHint := false;
end;
procedure TmbDeskPickerButton.Click;
begin
inherited;
StartPicking;
end;
procedure TmbDeskPickerButton.StartPicking;
begin
ScreenFrm := TScreenForm.Create(Application);
try
ScreenFrm.OnSelColorChange := ColorPicked;
ScreenFrm.OnScreenKeyDown := ScreenKeyDown;
ScreenFrm.OnMouseWheelDown := WheelDown;
ScreenFrm.OnMouseWheelUp := WheelUp;
ScreenFrm.ShowHint := FShowScreenHint;
ScreenFrm.FHintFormat := FHintFmt;
ScreenFrm.ShowModal;
finally
ScreenFrm.Free;
end;
end;
procedure TmbDeskPickerButton.ColorPicked(Sender: TObject);
begin
FSelColor := ScreenFrm.SelectedColor;
if Assigned(FOnColorPicked) then FOnColorPicked(Self);
end;
procedure TmbDeskPickerButton.ScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Assigned(FOnKeyDown) then FOnKeyDown(Self, Key, Shift);
end;
procedure TmbDeskPickerButton.WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if Assigned(OnWUp) then OnWUp(Self, Shift, MousePos, Handled);
end;
procedure TmbDeskPickerButton.WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if Assigned(OnWDown) then OnWDown(Self, Shift, MousePos, Handled);
end;
end.