TListview FMX onclick事件以及Toggle Design

时间:2017-07-04 07:22:32

标签: listview delphi firemonkey

Toggle Design mode in FMX Listview give you this

实施如下:

ds.first;
  while not(ds.Eof) do
    begin
      L := LV1.Items.Add;
      L.Data['Part_No']   := ds.FieldByName('Part_no').AsString;
      L.Data['Part_Name'] := ds.FieldByName('Part_name').AsString;
      L.Data['LocNo']     := ds.FieldByName('Loc_No').AsString;
      L.Data['Qty']       := ds.FieldByName('BAL').AsFloat;
      ds.Next;
    end;

我使用代码

动态添加项目

OnItemClick事件如何触发以检测单击了哪个元素。找出简单的事情非常令人沮丧。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

有点抛出,但它应该让你开始:

function GetClickedDrawable(const AItem: TListViewItem; APoint: TPointF): TListItemDrawable;
var
  I: Integer;
begin
  Result := nil;
  // Fudge for statusbar height if using iOS. Should be done properly
  APoint := PointF(APoint.X, APoint.Y - 20); 
  for I := 0 to AItem.Objects.ViewList.Count - 1 do
  begin
    if AItem.Objects.ViewList[I].InLocalRect(APoint) then
    begin
      Result := AItem.Objects.ViewList[I];
      Break;
    end;
  end;
end;

procedure TForm1.ListViewItemClick(const Sender: TObject; const AItem: TListViewItem);
var
  LDrawable: TListItemDrawable;
begin
  LDrawable := GetClickedDrawable(AItem, ListView.AbsoluteToLocal(Screen.MousePos));
  if LDrawable <> nil then
    ShowMessage(LDrawable.Name);
end;

您需要调整GetClickedDrawable以适应您所处的平台。 PS:谢谢你的提问;我将需要做一些非常类似的事情,最终: - )

修改

我已经保留原来的答案,以防早期版本的Delphi中没有以下内容:

使用OnItemClickEx事件。事件的参数使其非常自我解释

不知道为什么我之前没有看到: - )

答案 1 :(得分:0)

“如何检测到单击或选择了哪个元素?发现简单的东西非常令人沮丧。”

1.-选择类似的结构:TlistView1 / ItemAppearance / Item

2 .--在对象检查器中,将“外观”更改为DynamicAppearance。

3 .--在对象检查器中,添加一个新的TTextObjectAppearance,将名称更改为“ MUV_HELY”或其他名称。

4.-添加项目

ListView1.Items.Add.Objects.FindObjectT<TListItemText>('MUV_HELY').Text:= //Your record value, or something. /*string all the time*/

5.-回读项目

procedure TMainMenu.ListView1Change(Sender: TObject);
begin
  if ListView1.Selected<>nil then ShowMessage(TAppearanceListViewItem(ListView1.Selected).Objects.FindObjectT<TListItemText>('MUV_HELY').Text);
end;

如果使用键盘(上,下,左,右)更改所选项目,则无需单击即可返回所选值。