
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5596 8e941d3f-bd1b-0410-a28a-d453659cc2b4
214 lines
6.4 KiB
ObjectPascal
214 lines
6.4 KiB
ObjectPascal
unit mbDeskPickerButton;
|
|
|
|
//{$MODE DELPHI}
|
|
{$MODE ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
LCLIntf, LCLType, SysUtils, Classes, Controls, StdCtrls, Graphics, Forms,
|
|
ActnList,
|
|
ScreenWin;
|
|
|
|
type
|
|
TmbDeskPickerButton = class(TButton)
|
|
private
|
|
FHintFmt: string;
|
|
FSelColor: TColor;
|
|
FScreenFrm: TScreenForm;
|
|
FShowScreenHint: boolean;
|
|
FOnWheelUp, FOnWheelDown: TMouseWheelUpDownEvent;
|
|
FOnColorPicked: TNotifyEvent;
|
|
FOnKeyDown: TKeyEvent;
|
|
protected
|
|
procedure ColorPicked(Sender: TObject);
|
|
procedure ScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure StartPicking;
|
|
procedure WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint;
|
|
var Handled: Boolean);
|
|
procedure WheelUp(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 ScreenHintFormat: string read FHintFmt write FHintFmt;
|
|
property ShowScreenHint: boolean read FShowScreenHint write FShowScreenHint default false;
|
|
property OnScreenKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
|
property OnSelColorChange: TNotifyEvent read FOnColorPicked write FOnColorPicked;
|
|
property OnSelMouseWheelDown: TMouseWheelUpDownEvent read FOnWheelDown write FOnWheelDown;
|
|
property OnSelMouseWheelUp: TMouseWheelUpDownEvent read FOnWheelUp write FOnWheelUp;
|
|
end;
|
|
|
|
TmbDeskPickerAction = class(TCustomAction)
|
|
private
|
|
FHintFmt: String;
|
|
FSelColor: TColor;
|
|
FScreenFrm: TScreenForm;
|
|
FShowScreenHint: Boolean;
|
|
FOnWheelUp, FOnWheelDown: TMouseWheelUpdownEvent;
|
|
FOnColorPicked: TNotifyEvent;
|
|
FOnScreenKeyDown: TKeyEvent;
|
|
protected
|
|
procedure ColorPicked(Sender: TObject);
|
|
procedure ScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure StartPicking;
|
|
procedure WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint;
|
|
var Handled: Boolean);
|
|
procedure WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint;
|
|
var Handled: Boolean);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
procedure ExecuteTarget({%H-}Target: TObject); override;
|
|
function HandlesTarget({%H-}Target: TObject): Boolean; override;
|
|
// procedure UpdateTarget(Target: TObject); override;
|
|
published
|
|
property Caption;
|
|
property Enabled;
|
|
property HelpContext;
|
|
property HelpKeyword;
|
|
property HelpType;
|
|
property Hint;
|
|
property ImageIndex;
|
|
property ScreenHintFormat: string read FHintFmt write FHintFmt;
|
|
property SecondaryShortCuts;
|
|
property SelectedColor: TColor read FSelColor;
|
|
property ShortCut;
|
|
property ShowScreenHint: boolean read FShowScreenHint write FShowScreenHint default false;
|
|
property Visible;
|
|
property OnExecute;
|
|
property OnHint;
|
|
property OnScreenKeyDown: TKeyEvent read FOnScreenKeyDown write FOnScreenKeyDown;
|
|
property OnSelColorChange: TNotifyEvent read FOnColorPicked write FOnColorPicked;
|
|
property OnSelMouseWheelDown: TMouseWheelUpDownEvent read FOnWheelDown write FOnWheelDown;
|
|
property OnSelMouseWheelUp: TMouseWheelUpDownEvent read FOnWheelUp write FOnWheelUp;
|
|
property OnUpdate;
|
|
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.ColorPicked(Sender: TObject);
|
|
begin
|
|
FSelColor := FScreenFrm.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.StartPicking;
|
|
begin
|
|
FScreenFrm := TScreenForm.Create(Application);
|
|
try
|
|
FScreenFrm.OnSelColorChange := @ColorPicked;
|
|
FScreenFrm.OnScreenKeyDown := @ScreenKeyDown;
|
|
FScreenFrm.OnMouseWheelDown := @WheelDown;
|
|
FScreenFrm.OnMouseWheelUp := @WheelUp;
|
|
FScreenFrm.ShowHint := FShowScreenHint;
|
|
FScreenFrm.FHintFormat := FHintFmt;
|
|
FScreenFrm.ShowModal;
|
|
finally
|
|
FScreenFrm.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TmbDeskPickerButton.WheelUp(Sender: TObject; Shift: TShiftState;
|
|
MousePos: TPoint; var Handled: Boolean);
|
|
begin
|
|
if Assigned(FOnWheelUp) then
|
|
FOnWheelUp(Self, Shift, MousePos, Handled);
|
|
end;
|
|
|
|
procedure TmbDeskPickerButton.WheelDown(Sender: TObject; Shift: TShiftState;
|
|
MousePos: TPoint; var Handled: Boolean);
|
|
begin
|
|
if Assigned(FOnWheelDown) then
|
|
FOnWheelDown(Self, Shift, MousePos, Handled);
|
|
end;
|
|
|
|
|
|
{ TmbDeskPickerAction }
|
|
|
|
constructor TmbDeskPickerAction.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
FHintFmt := 'RGB(%r, %g, %b)'#13'Hex: %h';
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.ExecuteTarget(Target: TObject);
|
|
begin
|
|
StartPicking;
|
|
end;
|
|
|
|
function TmbDeskPickerAction.HandlesTarget(Target: TObject): Boolean;
|
|
begin
|
|
Result := true;
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.ScreenKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
if Assigned(FOnScreenKeyDown) then
|
|
FOnScreenKeyDown(Self, Key, Shift);
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.ColorPicked(Sender: TObject);
|
|
begin
|
|
FSelColor := FScreenFrm.SelectedColor;
|
|
if Assigned(FOnColorPicked) then
|
|
FOnColorPicked(Self);
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.StartPicking;
|
|
begin
|
|
FScreenFrm := TScreenForm.Create(Application);
|
|
try
|
|
FScreenFrm.OnSelColorChange := @ColorPicked;
|
|
FScreenFrm.OnScreenKeyDown := @ScreenKeyDown;
|
|
FScreenFrm.OnMouseWheelDown := @WheelDown;
|
|
FScreenFrm.OnMouseWheelUp := @WheelUp;
|
|
FScreenFrm.ShowHint := FShowScreenHint;
|
|
FScreenFrm.FHintFormat := FHintFmt;
|
|
FScreenFrm.ShowModal;
|
|
finally
|
|
FScreenFrm.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.WheelUp(Sender: TObject; Shift: TShiftState;
|
|
MousePos: TPoint; var Handled: Boolean);
|
|
begin
|
|
if Assigned(FOnWheelUp) then
|
|
FOnWheelUp(Self, Shift, MousePos, Handled);
|
|
end;
|
|
|
|
procedure TmbDeskPickerAction.WheelDown(Sender: TObject; Shift: TShiftState;
|
|
MousePos: TPoint; var Handled: Boolean);
|
|
begin
|
|
if Assigned(FOnWheelDown) then
|
|
FOnWheelDown(Self, Shift, MousePos, Handled);
|
|
end;
|
|
|
|
|
|
end.
|