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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2009, 17:30   #1
mauar
Пользователь
 
Регистрация: 05.05.2008
Сообщений: 27
Смущение Типы данных стандартного класса

При создании формы и добавлении новых компонентов delphi автоматически создает поля главного класса формы.
Код:
type
  TForm1 = class(TForm)
    AdvOfficeRadioButton1 : TAdvOfficeRadioButton;
    AdvOfficeRadioButton2 : TAdvOfficeRadioButton;
    AdvOfficeRadioButton3 : TAdvOfficeRadioButton;
    AdvOfficeRadioButton4 : TAdvOfficeRadioButton;
    AdvOfficeRadioButton5 : TAdvOfficeRadioButton;
    AdvOfficeRadioButton6 : TAdvOfficeRadioButton;
    .. и так 85 штук ...
    AdvOfficeRadioButton85 : TAdvOfficeRadioButton;
У меня на форме расположенно 85 радио кнопок, мне нужно сделать у все этих 85 радиокнопок отключить свойство Visible оно должно быть False , но программным методом, чтобы не расписывать на 100 строк кода типа:
AdvOfficeRadioButton1.Visible := false;
Я хочу сделать подтип этого класса, или описать множества или массив этого Класса с этими кнопками
Для примера, создаю новый тип, или подтип или тип массивов:

1-й вариант (диапазон):
Код:
type 
 TMyType =  AdvOfficeRadioButton1 .. AdvOfficeRadioButton85;
2-й вариант (множества):
Код:
 TMyType =  set of AdvOfficeRadioButton1 .. AdvOfficeRadioButton85;
3-й вариант (массив):
Код:
TMyType =  array [AdvOfficeRadioButton1 .. AdvOfficeRadioButton85] 
                                                                    of :TForm1;
4-й вариант (подтип на основе собственного типа):
Код:
TMyType  =  set of TForm1;
   TMyType = (AdvOfficeRadioButton1 .. AdvOfficeRadioButton85);
В общем ни один из этих вариантов, в большом количестве перепробованных мной вариаций так и не заработал. Как мне описать
диапазон этих радиокнопок, либо через тип, либо через массив, либо моет через переменную )) ?

Последний раз редактировалось mauar; 23.05.2009 в 17:43.
mauar вне форума Ответить с цитированием
Старый 23.05.2009, 17:36   #2
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Можно положить их всех на TPanel и менять Visible у неё.
Или так не интересно?
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 23.05.2009, 17:40   #3
mauar
Пользователь
 
Регистрация: 05.05.2008
Сообщений: 27
По умолчанию

Так не получиться они все в разных местах, в основном это компонент PageControl. Вопрос ещё открыт, кстати вещь интерессная, я с ней весь день ковыряюсь.
mauar вне форума Ответить с цитированием
Старый 23.05.2009, 17:46   #4
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

а если обратится по Handl'у к каждой в цикле?
Mikhail Bakurov вне форума Ответить с цитированием
Старый 23.05.2009, 17:51   #5
mauar
Пользователь
 
Регистрация: 05.05.2008
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Mikhail Bakurov Посмотреть сообщение
а если обратится по Handl'у к каждой в цикле?
Интерессно, через for и как там счетчик задать? А как Вы это себе представляете? Там ещё процесса много занимать начнет.
mauar вне форума Ответить с цитированием
Старый 23.05.2009, 17:54   #6
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

через
Код:
repeat***until h = 0
h: HWND
Насчет много занимать, не знаю, API функции работают очень быстро
Mikhail Bakurov вне форума Ответить с цитированием
Старый 23.05.2009, 17:54   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Если немного переделать код Sazary, который он приводил здесь на форуме (который я нашел по поиску на этом форуме), то можно попробовать так :
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  t : TComponent;
begin
  for i:=1 to 85 do
    begin
    t := FindComponent('AdvOfficeRadioButton'+IntToStr(i));
    TAdvOfficeRadioButton(t).Visible := false;
    end;
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 23.05.2009, 18:05   #8
mauar
Пользователь
 
Регистрация: 05.05.2008
Сообщений: 27
По умолчанию

Mikhail Bakurov, Kotofff, evg_m Спасибо, работает!

Последний раз редактировалось mauar; 23.05.2009 в 18:10.
mauar вне форума Ответить с цитированием
Старый 23.05.2009, 18:06   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for j:=0 to self.componentcount-1 do
  if self.component{j].inherited(Tradiobutton) then
     tradiobutton(self.component{j]).visible:=false;
//будет работать даже если их станет >85
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.05.2009, 18:21   #10
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Ну тогда можно и вот так, только это будет действовать на все RadioButton'ы у всех дочерних компонентов:
Код:
procedure ShowRadioButtons(Show: Boolean; Parent: TWinControl);
var
  I: Integer;
begin
  for I := 0 to Parent.ControlCount - 1 do
    if Parent.Controls[I] is TRadioButton then
      Parent.Controls[I].Visible := Show
    else
      if Parent.Controls[I] is TWinControl then
        ShowRadioButtons(Show, TWinControl(Parent.Controls[I]));
end;
Использование:
Код:
ShowRadioButtons(True, PageControl1);
-Скроет вообще все радио кнопки.
Until The End Of Time
Showy вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить типы данных Detka Помощь студентам 7 11.02.2009 17:13
Типы данных nedden Помощь студентам 2 12.11.2008 17:18
Типы данных??? Рустам Общие вопросы Delphi 10 08.11.2007 08:03
Про типы данных Smorodin Общие вопросы .NET 1 02.10.2007 15:40