Leandro Diaz 1 سال پیش
والد
کامیت
d99050c76d

+ 19 - 0
bcfluentslider.pas

@@ -47,6 +47,8 @@ type
     FLineBkgColor: TColor;
     FLineWidth: integer;
     procedure CalculateThumbRect;
+    function GetThumbPosition: TPoint;
+    function GetThumbRadius: integer;
     function GetValueFromMouse(X, Y: single): integer;
     function GetXYFromValue(v: integer): TPointF;
     procedure SetLineBkgColor(AValue: TColor);
@@ -76,6 +78,8 @@ type
     procedure DrawBackground; virtual;
   public
     constructor Create(AOwner: TComponent); override;
+    property ThumbPosition: TPoint read GetThumbPosition;
+    property ThumbRadius: integer read GetThumbRadius;
   published
     property MinValue: integer read FMinValue write SetMinValue default 0;
     property MaxValue: integer read FMaxValue write SetMaxValue default 100;
@@ -99,6 +103,7 @@ type
     property PopupMenu;
     property Visible;
     property OnClick;
+    property OnDblClick;
     property OnChangeBounds;
     property OnDragDrop;
     property OnDragOver;
@@ -538,6 +543,20 @@ begin
     p.y + FThumbRadius);
 end;
 
+function TBCFluentSlider.GetThumbPosition: TPoint;
+var
+  p: TPointF;
+begin
+  p:= CenterOfRectF(FThumbRect);
+  Result.X:= round(p.x);
+  Result.Y:= round(p.y);
+end;
+
+function TBCFluentSlider.GetThumbRadius: integer;
+begin
+  Result:= round(FThumbRadius);
+end;
+
 procedure TBCFluentSlider.RedrawBitmapContent;
 begin
   CalculateThumbRect;

+ 4 - 2
bcreg.pas

@@ -19,7 +19,8 @@ uses
   BGRAImageList, BGRAImageManipulation, BGRAKnob, BGRAResizeSpeedButton,
   BGRAShape, BGRASpeedButton, BGRASpriteAnimation, BGRAVirtualScreen,
   ColorSpeedButton, DTAnalogClock, DTAnalogGauge, dtthemedclock,
-  dtthemedgauge, MaterialColors, bcmdbutton, bcmdbuttonfocus;
+  dtthemedgauge, MaterialColors, bcmdbutton, bcmdbuttonfocus, BCFluentProgressRing,
+  BCFluentSlider;
 
 procedure Register;
 
@@ -39,7 +40,8 @@ begin
   TBGRAVirtualScreen, TBGRASpriteAnimation, TBGRASpeedButton, TBGRAResizeSpeedButton,
   TBGRAKnob, TBGRAImageManipulation, TBGRAImageList, TBGRAGraphicControl, TBGRAFlashProgressBar,
   TBCTrackbarUpdown, TBCToolBar, TBCSVGViewer, TBCSVGButton, TBCRadialProgressBar,
-  TBCPanel,TBCMDButtonFocus, TBCMDButton, TBCMaterialDesignButton
+  TBCPanel,TBCMDButtonFocus, TBCMDButton, TBCMaterialDesignButton,
+  TBCFluentProgressRing, TBCFluentSlider
   {TBCDefaultThemeManager, TBCKeyboard, TBCNumericKeyboard, TBCRealNumericKeyboard}]);
 
 

+ 1 - 1
bgracontrols.lpk

@@ -33,7 +33,7 @@
     </CompilerOptions>
     <Description Value="BGRA Controls is a set of graphical UI elements that you can use with Lazarus LCL applications."/>
     <License Value="Modified LGPL"/>
-    <Version Major="9"/>
+    <Version Major="9" Release="1"/>
     <Files Count="70">
       <Item1>
         <Filename Value="atshapelinebgra.pas"/>

BIN
images/TBCFluentProgressRing.png


BIN
images/TBCFluentProgressRing_150.png


BIN
images/TBCFluentProgressRing_200.png


BIN
images/TBCFluentSlider.png


BIN
images/TBCFluentSlider_150.png


BIN
images/TBCFluentSlider_200.png


BIN
images/bgracontrols_images.res


+ 7 - 1
images/bgracontrols_images_list.txt

@@ -102,4 +102,10 @@ tbccombobox_150.png
 tbccombobox_200.png
 tbgrathemecheckbox.png
 tbgrathemecheckbox_150.png
-tbgrathemecheckbox_200.png
+tbgrathemecheckbox_200.png
+tbcfluentprogressring.png
+tbcfluentprogressring_150.png
+tbcfluentprogressring_200.png
+tbcfluentslider.png
+tbcfluentslider_150.png
+tbcfluentslider_200.png

+ 50 - 1
test/test_bcfuentslider/unit1.pas

@@ -6,7 +6,7 @@ interface
 
 uses
   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
-  BCFluentSlider;
+  BCFluentSlider, BCFluentProgressRing;
 
 type
 
@@ -20,7 +20,10 @@ type
     procedure CheckBox2Change(Sender: TObject);
     procedure FormCreate(Sender: TObject);
   private
+    procedure DestroyInternalEdit(Data: PtrInt);
+    procedure InternalEditEditingDone(Sender: TObject);
     procedure SliderChangeValue(Sender: TObject);
+    procedure SliderDblClick(Sender: TObject);
 
   public
     Slider: TBCFluentSlider;
@@ -44,6 +47,7 @@ begin
     Left:= 10;
     Width:= 240;
     OnChangeValue:= @SliderChangeValue;
+    OnDblClick:= @SliderDblClick;
     Parent:= self;
   end;
 end;
@@ -66,5 +70,50 @@ begin
   Label1.Caption:= 'Value: '+IntToStr(Slider.Value);
 end;
 
+procedure TForm1.SliderDblClick(Sender: TObject);
+var
+  ed: TEdit;
+begin
+  ed:= TEdit.Create(self);
+  ed.AutoSelect:= false;
+  if (Slider.Orientation = pbHorizontal) or (Slider.Orientation =pbRightToLeft) then
+  begin
+    ed.Top:= Slider.BoundsRect.Bottom;
+    ed.Left:= Slider.Left + Slider.ThumbPosition.X - Slider.ThumbRadius;
+  end
+  else
+  begin
+    ed.Top:= Slider.Top + Slider.ThumbPosition.Y - Slider.ThumbRadius;
+    ed.Left:= Slider.BoundsRect.Right;
+  end;
+  ed.Parent:= self;
+  ed.OnEditingDone:= @InternalEditEditingDone;
+  ed.OnMouseLeave:= @InternalEditEditingDone;
+  ed.SetFocus;
+end;
+
+procedure TForm1.DestroyInternalEdit(Data: PtrInt);
+var
+  ed: TEdit;
+begin
+  ed:= TEdit(Data);
+  ed.Free;
+end;
+
+procedure TForm1.InternalEditEditingDone(Sender: TObject);
+var
+  ed: TEdit;
+begin
+  if Sender is TEdit then
+  begin
+    ed:= TEdit(Sender);
+    Label1.Caption:= ed.Text;
+    ed.OnEditingDone:= nil;
+    ed.OnMouseLeave:= nil;
+    ed.Visible:= false;
+    Application.QueueAsyncCall(@DestroyInternalEdit, PtrInt(ed));
+  end;
+end;
+
 end.