djjd47130

FMX List View Switch

May 6th, 2016
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.89 KB | None | 0 0
  1. unit uListViewSwitchTest;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7.   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  8.   FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
  9.   FMX.ListView, FMX.Controls.Presentation, FMX.StdCtrls;
  10.  
  11. type
  12.  
  13.   TListItemSwitch = class(TListItemSimpleControl)
  14.   private type
  15.     TNeededToDo = set of (SetChecked, CallClick);
  16.   private
  17.     FIsChecked: Boolean;
  18.     FOnSwitch: TNotifyEvent;
  19.     procedure SetIsChecked(const AValue: Boolean);
  20.   protected
  21.     function MouseDown(const Button: TMouseButton; const Shift: TShiftState; const MousePos: TPointF): Boolean;
  22.       override;
  23.     procedure DoSwitch; virtual;
  24.   public
  25.     constructor Create(const AOwner: TListItem); override;
  26.     destructor Destroy; override;
  27.  
  28.     procedure Render(const Canvas: TCanvas; const DrawItemIndex: Integer; const DrawStates: TListItemDrawStates;
  29.       const SubPassNo: Integer = 0); override;
  30.  
  31.   public
  32.     property IsChecked: Boolean read FIsChecked write SetIsChecked;
  33.     property OnSwitch: TNotifyEvent read FOnSwitch write FOnSwitch;
  34.   end;
  35.  
  36.   TForm1 = class(TForm)
  37.     ListView1: TListView;
  38.     Switch1: TSwitch;
  39.     procedure ListView1UpdateObjects(const Sender: TObject;
  40.       const AItem: TListViewItem);
  41.     procedure FormCreate(Sender: TObject);
  42.   private
  43.     { Private declarations }
  44.   public
  45.     { Public declarations }
  46.   end;
  47.  
  48. var
  49.   Form1: TForm1;
  50.  
  51. implementation
  52.  
  53. {$R *.fmx}
  54.  
  55. { TListItemSwitch }
  56.  
  57. constructor TListItemSwitch.Create(const AOwner: TListItem);
  58. begin
  59.   inherited;
  60.  
  61. end;
  62.  
  63. destructor TListItemSwitch.Destroy;
  64. begin
  65.  
  66.   inherited;
  67. end;
  68.  
  69. procedure TListItemSwitch.DoSwitch;
  70. begin
  71.   FIsChecked:= not FIsChecked;
  72.   if Assigned(OnSwitch) then
  73.     OnSwitch(Self);
  74. end;
  75.  
  76. function TListItemSwitch.MouseDown(const Button: TMouseButton;
  77.   const Shift: TShiftState; const MousePos: TPointF): Boolean;
  78. begin
  79.   if (Button = TMouseButton.mbLeft) and Enabled then begin
  80.     DoSwitch;
  81.   end;
  82.   inherited;
  83. end;
  84.  
  85. procedure TListItemSwitch.Render(const Canvas: TCanvas;
  86.   const DrawItemIndex: Integer; const DrawStates: TListItemDrawStates;
  87.   const SubPassNo: Integer);
  88. var
  89.   R, R2: TRectF;
  90. begin
  91.   inherited;
  92.  
  93.   R:= Self.LocalRect;
  94.   R2:= R;
  95.  
  96.   Canvas.BeginScene;
  97.   try
  98.  
  99.     Canvas.Stroke.Kind:= TBrushKind.None;
  100.     Canvas.Fill.Kind:= TBrushKind.Solid;
  101.     Canvas.Fill.Color:= TAlphaColorRec.Skyblue;
  102.     Canvas.FillRect(R, 8, 8,
  103.       [TCorner.TopLeft, TCorner.TopRight, TCorner.BottomLeft, TCorner.BottomRight],
  104.       1.0, TCornerType.Round);
  105.  
  106.     if IsChecked then begin
  107.       R2.Left:= R.Right - 20;
  108.       R2.Width:= 20;
  109.     end else begin
  110.       R2.Left:= R.Left;
  111.       R2.Width:= 20;
  112.     end;
  113.  
  114.     Canvas.Fill.Color:= TAlphaColorRec.Black;
  115.     Canvas.FillRect(R2, 8, 8,
  116.       [TCorner.TopLeft, TCorner.TopRight, TCorner.BottomLeft, TCorner.BottomRight],
  117.       1.0, TCornerType.Round);
  118.  
  119.   finally
  120.     Canvas.EndScene;
  121.   end;
  122.  
  123. end;
  124.  
  125. procedure TListItemSwitch.SetIsChecked(const AValue: Boolean);
  126. begin
  127.   FIsChecked:= AValue;
  128. end;
  129.  
  130. { TForm1 }
  131.  
  132. procedure TForm1.FormCreate(Sender: TObject);
  133. var
  134.   I: TListViewItem;
  135. begin
  136.   I:= ListView1.Items.Add;
  137.   I:= ListView1.Items.Add;
  138.   I:= ListView1.Items.Add;
  139.   I:= ListView1.Items.Add;
  140.   I:= ListView1.Items.Add;
  141.   I:= ListView1.Items.Add;
  142.   I:= ListView1.Items.Add;
  143.   I:= ListView1.Items.Add;
  144.   I:= ListView1.Items.Add;
  145.  
  146. end;
  147.  
  148. procedure TForm1.ListView1UpdateObjects(const Sender: TObject;
  149.   const AItem: TListViewItem);
  150. var
  151.   S: TListItemSwitch;
  152. begin
  153.   S:= AItem.Objects.FindObject('Switch') as TListItemSwitch;
  154.   if S = nil then begin
  155.     S:= TListItemSwitch.Create(AItem);
  156.     S.Name:= 'Switch';
  157.     S.Align:= TListItemAlign.Trailing;
  158.     S.VertAlign:= TListItemAlign.Center;
  159.     S.Width:= 50;
  160.     S.Height:= 20;
  161.     S.IsChecked:= False;
  162.   end;
  163.  
  164.  
  165.  
  166. end;
  167.  
  168. end.
Advertisement
Add Comment
Please, Sign In to add comment