Delphi XE10让android的界面设计摆脱繁杂

时间:2021-04-21 05:42:50

设计一个选项卡。

大体图样:

Delphi XE10让android的界面设计摆脱繁杂

 

1、创建一个multi_Device_Application;2、在form上放一个Rectangle1,设置align为top。设置fill属性的kind为Gradient,编辑Gradient(颜色取值见样图)。3、再放一个Rectange2设置align为top,底色为白色。4、在Rectange2上放置三个RoundRect1,RoundRect2,RoundRect3。设置它们的Corners属性的TopLeft和TopRight为TURE,BottomLeft和BottomRight为FALSE,则圆角出现了。然后分别设置它们的Fill属性。5、放置一个Tabcontrol控件,设置TopPostion为None;align为client。6、设置RoundRect1,RoundRect2,RoundRect3的tag属性分别为:1,2,3

直接上代码:

unit TabbedTemplate;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.TabControl,
  FMX.StdCtrls, FMX.Gestures, FMX.Controls.Presentation, FMX.Objects, FMX.Ani;

type
  TTabbedForm = class(TForm)
    HeaderToolBar: TToolBar;
    ToolBarLabel: TLabel;
    TabControl1: TTabControl;
    TabItem1: TTabItem;
    TabItem2: TTabItem;
    TabItem3: TTabItem;
    GestureManager1: TGestureManager;
    Label2: TLabel;
    Label3: TLabel;
    Rectangle1: TRectangle;
    TabPanel: TPanel;
    Line1: TLine;
    RoundRect1: TRoundRect;
    RoundRect2: TRoundRect;
    Label5: TLabel;
    Label6: TLabel;
    RoundRect3: TRoundRect;
    Label7: TLabel;
    Rectangle2: TRectangle;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo;
      var Handled: Boolean);
    procedure TabControl1Gesture(Sender: TObject;
      const EventInfo: TGestureEventInfo; var Handled: Boolean);
    procedure TabHeadrOnClick(Sender: TObject);
  private
    { Private declarations }
    CurTabIndex:integer;

  public
    { Public declarations }
  end;

var
  TabbedForm: TTabbedForm;

implementation

{$R *.fmx}

procedure TTabbedForm.TabHeadrOnClick(Sender: TObject);
var
  ClickTag:integer;
  i:integer;

begin
  if (Sender is TLabel) then
    begin
       ClickTag:=Tlabel(sender).Tag
    end
  else
    if (Sender is TRoundRect) then
      begin
        ClickTag:=TRoundRect(Sender).Tag;
      end;

  if ClickTag<>CurTabIndex then
    begin
      for I := 0 to self.ComponentCount-1 do
        begin
          if (self.Components[i] is TRoundRect) then
            begin
            TRoundRect(self.Components[i]).Fill.Kind:=TBrushKind.Gradient;
            TRoundRect(self.Components[i]).Fill.Gradient.Color:= TAlphaColor($FFE2E4E4);
            TRoundRect(self.Components[i]).Fill.Gradient.Color1:=TAlphaColor($FFFFFFFF);
            TRoundRect(self.Components[i]).Fill.Gradient.Style:=TGradientStyle.Linear;
            TRoundRect(self.Components[i]).Stroke.Kind:=TBrushKind.None;
           end;
        end;
      TabControl1.ActiveTab:=TabControl1.Tabs[ClickTag-1];;
      CurTabIndex:=ClickTag;
      TRoundRect(sender).Fill.Kind:=TBrushKind.Solid;
      TRoundRect(Sender).Fill.Color:= TAlphaColorRec.Lightskyblue;
      TRoundRect(Sender).Stroke.Kind:=TBrushKind.Solid;
      TRoundRect(sender).stroke.Color:=TAlphaColorRec.Lightblue;
    end;
end;

procedure TTabbedForm.FormCreate(Sender: TObject);
begin
  { This defines the default active tab at runtime }
  TabControl1.ActiveTab := TabItem1;
  CurTabIndex:=1;
end;

procedure TTabbedForm.FormGesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
{$IFDEF ANDROID}
  case EventInfo.GestureID of
    sgiLeft:
      begin
        if TabControl1.ActiveTab <> TabControl1.Tabs[TabControl1.TabCount-1] then
          begin
            TabControl1.ActiveTab := TabControl1.Tabs[TabControl1.TabIndex+1];
            Handled := True;
          end;
      end;

    sgiRight:
      begin
        if TabControl1.ActiveTab <> TabControl1.Tabs[0] then
          begin
            TabControl1.ActiveTab := TabControl1.Tabs[TabControl1.TabIndex-1];
            Handled := True;
          end;
      end;
  end;
{$ENDIF}
end;

procedure TTabbedForm.TabControl1Gesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
   case EventInfo.GestureID of
      sgiRight:
        begin
         TabControl1.Previous();
         Handled:=True;
        end;
      sgiLeft:
        begin
          TabControl1.Next();
          Handled:=True;
        end;
   end;
end;

end.