- ListView := TListView.Create(Self);
- ListView.Parent := Self;
- ListView.Name := 'hello';
- ListView.Height := 369;
- ListView.Width := 369;
- ListView.Align := TAlignLayout.Bottom;
- ListView.SearchVisible := True;
- ListView.BeginUpdate;
- for i := 0 to ListView.controls.Count - 1 do
- begin
- if ListView.controls[i].ClassType = TSearchBox then
- begin
- SearchBox := TSearchBox(ListView.controls[i]);
- end;
- end;
- OKbtn := TEditButton.Create(SearchBox);
- OKbtn.Parent := SearchBox;
- OKbtn.Text := 'OK';
- OKbtn.Width := 30;
- SearchBox.AddObject(OKbtn);
- ListView.EndUpdate;
解决方法
SearchBox是TEdit的后代,并使用FireMonkey控件样式.
在您的表单上放置TEdit并打开其StyleLookup属性:
你可以看到有不同的stlyes已经可用.
所以我们要更改我们的SearchBox的StyleLookup.
由于SearchBox是ListView控件的私有成员(FSearchEdit),因此您无法直接访问它.
您可以创建自己的ListView控件,它是TListView(TListViewBase)的后代或使用类帮助器.我选择后者.
- TListViewHelper = class helper for TListViewBase
- private
- function GetClearButton: Boolean;
- procedure SetClearButton(const Value: Boolean);
- public
- property ShowSearchEditClearButton: Boolean read GetClearButton write SetClearButton;
- end;
- { TListViewHelper }
- function TListViewHelper.GetClearButton: Boolean;
- begin
- Result := Self.FSearchEdit.StyleLookup = ''; // default style
- end;
- procedure TListViewHelper.SetClearButton(const Value: Boolean);
- begin
- if Value then
- Self.FSearchEdit.StyleLookup := '' // default style
- else
- Self.FSearchEdit.StyleLookup := 'editstyle';
- end;
在FormCreate中,我们可以调用ListView1.ShowSearchEditClearButton:= False;并且清除按钮不见了.
然而,放大镜玻璃图标也消失了,因为它不是我们设置为StyleLookup的编辑风格的一部分.
要获得图标,我们必须创建我们自己的风格,它有一个放大镜玻璃图标,但没有清除按钮.
在表单上放一个TEdit,右键单击它,然后选择编辑自定义样式:
我们现在在StyleBook Editor中,可以访问控件布局.
向结构添加一个TActiveStyleObject,将其重命名为magnifierglass
更改TActiveStyleObject的ActiveLink位图.
在BitmapLinks-Editor中找到放大镜玻璃图标并选择它(对于ActiveLink和SourceLink).
您的文字现在将与图标重叠.
要修复它,您必须将内容的左边距(目前设置为2px)更改为20像素.
您现在可以在创建样式并在表单“StyleBook”中删除表单上的编辑.
打开StyleBook并将您的新样式的StyleName重命名为searcheditstylenoclearbtn.
保存它并在你的classhelper函数中改变
- Self.FSearchEdit.StyleLookup := 'editstyle';
至
- Self.FSearchEdit.StyleLookup := 'searcheditstylenoclearbtn';
现在,清除按钮已经消失了.
如果您不想经历创建自己的searcheditstylenoclearbtn的麻烦,您可以将以下代码保存为searcheditstylenoclearbtn.style,并将其加载到StyleBook编辑器中.
- object TStyleContainer
- object TLayout
- StyleName = 'searcheditstylenoclearbtn'
- Position.X = 530.000000000000000000
- Position.Y = 399.000000000000000000
- Size.Width = 100.000000000000000000
- Size.Height = 22.000000000000000000
- Size.PlatformDefault = False
- Visible = False
- TabOrder = 0
- object TActiveStyleObject
- StyleName = 'background'
- Align = Contents
- SourceLookup = 'Windows 10 Desktopstyle.png'
- Size.Width = 100.000000000000000000
- Size.Height = 22.000000000000000000
- Size.PlatformDefault = False
- ActiveTrigger = Focused
- ActiveLink = <
- item
- CapInsets.Left = 7.000000000000000000
- CapInsets.Top = 7.000000000000000000
- CapInsets.Right = 7.000000000000000000
- CapInsets.Bottom = 7.000000000000000000
- SourceRect.Left = 266.000000000000000000
- SourceRect.Top = 81.000000000000000000
- SourceRect.Right = 305.000000000000000000
- SourceRect.Bottom = 110.000000000000000000
- end>
- SourceLink = <
- item
- CapInsets.Left = 7.000000000000000000
- CapInsets.Top = 7.000000000000000000
- CapInsets.Right = 7.000000000000000000
- CapInsets.Bottom = 7.000000000000000000
- SourceRect.Left = 225.000000000000000000
- SourceRect.Top = 81.000000000000000000
- SourceRect.Right = 264.000000000000000000
- SourceRect.Bottom = 110.000000000000000000
- end>
- TouchAnimation.Link = <>
- end
- object TLayout
- StyleName = 'content'
- Align = Client
- Locked = True
- Margins.Left = 20.000000000000000000
- Margins.Top = 2.000000000000000000
- Margins.Right = 2.000000000000000000
- Margins.Bottom = 2.000000000000000000
- Size.Width = 6.000000000000000000
- Size.Height = 18.000000000000000000
- Size.PlatformDefault = False
- end
- object TLayout
- StyleName = 'buttons'
- Align = Right
- Locked = True
- Margins.Top = 2.000000000000000000
- Margins.Right = 2.000000000000000000
- Margins.Bottom = 2.000000000000000000
- Position.X = 48.000000000000000000
- Position.Y = 2.000000000000000000
- Size.Width = 50.000000000000000000
- Size.Height = 18.000000000000000000
- Size.PlatformDefault = False
- end
- object TBrushObject
- StyleName = 'foreground'
- Brush.Color = claBlack
- end
- object TBrushObject
- StyleName = 'selection'
- Brush.Color = x7F2A96FF
- end
- object TFontObject
- StyleName = 'font'
- end
- object TLabel
- StyleName = 'prompt'
- Locked = True
- Opacity = 0.500000000000000000
- Visible = False
- end
- object TActiveStyleObject
- StyleName = 'magnifierglass'
- Align = Left
- CapMode = Tile
- Margins.Top = 1.000000000000000000
- SourceLookup = 'Windows 10 Desktopstyle.png'
- Position.Y = 1.000000000000000000
- Size.Width = 20.000000000000000000
- Size.Height = 21.000000000000000000
- Size.PlatformDefault = False
- WrapMode = Center
- ActiveTrigger = Pressed
- ActiveLink = <
- item
- SourceRect.Left = 4.000000000000000000
- SourceRect.Top = 358.000000000000000000
- SourceRect.Right = 20.000000000000000000
- SourceRect.Bottom = 374.000000000000000000
- end>
- SourceLink = <
- item
- SourceRect.Left = 4.000000000000000000
- SourceRect.Top = 358.000000000000000000
- SourceRect.Right = 20.000000000000000000
- SourceRect.Bottom = 374.000000000000000000
- end>
- TouchAnimation.Link = <>
- end
- end
- end