From 2fd976620e566321fd078aadf6d0951a1dc7777a Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Thu, 24 Sep 2009 18:45:18 +0000 Subject: [PATCH] Enhance SynEdit's TSynHotKey: * Add events OnChange, OnEnter and OnExit * Use gray text when disabled --- components/synedit/Source/SynEditMiscClasses.pas | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/synedit/Source/SynEditMiscClasses.pas b/components/synedit/Source/SynEditMiscClasses.pas index a26b97e2..2eb6a594 100644 --- a/components/synedit/Source/SynEditMiscClasses.pas +++ b/components/synedit/Source/SynEditMiscClasses.pas @@ -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}