Enhance SynEdit's TSynHotKey:

* Add events OnChange, OnEnter and OnExit
* Use gray text when disabled
This commit is contained in:
Ansgar Becker
2009-09-24 18:45:18 +00:00
parent ca8fd5b118
commit 2fd976620e

View File

@ -328,6 +328,9 @@ type
FInvalidKeys: THKInvalidKeys;
FModifiers: THKModifiers;
FPressedOnlyModifiers: Boolean;
FOnChange: TNotifyEvent;
FOnEnter: TNotifyEvent;
FOnExit: TNotifyEvent;
procedure SetBorderStyle(const Value: TSynBorderStyle);
procedure SetHotKey(const Value: TShortCut);
procedure SetInvalidKeys(const Value: THKInvalidKeys);
@ -360,6 +363,9 @@ type
property HotKey: TShortCut read FHotKey write SetHotKey default $0041; { Alt+A }
property InvalidKeys: THKInvalidKeys read FInvalidKeys write SetInvalidKeys default [hcNone, hcShift];
property Modifiers: THKModifiers read FModifiers write SetModifiers default [hkAlt];
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
property OnExit: TNotifyEvent read FOnExit write FOnExit;
end;
TSynEditSearchCustom = class(TComponent)
@ -1381,6 +1387,8 @@ begin
end;
Key := SavedKey;
if Assigned(FOnChange) then
FOnChange(Self);
end;
procedure TSynHotKey.KeyUp(var Key: Word; Shift: TShiftState);
@ -1429,6 +1437,10 @@ begin
Canvas.Brush.Color := Color;
InflateRect(r, -BorderWidth, -BorderWidth);
Canvas.FillRect(r);
if Enabled then
Canvas.Font.Color := clWindowText
else
Canvas.Font.Color := clGrayText;
TextRect(Canvas, r, BorderWidth + 1, BorderWidth + 1, Text);
end;
@ -1493,6 +1505,8 @@ end;
procedure TSynHotKey.WMKillFocus(var Msg: TWMKillFocus);
begin
DestroyCaret;
if Assigned(FOnExit) then
FOnExit(Self);
end;
procedure TSynHotKey.WMSetFocus(var Msg: TWMSetFocus);
@ -1501,6 +1515,8 @@ begin
CreateCaret(Handle, 0, 1, -Canvas.Font.Height + 2);
SetCaretPos(BorderWidth + 1 + TextWidth(Canvas, Text), BorderWidth + 1);
ShowCaret(Handle);
if Assigned(FOnEnter) then
FOnEnter(Self);
end;
{$ENDIF}