Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
66 / 9 / 4
Регистрация: 09.01.2018
Сообщений: 280

Не прорисовывается TabSheet при смене PageControl.ActivePage

01.05.2025, 11:44. Показов 1351. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Странное поведение... Везде ответ на смену закладок - PageControl1.ActivePage := TabSheet3. Но не работает.
Есть pcMain: TPageControl с единственным tsAll: TTabSheet. с кэпшен Общая, на котором tsAll: TMemo.
При старте приложения в него динамически добавляются закладки tsAdapter[i]: TTabSheet , на которые размещается meAdapter[i]: TMemo. В конце этого процесса пытаюсь выставить активной первоначальную закладку - этого не происходит.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 
  for i := 0 to Adapters.Count-1 do begon
    tsAdapter[i] := TTabSheet.Create(pgStatist);
    tsAdapter[i].PageControl := pgStatist;
    tsAdapter[i].Caption := IntToStr(i+1);
    meAdapter[i] := TMemo.Create(tsAdapter[i]);
    tsAdapter[i].InsertControl(meAdapter[i]);
    meAdapter[i].Align := alClient;
    meAdapter[i].Text := cLines + #13#10 + IntToStr(i+1);;
    meAdapter[i].Font.Name := 'Courier New';
    meAdapter[i].Font.Size := 10;
  end;
  pgStatist.ActivePage := tsAll;
  pgStatist.Repaint;
Результат:
1. Если добавить на OnActivate - pgStatist.SetFocus, то видно, что фокус там где нужно и "квадрат фокуса" обрамляет заголовок нужной закладки - Общая.
2. На самом pgStatist видно последнее сгенеренное TMemo (это видно потому что meAdapter[i].Text := cLines + #13#10 + IntToStr(i+1)
3) Нужное достигается щелчками мыши по любой (кроме первой) закладке, а потом - на первой.

Что не так - ума не приложу. Подскажите, пожалуйста.

Добавлено через 2 часа 21 минуту
Методом научного тыка нашел решение:
Delphi
1
2
3
4
    meAdapter[i].Font.Size := 10;
  end;
  pgStatist.ActivePage := tsAll;
  meAll.BringToFront; //  <------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.05.2025, 11:44
Ответы с готовыми решениями:

Как задать tabsheet в pagecontrol, который будет открываться при запуске приложения?
У меня есть pagecontrol в нем 5 tabsheet, как сделать, чтобы при запуске программы по умолчанию...

Наглядная блокировка листов TabSheet на PageControl
Как заблокировать лист и наглядно это показать, а то если Enabled установить в true, непонятно что...

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

5
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
01.05.2025, 12:04
В Delphi 7 и активации не требуется - при добавлении новых страниц активная страница не меняется. В новых версиях поведение изменилось?
0
66 / 9 / 4
Регистрация: 09.01.2018
Сообщений: 280
01.05.2025, 21:07  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
В новых версиях поведение изменилось?
У меня Д7 и поведение как раз то, как я описал. Активная - последне добавленная.
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
01.05.2025, 22:48
vpivo, тогда, весь проект в студию, так как, я пробовал именно код из первого сообщения и всё работает, как я описал.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
02.05.2025, 01:53
Лично меня при первом взгляде на код смущает использование метода InsertControl. Ибо ещё в стародавние времена написано было в хэлпе:
"Applications should not need to call InsertControl directly. Child controls are automatically inserted and removed when added or deleted at design time. At runtime, use the Parent property of the child control to insert it in the Controls array."
0
66 / 9 / 4
Регистрация: 09.01.2018
Сообщений: 280
02.05.2025, 04:29  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
смущает использование метода InsertControl
Просто посмотрите исходный код, а потом свойство Parent... Нашли разницу? Те же ..., только в профиль, с вызовом InsertControl.

Добавлено через 20 минут
Цитата Сообщение от AzAtom Посмотреть сообщение
весь проект в студию
На голом проекте такого эффекта нет. Сам проект достаточно объемный, права на него не мои - заказчика.
Но Вы правы, сам напортачил.
Позже идет обращение к аппаратному обеспечению (те самые 8 закладок - их "морда"), при этом проверяется их работоспособность, с визуализацией или нет в TPageControl... Состав может меняться, в том числе и по ходу работы, но максимум в наборе есть, поэтому генерится максимальное количество "морд".
Delphi
1
tsAdapter[i].Visible := Adapter[i].Ready;
А должно быть
Delphi
1
tsAdapter[i].TabVisible := Adapter[i].Ready;
Всем поучаствовавшим огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2025, 04:29
Помогаю со студенческими работами здесь

PageControl и TabSheet
PageControl1.TabSheet6.Visible=false; Подскажите, пожалуйста, как сделать правильно? Добавлено...

Image поверх tabsheet на pagecontrol
Подскажите пожалуйста как поместить имейдж на вкладку пажеконтрол?

Элемент сверху TabSheet(PageControl)
Ставлю DBGrid сверху TabSheet1, но и в других вкладках(TabSheet2, 3...) она присутствует. Как...

PAgeControl: как изменить цвет TabSheet?
(delphi 11) PageControl как изменить цвет TabSheet подскажите пожалуйста..

Не могу переименовать строку в ActivePage
Так как первый раз работаю в делфи, возникла проблема с изменением названия в инспекторе объекта в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru