Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
динамически создаю PageControl, на нем несколько TabSheet, динамически перехожу на первый созданный TabSheet, вкладка переключается, а содержимое остается последней вкладки.

что нужно обновить, чтобы актуализировать и отобразить содержимое выбранной динамически вкладки???

пробовал REFRESH и REPAINT для PageControl, для динамически выбранного TabSheet, содержимое всзуально все равно остается последней вкладки.

потом мышкой всё работает нормально.
22 фев 21, 05:44    [22284624]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1770
yemets63,

ошибка в коде.
22 фев 21, 09:41    [22284632]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
L_argo
Member

Откуда:
Сообщений: 1386
возможно ошибка в Parent или Owner.
22 фев 21, 10:34    [22284641]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
Док
Member

Откуда: Казань
Сообщений: 6964
+
procedure TForm1.FormCreate(Sender: TObject);
begin
  FPgCtrl:= TPageControl.Create(Self);
  with FPgCtrl do
  begin
    Left:= 10;
    Top:= 10;
    width:= Self.Width - 10;
    Height:= Self.Height - 20;
    Parent:= TWinControl(Self);
    AddTabSheet;
    Page[0].Caption:= '0001';

    FBtn:= TButton.Create(Self);
    with FBtn do begin
      Parent:= TWinControl(Page[0]);
      Left:= 10;
      Top:= 10;
      Caption:= 'Button';
    end;

    AddTabSheet;
    Page[1].Caption:= '0002';
    fLbl:= TLabel.Create(Self);
    with fLbl do
    begin
      Parent:= TWinControl(Page[1]);
      Caption:= 'Label';
      Left:= 10;
      Top:= 10;
    end;

    AddTabSheet;
    Page[2].Caption:= '0003';

    fMemo:= TMemo.Create(Self);
    with fMemo do
    begin
      Parent:= TWinControl(Page[2]);
      Top:= 10;
      Left:= 10;
      Width:= 100;
      Height:= 100;
      Text:= 'memo';
    end;

    PageIndex:= 0;
  end;
end;                                      


К сообщению приложен файл. Размер - 31Kb
22 фев 21, 12:04    [22284667]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
L_argo,

они привязаны правильно, на всех TabSheet лежат также созданные или загруженные динамически компоненты.

ситуация такая,
после создания PC1
создаю TS1 parent = PC1
следующий шаг, создаю и накидываю компоненты на TS1, parent соответственно TS1 для компонентов

и так иду далее
TS2 parent = PC1
компоненты parent = TS2
TS3 parent = PC1
компоненты parent = TS3

закончил создавать вкладки и их содержимое.
программно иду на TS1, переключается заголовок вкладки PC1, я вижу активный TabSheet = TS1, а содержиое от TS3
по сути, когда делаем PС1.activepage = TS1, должно быть всё от TS1, но я вижу при активном TS1 содержимоей от TS3

есди я иду мышкой по TS, все отображается правильно, каждое содержимое отображается соответственно в своем TS
после того, как я покликал мышкой динамически PS.activepage = TS1 или PS.activepage = TS2 работаетработает безупречно.

что нужно сделать после создания PC1 и его TS, чтобы сразу после создания открыть нужный TS

ЗЗЗЗЗЗЗЫЫЫЫЫЫЫЫЫ:
на самом деле, код простой и старый, я его тупо взял из своего старого проекта, который был скомпилирован в CG2009, рабочая версия EXE файл есть и работает верно. но сейчас нет возможности все прогнать на CG2009, сейчас установлен XE Seattle, и вот на Seattle такая вот беда. PageControl это достаточно простой и стандартный компонент. разницу в исходном коде, что работало раньше и не работает сейчас не вижу, ее просто нет. код мой и все стандартно.
такое чувство, что какой то глюк. вкладка переключилась, а содержимое не перерисовалось.
22 фев 21, 12:12    [22284672]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6694
yemets63,

нда, это явно баг

что бы его обойти, попробуйте после создания выставить как ActivePage (или через ActivePageIndex) последнюю вкладку. А потом первую. Просто, что бы контрол по-настоящему переключился.
22 фев 21, 12:21    [22284674]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
Док,

PC создается статически всё прекрасно

PC создается динамически тоже всё прекрасно, но пока я не кликну мышкой по нему, содержимое вкладки не прорисовывается
остается последнее созданное

К сообщению приложен файл. Размер - 9Kb
22 фев 21, 12:27    [22284678]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
Кроик Семён,

я пробовал бегать динамически по всем вкладкам и делал REPAINT и REFRESH, без результатно.
пробовал просто по ActivePage ходить и переключать ActivePageIndex.

мышкой всё хорошо, динамически плохо.
но после того как я мышкой что то сделал, динамически тоже работает хорошо.
я как бы в Delphi со второй версии, уже не чайник, :), но может что то в Seattle добавлено такое, что надо дописывать, чего я не знаю.

"горит" поставить CG2009 и посмотреть, время нет.
22 фев 21, 12:32    [22284682]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1770
yemets63,

ты понимаешь, что херню несёшь? TPageControl существует уже сто лет, его используют миллиарды кодеров.
А проблемы только у тебя. Но код ты не показываешь.

procedure TForm1.Button1Click(Sender: TObject);

var
  fL1: TLabel;
  fL2: TLabel;
  fPC: TPageControl;
  fTS1: TTabSheet;
  fTS2: TTabSheet;
begin
  fPC := TPageControl.Create(self);
  fPC.Parent := Self;

  fTS1 := TTabSheet.Create(fPC);
  fTS2 := TTabSheet.Create(fPC);

  fTS1.PageControl := fPC;
  fTS2.PageControl := fPC;

  fTS1.Name := 'TS1';
  fTS2.Name := 'TS2';

  fL1 := TLabel.Create(fTS1);
  fL2 := TLabel.Create(fTS2);
  fL1.Parent := fTS1;
  fL2.Parent := fTS2;

  fL1.Name := 'L1';
  fL2.Name := 'L2';
  fL2.Left := fL1.Width * 2;


  fPC.ActivePageIndex := 0 // Показываем первый лист


К сообщению приложен файл. Размер - 3Kb
22 фев 21, 13:06    [22284704]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
ъъъъъ,

как грубо, где Вас так учили общаться?

код стандартный, просто все выгружается из базы, чессс слово вычищать базу не охота, чтобы показать почти тот же код, что и Вы прислали.

и так, очень странно,
но если динамически переключить вкладки, а не перейти на нужную, то содержимое TabSheet отображается правильно

  NewPC.ActivePageindex := NewPC.ActivePageindex + 1;
  NewPC.ActivePageindex := NewPC.ActivePageindex - 1;


просто
NewPC.ActivePageindex := 1 или 0 или 2 не дает ни какого эффекта, сама вкладка активная, а содержиое от последней созданной вкладки

P.S.
на статично созданном PC - ActivePageindex := 1 или 0 или 2 - работает.
22 фев 21, 13:14    [22284715]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1770
yemets63
вычищать базу не охота, чтобы показать почти тот же код

Ну и иди[те] в жопу.
22 фев 21, 13:15    [22284716]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
Док
Member

Откуда: Казань
Сообщений: 6964
yemets63
PC создается динамически тоже всё прекрасно, но пока я не кликну мышкой по нему, содержимое вкладки не прорисовывается
остается последнее созданное


речь не о базах, а о минимальном (воспроизводящем проблему) примере. Два тебе показали (на дельфях и лазаре). Дело за тобой
22 фев 21, 13:28    [22284722]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1387
кто спорит, предложенный текст стандартнее не бывает,
у меня МОЙ старый код написанный наверное году в 2001 работает, и конечно я его просто взял, а он ВОТ раз и не работет

и так CG2009 где я последний раз использовал этот код для динамических форм я не нашел, и ставить смысла нет. но я подключился к ПК с XE Berlin, собрал проект там, и вот результат

  NewPC.ActivePageindex := 0

В Берлине - работает В Сиэтле нет эффекта. переключение есть заголовка есть, содержимое не обновляется

  NewPC.ActivePageindex := NewPC.ActivePageindex + 1;
  NewPC.ActivePageindex := NewPC.ActivePageindex - 1;

В Берлине - работает В Сиэтле работет

P.S.
я не хочу грешить на Seattle, потому что так не должно быть, может сборка какая то битая. но брали с офф-сайта году в 2015. Support не покупали и обновления тоже.
но особо багов не было, хотя недавно были с CDS и Provider, сервер собирал тоже в Берлине.
22 фев 21, 13:46    [22284732]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1770
yemets63,

что ты хочешь, конкретно?
22 фев 21, 14:03    [22284738]     Ответить | Цитировать Сообщить модератору
 Re: динамически созданный PageControl не обновляет содержимое TabSheet  [new]
Док
Member

Откуда: Казань
Сообщений: 6964
ъъъъъ,

думать наверное не хочет. Ему проще другим моск кушать, чем самому 15 строк кода написать
24 фев 21, 13:48    [22285668]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить