Browse Source

Toggle in ColorSpeedButton

lainz 8 years ago
parent
commit
dc4cd944e8
1 changed files with 35 additions and 5 deletions
  1. 35 5
      colorspeedbutton.pas

+ 35 - 5
colorspeedbutton.pas

@@ -39,15 +39,19 @@ type
   private
   private
     FLastDrawDetails: TThemedElementDetails;
     FLastDrawDetails: TThemedElementDetails;
     FPopupMode: boolean;
     FPopupMode: boolean;
+    FPressed: boolean;
     FStateActive: TColorState;
     FStateActive: TColorState;
     FStateDisabled: TColorState;
     FStateDisabled: TColorState;
     FStateHover: TColorState;
     FStateHover: TColorState;
     FStateNormal: TColorState;
     FStateNormal: TColorState;
+    FToggle: boolean;
     procedure SetFPopupMode(AValue: boolean);
     procedure SetFPopupMode(AValue: boolean);
+    procedure SetFPressed(AValue: boolean);
     procedure SetFStateActive(AValue: TColorState);
     procedure SetFStateActive(AValue: TColorState);
     procedure SetFStateDisabled(AValue: TColorState);
     procedure SetFStateDisabled(AValue: TColorState);
     procedure SetFStateHover(AValue: TColorState);
     procedure SetFStateHover(AValue: TColorState);
     procedure SetFStateNormal(AValue: TColorState);
     procedure SetFStateNormal(AValue: TColorState);
+    procedure SetFToggle(AValue: boolean);
   protected
   protected
     {$ifdef overridepaint}
     {$ifdef overridepaint}
     procedure DrawText(ACanvas: TPersistent; Details: TThemedElementDetails;
     procedure DrawText(ACanvas: TPersistent; Details: TThemedElementDetails;
@@ -62,6 +66,8 @@ type
     destructor Destroy; override;
     destructor Destroy; override;
     procedure Click; override;
     procedure Click; override;
   published
   published
+    property Toggle: boolean read FToggle write SetFToggle;
+    property Pressed: boolean read FPressed write SetFPressed;
     property PopupMode: boolean read FPopupMode write SetFPopupMode;
     property PopupMode: boolean read FPopupMode write SetFPopupMode;
     property StateNormal: TColorState read FStateNormal write SetFStateNormal;
     property StateNormal: TColorState read FStateNormal write SetFStateNormal;
     property StateHover: TColorState read FStateHover write SetFStateHover;
     property StateHover: TColorState read FStateHover write SetFStateHover;
@@ -95,6 +101,14 @@ begin
   FPopupMode := AValue;
   FPopupMode := AValue;
 end;
 end;
 
 
+procedure TColorSpeedButton.SetFPressed(AValue: boolean);
+begin
+  if FPressed = AValue then
+    Exit;
+  FPressed := AValue;
+  Invalidate;
+end;
+
 procedure TColorSpeedButton.SetFStateDisabled(AValue: TColorState);
 procedure TColorSpeedButton.SetFStateDisabled(AValue: TColorState);
 begin
 begin
   if FStateDisabled = AValue then
   if FStateDisabled = AValue then
@@ -119,10 +133,17 @@ begin
   Invalidate;
   Invalidate;
 end;
 end;
 
 
+procedure TColorSpeedButton.SetFToggle(AValue: boolean);
+begin
+  if FToggle = AValue then
+    Exit;
+  FToggle := AValue;
+  Invalidate;
+end;
+
 {$ifdef overridepaint}
 {$ifdef overridepaint}
 procedure TColorSpeedButton.DrawText(ACanvas: TPersistent;
 procedure TColorSpeedButton.DrawText(ACanvas: TPersistent;
-  Details: TThemedElementDetails; const S: string; R: TRect; Flags,
-  Flags2: cardinal);
+  Details: TThemedElementDetails; const S: string; R: TRect; Flags, Flags2: cardinal);
 var
 var
   TXTStyle: TTextStyle;
   TXTStyle: TTextStyle;
 begin
 begin
@@ -148,7 +169,7 @@ begin
   else
   else
     TXTStyle.Layout := tlTop;
     TXTStyle.Layout := tlTop;
   TXTStyle.RightToLeft := (Flags and DT_RTLREADING) <> 0;
   TXTStyle.RightToLeft := (Flags and DT_RTLREADING) <> 0;
-    // set color here, otherwise SystemFont is wrong if the button was disabled before
+  // set color here, otherwise SystemFont is wrong if the button was disabled before
   TXTStyle.SystemFont := Canvas.Font.IsDefault;//Match System Default Style
   TXTStyle.SystemFont := Canvas.Font.IsDefault;//Match System Default Style
 
 
   TXTStyle.Wordbreak := (Flags and DT_WORDBREAK) <> 0;
   TXTStyle.Wordbreak := (Flags and DT_WORDBREAK) <> 0;
@@ -187,7 +208,7 @@ begin
 
 
   if Draw then
   if Draw then
   begin
   begin
-    FLastDrawDetails:=DrawDetails;
+    FLastDrawDetails := DrawDetails;
     PaintBackground(PaintRect);
     PaintBackground(PaintRect);
     FixedWidth := True;
     FixedWidth := True;
     FixedHeight := True;
     FixedHeight := True;
@@ -405,8 +426,13 @@ end;
 {$endif}
 {$endif}
 
 
 procedure TColorSpeedButton.PaintBackground(var PaintRect: TRect);
 procedure TColorSpeedButton.PaintBackground(var PaintRect: TRect);
+var
+  TempState: TButtonState;
 begin
 begin
-  case FState of
+  TempState := FState;
+  if Toggle and Pressed then
+    TempState := bsDown;
+  case TempState of
     bsUp:
     bsUp:
     begin
     begin
       Canvas.Pen.Color := FStateNormal.BorderColor;
       Canvas.Pen.Color := FStateNormal.BorderColor;
@@ -469,11 +495,15 @@ procedure TColorSpeedButton.Click;
 var
 var
   p: TPoint;
   p: TPoint;
 begin
 begin
+  if Toggle then
+    Pressed := not Pressed;
+
   if PopupMode then
   if PopupMode then
   begin
   begin
     p := Parent.ClientToScreen(Point(Left, Top));
     p := Parent.ClientToScreen(Point(Left, Top));
     PopupMenu.PopUp(p.x, p.y + Height);
     PopupMenu.PopUp(p.x, p.y + Height);
   end;
   end;
+
   inherited Click;
   inherited Click;
 end;
 end;