Вопрос по firemonkey, delphi – Создать время выполнения TTabItem, firemonkey

2

Похоже, мне нужна помощь с проектом. У меня есть подпрограмма, которая создает во время выполнения несколько TabItems для элемента управления страницы в firemonkey, и я хочу иметь кнопку закрытия на вкладке. Новая вкладка имеет флажок для загрузки кнопки закрытия из стилистера вкладок. На странице есть вкладка по умолчанию, и в некоторые кнопки я добавляю во время выполнения новые элементы вкладки. Мне удалось применить событие для закрытия вкладки по умолчанию, но она не работает в пределах созданных во время выполнения вкладок. Любая помощь будет оценена.

Это кусок кода для табем во время выполнения

procedure TForm1.Button1Click(Sender: TObject);
var
  t : TTabItem;
  o : TFmxObject;
  i : Integer;
  c : TControl;
begin
  t := TTabItem.Create(pgeControl);

  t.Parent := pgeControl;

  o := FindBinding('imgCloseTabPage');
  if o<>nil then
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TCheckBox then
      begin
        TCheckBox(Components[i]).OnClick := CheckBox1Click;
      end;
    end;
  end;

  if pgeControl.TabCount - 1 <= nTab then
  begin
    nTab := nTab + 1;
    t.Index := nTab
  end
  else
  begin
    t.Index := pgeControl.TabCount - 1;
    nTab := pgeControl.TabCount - 1;
  end;
  t.Tag := nTab;

  t.Text := 'Some text...' + ' ' + IntToStr(nTab);
  t.Name := 'tabPatient' + IntToStr(nTab);

  t.Height := 35;
  t.Width := 250;
  t.Margins.Top := 0;
  t.Margins.Left := 0;
  t.Margins.Bottom := 0;
  t.Margins.Right := 0;

  t.Padding.Top := -5;
  t.Padding.Left := 0;
  t.Padding.Bottom := 0;
  t.Padding.Right := 0;

  t.TextAlign := TTextAlign.taLeading;
  t.Width := (Length(t.Text) * 6 ) + 60;
  t.Font.Size := 15;
  t.StyleLookup := 'tabMainStyle1';

  l := TLayout.Create(t);
  l.Parent := t;
  l.Align := TAlignLayout.alClient;
  l.Margins.Top := -5;
  l.Margins.Left := 5;
  l.Margins.Right := 5;
  l.Margins.Bottom := 5;
  l.Padding.Top := 0;
  l.Padding.Left := 0;
  l.Padding.Bottom := 0;
  l.Padding.Right := 0;

  pgeControl.ActiveTab := pgeControl.Tabs[pgeControl.TabCount - 1];
end;
Нет, я не создаю флажок для каждого нового tabitem, он на стилизаторе, который загружается внутри элементов вкладки, когда они создаются во время выполнения. ManosM
Вы создаете новый флажок для каждого нового табита? Peacelyk

Ваш Ответ

1   ответ
1

after применив собственный стиль. В настоящее время вы называете этоbeforeтак что он не может найти объект. Кроме того, была ошибка, когда вы искали объект.

так что положи это

o := t.FindBinding('imgCloseTabPage');
if o<>nil then
begin
  if o is TCheckBox then
    TCheckBox(o).OnClick := CheckBox1Click;
end;

после

t.StyleLookup := 'tabMainStyle1';

и событие должно быть назначено.

Спасибо за помощь, но, похоже, не работает. Даже если я изменю код по вашему предложению, событие не сработает. Событие игнорируется в обоих случаях. У тебя есть другая идея? Я могу послать вам проект дыры, в случае необходимости. Еще раз спасибо С наилучшими пожеланиями ManosM
Забудьте мой комментарий. Мне удалось решить, с вашей помощью. Большое спасибо. ManosM

Похожие вопросы