Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2023, 15:03   #1
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию Отключить все компоненты на Panel

Здравствуйте,

Не могу понять где ошибся, подскажите где, есть панель, хотел отключить все компоненты на панели, на панели есть GroupBox, соответственно в них тоже нужно отключить компоненты.
В чём собственно ошибка, цикл проходит 1 раз и всё.
Если второй цикл удалить, то цикл работает правильно.

Код:
 for i:=0 to Form1.Panel4.ControlCount-1 do begin
 (Form1.Panel4.Controls[i]).Enabled:=false;
    while j<>(Form1.FindComponent(Form1.Panel4.Controls[i].Name) as TGroupBox).ControlCount-1 do begin
    ((Form1.FindComponent(Form1.Panel4.Controls[i].Name) as TGroupBox).Controls[j]).Enabled:=false;
    inc(j);
    end;
 end;
Вложенный цикл пробовал и for и т.д., результат один.
Заранее спасибо за любую помощь.

P.S. ранее я это делал, но сейчас где то допустил ошибку.

Последний раз редактировалось cybernewbie; 26.01.2023 в 16:01.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 15:49   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А чему равно j при первом входе в цикл while?
Почему во внутреннем цикле инкрементируется j1?
macomics вне форума Ответить с цитированием
Старый 26.01.2023, 15:59   #3
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
А чему равно j при первом входе в цикл while?
Равно 0.
Цитата:
Сообщение от macomics Посмотреть сообщение
Почему во внутреннем цикле инкрементируется j1?
Редактировал прямо тут, ошибся, поправил в 1 сообщении.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 16:15   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда такой вопрос. Разве циклы должны быть вложенные? По логике вы ищите в первом i для TGroupBox, а во втором перечисляете все j принадлежащие этой TGroupBox. Но при втором проходе j уже будет вне диапазона.
macomics вне форума Ответить с цитированием
Старый 26.01.2023, 16:35   #5
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Тогда такой вопрос. Разве циклы должны быть вложенные? По логике вы ищите в первом i для TGroupBox, а во втором перечисляете все j принадлежащие этой TGroupBox. Но при втором проходе j уже будет вне диапазона.
У меня просто не один групповой компонент, например несколько GroupBox, также есть ещё и другие компоненты.
По идее 1 цикл ищет компонент;
2 цикл ищет все компоненты внутри компоненты i.
Далее процесс повторяется.
Хотя я допустил ошибки:
1. Controls отсчитывается судя по всему от 1.
2. Второй цикл например имеет вхождение класс которого отличен от TGroupBox, т.е. нужна проверка на соответствие класса.
Код:
j:=1;
 for i:=0 to Form1.Panel1.ControlCount-1 do begin
 (Form1.Panel1.Controls[i]).Enabled:=false;
  if Form1.Panel1.Controls[i].ClassType = TGroupBox then
    while j<>(Form1.FindComponent(Form1.Panel1.Controls[i].Name) as TGroupBox).ControlCount do begin
    ((Form1.FindComponent(Form1.Panel1.Controls[i].Name) as TGroupBox).Controls[j]).Enabled:=false;
    inc(j);
    end;
 end;
Но не всё отключает, например label активен.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 16:40   #6
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Думал попробовать так:
Код:
while j<>(FindComponent(Panel1.Controls[i].Name) as Panel1.Controls[i].ClassType).ControlCount do begin
Выдаёт ошибку, хотя я просто заменил класс: TGroupBox
На: Panel1.Controls[i].ClassType

Тогда бы и проверка не понадобилась, да ещё и другие групповые компоненты бы отключались, например такие как panel и т.д.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 16:42   #7
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
По логике вы ищите в первом i для TGroupBox, а во втором перечисляете все j принадлежащие этой TGroupBox
т.е. в "i" ищу компонент, в том числе и GroupBox, в "j" ищу другие компоненты внутри компоненты GroupBox, задумка была такой

Последний раз редактировалось cybernewbie; 26.01.2023 в 16:47.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 16:47   #8
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цикл уже проходит полностью, но выключает не все компоненты. Label активен.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 16:52   #9
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Первый цикл, ищет все компоненты на Panel;
Второй цикл ищет компоненты внутри групповых компонент.
Всё что нашлось, отключается.
cybernewbie вне форума Ответить с цитированием
Старый 26.01.2023, 17:09   #10
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Получилось
cybernewbie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти и отключить выполнение анимации текста JS - отключить анимацию появления текста - Nivo Slider, модуль OC Slide show OmegaBerkut JavaScript, Ajax 2 21.12.2019 02:58
Помогите найти компоненты - Предлагаю сюда выкладывать различные компоненты для delphi. Deight Компоненты Delphi 79 17.09.2017 19:39
компонент Panel C++++ Помощь студентам 2 17.06.2014 09:44
Panel начинающий1 Компоненты Delphi 6 15.10.2009 13:58