Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рефлекшн (однотипные действия для объектов), или как спрятать все объекты на форме 
:(
    Опции темы
Teoden
Дата 2.10.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



Вобще задача довольно простая. Необходимо спрятать все объекты (картинки, кнопки и т.д) расположенные на форме.
Самый простой метод это просто сделать:
Код

Form1.Image1.Visible := false;
Form1.Image2.Visible := false;
Form1.Label1.Visible := false;
Form1.Label2.Visible := false;
//и т.д. для всех объектов на форме

Но если объектов много?

Второй способ, который значительно укорачивает код это для каждого объекта проверять его принадлежность:
Код

for i := 0 to Form1.ComponentsCount-1 do
begin
  try (Form1.Components[i] as TLabel).Visible := False; except end;
  try (Form1.Components[i] as TImage).Visible := False; except end;
  try (Form1.Components[i] as TButton).Visible := False; except end;
  //и т.д. для каждого типа компонента присутствующего на форме
end;


А теперь вопрос к знатокам: Как и можно ли сделать то же самое с помощью рефлекшн в паскале? По идее это выглядело бы примерно так:
Код

for i := 0 to Form1.ComponentsCount-1 do
begin
  Form1.Invoke(Form1.Components[i]+'.Visible') := true;
end;

Но метод Invoke в паскале в отличии от других языков требует кучу параметров. Хелп по методу Invoke в делфи мне не помог. Помогите разобраться. Или объяните использование Invoke на примере.
PM MAIL   Вверх
maxim1000
Дата 2.10.2007, 18:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 4
Всего: 110



Visible - свойство TControl
потому достаточно пройтись по компонентам, для каждого проверить, наследуется ли он от TControl и, если да, установить ему Visible в false...


--------------------
qqq
PM WWW   Вверх
bems
Дата 2.10.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(maxim1000 @  2.10.2007,  18:10 Найти цитируемый пост)
пройтись по компонентам
пройтись по controls[] и ничего не проверять

Код

for i:=0 to Form1.ControlCount-1 do Form1.Controls[i].Hide;


Это сообщение отредактировал(а) bems - 2.10.2007, 19:07


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Virtuals
Дата 3.10.2007, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 3
Всего: 11



 smile 
а не проще на форму пооложить TPanel и уже на них все остальное

потом
Panel1.Visible:=false;

ЗЫ к тому-же TPanel может быть не один, и выключать их блоками
PM MAIL ICQ   Вверх
Alexeis
Дата 3.10.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Virtuals @  3.10.2007,  08:01 Найти цитируемый пост)
а не проще на форму пооложить TPanel и уже на них все остальное

  Или поместить все на фрейм, и действовать аналогично.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
DonPager
Дата 3.10.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



У меня задача была спрятать много наследников панели и я делал так
Код

Panel.enabled := false;
for i:=0 to Panel.ControlCount -1 do Panel.Controls[i].Visible := Panel.enabled;

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


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.