У меня есть FireLonkey TListBox в приложении для Android, и в OnPaint я помещаю 3 кнопки в выбранный TListBoxItem.Они отображаются и им назначено событие OnClick.Но при нажатии на них это событие обычно не срабатывает.Лишь редко я получаю нажатие кнопки.
Я предполагаю, что TListBox уже получил щелчок и объявил его обработанным.Есть ли способ иначе?Могу ли я зарегистрировать касание в самой форме и определить по положению касания, какая из кнопок должна быть нажата?Как это будет работать?
Вот код текущего решения, TListBox выровнен по форме к клиенту, а кнопки в TLayout выровнены по правому краю.
unit MainForm;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics,
FMX.Dialogs, FMX.Layouts, FMX.ListBox, FMX.Controls.Presentation,
FMX.StdCtrls, FMX.Objects;
type
TForm1 = class(TForm)
lb_Files: TListBox;
Layout1: TLayout;
Image1: TImage;
Image2: TImage;
Button1: TButton;
Button2: TButton;
Rectangle1: TRectangle;
Rectangle2: TRectangle;
procedure FormCreate(Sender: TObject);
procedure lb_FilesPaint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses
System.UIConsts;
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
lb_Files.ListItems[lb_Files.ItemIndex].Text := 'Info';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
lb_Files.ListItems[lb_Files.ItemIndex].Text := 'Test';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
for i := 0 to 30 do
lb_Files.Items.Add('File' + i.ToString +'.dat');
end;
procedure TForm1.lb_FilesPaint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
begin
if lb_Files.ItemIndex > -1 then
begin
Layout1.Parent := lb_Files.ListItems[lb_Files.ItemIndex];
Layout1.Align := TAlignLayout.Right;
Layout1.Visible := true;
end;
end;
end.
Вот FMXконтент сейчас:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
StyleBook = StyleBook1
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnCreate = FormCreate
DesignerMasterStyle = 3
object lb_Files: TListBox
Align = Client
Enabled = False
Size.Width = 640.000000000000000000
Size.Height = 480.000000000000000000
Size.PlatformDefault = False
StyleLookup = 'listboxstyle'
TabOrder = 0
OnPaint = lb_FilesPaint
DisableFocusEffect = True
DefaultItemStyles.ItemStyle = 'listboxitemstyle'
DefaultItemStyles.GroupHeaderStyle = ''
DefaultItemStyles.GroupFooterStyle = ''
Viewport.Width = 640.000000000000000000
Viewport.Height = 480.000000000000000000
object Layout1: TLayout
Position.X = 384.000000000000000000
Position.Y = 192.000000000000000000
Size.Width = 153.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
object Rectangle1: TRectangle
Align = Right
Fill.Color = claBlue
HitTest = False
Position.X = 53.000000000000000000
Size.Width = 50.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
Stroke.Kind = None
OnClick = Button1Click
object Button1: TButton
Align = Client
Size.Width = 50.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
StyleLookup = 'buttonstyle'
TabOrder = 0
TintColor = claBlue
OnClick = Button1Click
end
end
object Rectangle2: TRectangle
Align = Right
Fill.Color = claGreen
HitTest = False
Position.X = 103.000000000000000000
Size.Width = 50.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
Stroke.Kind = None
OnClick = Button2Click
object Button2: TButton
Align = Client
Size.Width = 50.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
StyleLookup = 'buttonstyle'
TabOrder = 0
TintColor = claGreen
OnClick = Button2Click
end
end
end
end
end