Кнопка, размещенная на выбранном TListItem, в большинстве случаев не получает щелчок - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть 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
...