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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, что лежит на TPanel? 
V
    Опции темы
BDmV
  Дата 5.11.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



На объекте Panel1 лежит куча Label'ов и Edit'ов  необходимо у них менять свойство Enable.
Сейчас я это делаю с вомощью следующего кода:
Код

Procedure TForm1.SetForm(Action:boolean);
var t:byte;
begin
   for t:=0 to Panel1.Owner.ComponentCount-1 do
     begin
        if (Panel1.Owner.Components[t] is TLabel) then
         (Panel1.Owner.Components[t] as TLabel).Enabled:=Action;
        if (Panel1.Owner.Components[t] is TEdit) then
         (Panel1.Owner.Components[t] as TEdit).Enabled:=Action;
     end;
end;

но насколько я понимаю, здесь я меняю свойство у всех подобных объектов на всей форме. :( т.е. если на Panel2 появится Label35, то его Enable тоже изменится, а мне нужно менять только на Panel1.
Подскажите, как это можно сделать?

PS. Panel1.ComponentCount возвращает 0, хотя на этой панельке, как я уже говорил, накидано много всего.
PM MAIL   Вверх
morpheyushka
Дата 5.11.2008, 17:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



Цитата(BDmV @  5.11.2008,  16:46 Найти цитируемый пост)
Подскажите, как это можно сделать?

PS. Panel1.ComponentCount возвращает 0, хотя на этой панельке, как я уже говорил, накидано много всего. 

А количество всех компонент статическое, то есть в процессе выполнения программы новые не появляются?

Если так - ты всегда можешь обращаться к нужным по имени
Код

Form1.Label1.Enabled := Action

Может это и не корректно, но точно не промажешь мимо цели smile 


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
ekianu
Дата 5.11.2008, 21:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

Procedure TForm1.SetForm(Action:boolean);
var
  t: Integer;
  tmpComponent: TComponent;
begin
  for t:=0 to Panel1.Owner.ComponentCount-1 do
  begin
    tmpComponent := Panel1.Owner.Components[t];
    if tmpComponent.GetParentComponent.Name = 'Panel1' then
    begin
      if (tmpComponent is TLabel) then
        (tmpComponent as TLabel).Enabled:=Action;
      if (tmpComponent is TEdit) then
        (tmpComponent as TEdit).Enabled:=Action;
    end;
  end;
end;


PM MAIL Skype   Вверх
Poseidon
Дата 6.11.2008, 09:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(BDmV @  5.11.2008,  16:46 Найти цитируемый пост)
PS. Panel1.ComponentCount возвращает 0
Используй ControlCount.

Я бы сделал так:
Код

Procedure SetForm(Panel: TPanel; Action: boolean);
var 
  t: byte;
begin
  for t:= 0 to Panel.ControlCount-1 do
  begin
    if (Panel.Controls[t] is TLabel) then
       (Panel.Controls[t] as TLabel).Enabled:= Action;

    if (Panel.Controls[t] is TEdit) then
       (Panel.Controls[t] as TEdit).Enabled:= Action;
  end;
end;




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
THandle
Дата 6.11.2008, 10:05 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Poseidon, я бы укоротил код как-нибудь вот так:

Код

procedure SetForm(Panel: TCustomPanel; Action: Boolean);
var
  I: Integer;
begin
  for  I := 0 to Panel.ControlCount - 1 do
    if ((Panel.Controls[I] is TLabel) or (Panel.Controls[I] is TEdit)) then
      TControl(Panel.Controls[I]).Enabled := Action;
end;

PM   Вверх
morpheyushka
Дата 6.11.2008, 10:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



А при приведенном коде все Edit и Label не получат значение Action в Enabled?


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
pseud
Дата 6.11.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



morpheyushka, читай
Цитата(BDmV @  5.11.2008,  16:46 Найти цитируемый пост)
 а мне нужно менять только на Panel1.


THandle, идеально.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
BDmV
Дата 6.11.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем ОГРОМНОЕ СПАСИБО за помощь. 
Это именно, то что надо....

2morpheyushka, если 1 или 2 Label и Edit, то можно и непосредственно обратиться, а если их намного больше, то хоть и статические они, но всёравно влом заниматься их перечислением и пытаться не забыть добавить в эту процедурку то что приходит на ум во время дописывания программы.

В любом случае цыклом красивше выглядит и меньше писать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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