Как использовать для в с TTabControl в Delphi FMX? - PullRequest
0 голосов
/ 01 апреля 2020

Извините, если это повторяющийся вопрос, но я нигде не нашел решения.

Я хочу сделать поиск для поиска указанного c тега на моем компоненте TTabControl со многими вкладками, но Я понятия не имею, как это сделать. Мой TTabControl с именем TabControl1 получает свои табемы во время выполнения по запросу. Он должен быть рассчитан на поддержку от 1 до 100+ вкладок, если клиент этого хочет. Таким образом, у каждой вкладки есть описание, которое является ее именем и индексом в моей таблице категорий, каждый раз, когда я создаю TTabItem, я назначаю ему тег, который является индексом вкладки в моей sql таблице

SQL::
DROP TABLE IF EXISTS Category;
CREATE TABLE Category (
  CAT_ID integer primary key
, CAT_Descr Varchar(200)
);

Delphi::
FDQ.Close;
FDQ.Open('SELECT * FROM Category');
while not FDQ.Eof do
  begin
    TabControl1.Add().Tag := FDQ.FieldByName('CAT_ID').AsInteger;
    FDQ.Next;
  end;

В целях тестирования у меня есть 5 элементов в базе данных: ([1, tab1], [2, tab2], [3, tab3], [4, tab4], [5, tab5]) Поэтому, когда я запускаю код, он создает 5 вкладок с тегом от 1 до 5 на них, отлично, тег работает. Но теперь мне нужно заполнить эти вкладки элементами, созданными во время выполнения, также из запроса, и теперь это та часть, где произойдет for in, но именно здесь я не знаю, как правильно сделать это на вкладках

procedure TfListing.createtabs;
var
  dummytoolbar: TToolBar;
  dummylabel: TLabel;
  dummylistbox: TListBox;
  tabitem: TTabItem;
  dummylistitem: TListBoxItem;
begin
  // listboxitemlabel
  // listboxitemdetaillabel

  for DM.FDQ.FieldByName('CAT_ID').AsInteger in TabControl1.Tabs[].Tag do <<== this is the line with the issue
  begin
    try
      dummytoolbar := TToolBar.Create(tabitem);
      dummytoolbar.Parent := tabitem;
      dummytoolbar.Align := TAlignLayout.Top;

      dummylabel := TLabel.Create(dummytoolbar);
      dummylabel.Parent := dummytoolbar;
      dummylabel.Align := TAlignLayout.Contents;
      dummylabel.StyleLookup := 'toollabel';
      dummylabel.Text := DM.FDQ.FieldByName('CAT_Descr').ToString;
      dummylabel.TextAlign := TTextAlign.Center;

      dummylistbox := TListBox.Create(tabitem);
      dummylistbox.Parent := tabitem;
      dummylistbox.Align := TAlignLayout.Client;

      dummylistitem := TListBoxItem.Create(dummylistbox);
      dummylistitem.Parent := dummylistbox;
      dummylistitem.Height := 44;

      dummylabel := TLabel.Create(dummylistitem);
      dummylabel.Parent := dummylistitem;
      dummylabel.Align := TAlignLayout.MostLeft;
      dummylabel.StyleLookup := 'listboxitemdetaillabel';
      dummylabel.Text := dm.FDQ.FieldByName('PRO_Stock').AsString;

      dummylabel := TLabel.Create(dummylistitem);
      dummylabel.Parent := dummylistitem;
      dummylabel.Align := TAlignLayout.Client;
      dummylabel.StyleLookup := 'listboxitemlabel';
      dummylabel.Text := dm.FDQ.FieldByName('PRO_Name').AsString;


    finally
      dummytoolbar.DisposeOf;
      dummylabel.DisposeOf;
      dummylistbox.DisposeOf;
      dummylistitem.DisposeOf;
    end;
  end;
end;

Как мне заставить это работать?

...