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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Индексы компонента внутри компонентов контейнеров 
V
    Опции темы
PsiMagistr
Дата 19.1.2012, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ребята, в процессе игроделания возник следующий вопрос:

На форме есть  пустой компонент-контейнер класса  TPanel

Помещаю туда с панели компонентов  кнопочку...

Чему равен ее ComponentIndex?

По наивности я считал 0, поскольку это первый компонент на панели... (Номера начинаются с нуля)

Увы это не так.  Единица.

Я поместил еще одну панель и кнопку сверху  у нее индекс вообще оказался 3...

Как я понимаю, Дельфи произвольно выбирает эти индексы.

А вот если компоненты рождать на панели динамически, (Create) то все выходит строго по порядку...

В чем тут заковыка?

СПасибо огромное за ответ.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Snowy
Дата 19.1.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



ComponentIndex - индекс компонента на форме.
Соответственно у панели 1 -0, кнопка -1, вторая панель - 2, вторая кнопка 3.
Контролы считаются от Parent, компоненты от Owner.
При создании в рантайм, ты можешь назначить owner'ом любой контрол.
В дизайнтайме овнером всегда является форма.
Соответственно для перебора контролов на панели нужно использовать свойство Controls панели.
PM MAIL   Вверх
PsiMagistr
Дата 19.1.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ComponentIndex - индекс компонента на форме.


Snowy

Выручил... 

Спасибо.

И где мне найти ControlIndex, сколько не искал нет такого...


И я то дубина, полагал, что Owner панель а не форма...

Это сообщение отредактировал(а) PsiMagistr - 19.1.2012, 15:20


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Snowy
Дата 19.1.2012, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Такого нет.
А в нём есть необходимость?
Ты всегда можешь перебрать все контролы на панели и сравнить их с нужным.
Или же просто прописать нужный идентификатор в Tag.
Зависит от цели.
PM MAIL   Вверх
PsiMagistr
Дата 19.1.2012, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Snowy

А если динамически рождать и делать Ownerom Панель... или лучше не надо?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Snowy
Дата 19.1.2012, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



А смысл? Для каких целей тебе понадобился индекс контрола?
Наверняка можно прекрасно обойтись без него.
PM MAIL   Вверх
БелАмор
Дата 19.1.2012, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(PsiMagistr @  19.1.2012,  15:18 Найти цитируемый пост)
ComponentIndex - индекс компонента на форме.

Не на форме, а в списке Components владельца. В большинстве случаев владельцем (Owner) действительно является форма (для помещённых в дизайнере - всегда), но это совершенно не обязательно. Для создаваемых самостоятельно компонентов владелец может быть назначен произвольно, и даже не назначен вовсе: Create(nil).

Цитата(PsiMagistr @  19.1.2012,  15:18 Найти цитируемый пост)
И я то дубина, полагал, что Owner панель а не форма...

Назначите - будет.

Цитата(PsiMagistr @  19.1.2012,  15:22 Найти цитируемый пост)
А если динамически рождать и делать Ownerom Панель... или лучше не надо?

Это не критично, но лучше - форму. По этому поводу я немного писал здесь (02-07-2009 17:33):
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=71499

Для исследования тонкостей, связанных с Components и Controls, может оказаться полезным код:

Debug_Utils.pas
Код
unit Debug_Utils;

interface

uses Controls, SysUtils, Dialogs, Classes;

procedure ShowControls(AWinControl: TWinControl);
procedure ShowComponents(AComponent: TComponent);

implementation

function GetTypeInfo(AComponent: TComponent): String;
begin
  Result := AComponent.ClassName + ', насл. ';
  if AComponent is TWinControl then
    Result := Result + 'TWinControl'
  else
    if AComponent is TControl then
      Result := Result + 'TControl'
    else
      Result := Result + 'TComponent, невизуальный';
end;

procedure ShowControls(AWinControl: TWinControl);
var
  i: Integer;
  S: String;
begin
  S := AWinControl.Name + '.Controls'#13#10#13#10;
  for i := 0 to AWinControl.ControlCount-1 do
  begin
    S := S + Format('%d - %-20s '#9'%s'#13#10,
      [i, AWinControl.Controls[i].Name, GetTypeInfo(AWinControl.Controls[i])]);
  end;
  ShowMessage(S);
end;

procedure ShowComponents(AComponent: TComponent);
var
  i: Integer;
  S: String;
begin
  S := AComponent.Name + '.Components'#13#10#13#10;
  for i := 0 to AComponent.ComponentCount-1 do
  begin
    S := S + Format('%d - %-20s '#9'%s'#13#10,
      [i, AComponent.Components[i].Name, GetTypeInfo(AComponent.Components[i])]);
  end;
  ShowMessage(S);
end;

end.


Где-нибудь в уголке формы помещаете спидбаттоны, по которым вызываете нужную процедуру, указывая в качестве параметра нужную панель или Self для формы, и смотрите что там получилось.

Добавлено через 8 минут и 25 секунд
На всякий случай: глядя на работу с Result в приведённом коде, думаю нелишним будет привести ссылку на статью:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1435

PM   Вверх
PsiMagistr
Дата 27.1.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Благодарю Вас.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
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.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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