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