Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обращение к объектам по именни. [D7, WinXP]


Страницы:   1 2

Гость ©   (2008-03-31 08:26:00) 

Возможно ли обращатся к объектам примерно так:
for i:=1 to 100 do
button[i].visible:=false;


Оригинал   (2008-04-01 00:50:00) [1]


> {RASkov} ©   (31.03.08 22:59) [31]
> > [30] Leonid Troyanovsky ©   (31.03.08 22:39)
> > Дык, список уже сгруппирован, общим парентом
>
> А я как раз про то, что например 10 кнопок на одной общей
> панели, где 2 группы кнопок по 5 штук... или пять групп
> по 2 штуки :)


Или группа из 3-х кнопок из 10 на общей панели.


{RASkov}   (2008-03-31 22:59:00) [2]

> [30] Leonid Troyanovsky ©   (31.03.08 22:39)
> Дык, список уже сгруппирован, общим парентом

А я как раз про то, что например 10 кнопок на одной общей панели, где 2 группы кнопок по 5 штук... или пять групп по 2 штуки :)


Leonid Troyanovsky   (2008-03-31 22:39:00) [3]


> {RASkov} ©   (31.03.08 18:53) [28]

> Причем вариант относительно не плох, так как есть возможность
> сгруппировать объекты на общем родителе...
> Можно конечно же их групировку организовать Тэгами там всякими,
>  или еще как, но массив(или список) тоже не плохо, имхо.

Дык, список уже сгруппирован, общим парентом ;)

--
Regards, LVT.


Kolan   (2008-03-31 19:00:00) [4]

> потому что по-другому не умеешь

Конечно, я не умею вместо
(Components[I] as TButton).Visible
написать
TButton(Components[I]).Visible

это для меня слишком.

По сабжу, я бы сделал потомка кнопки, с двумя полями XY и создавал бы его (все равно динамически кнопки генерить).

XY заполнялись бы при создании.

При клике на такой кнопке, извлеч её «координаты» проще простого.


{RASkov}   (2008-03-31 18:53:00) [5]

> [27] Leonid Troyanovsky ©   (31.03.08 17:51)
> Снова здарова ;)

Привет:)

> Есть уже такой - Controls.

Есть-то оно есть, и ни я и никто его не отменял... просто Сергей М. предложил как вариант... а я вот тут взялся на свою голову разжовывать :)
Причем вариант относительно не плох, так как есть возможность сгруппировать объекты на общем родителе...
Можно конечно же их групировку организовать Тэгами там всякими, или еще как, но массив(или список) тоже не плохо, имхо.

> Как, собс-но, и за Screen.Forms

Кстати, это хоть из другой оперы, но более подходит в той "опере" :)
Опять же, если только при единичном существовании формы.)
Можно конечно и считать кол-во нужных форм в общем списке.... в общем это уже не по этой теме... сорри..)


Leonid Troyanovsky   (2008-03-31 17:51:00) [6]


> {RASkov} ©   (31.03.08 16:48) [26]

> - нужно еще и занести объекты в массив. т.е. нечто так:

Снова здарова ;) Есть уже такой - Controls.

Hint: за валидностью элементов оного списка уже следят.
Как, собс-но, и за Screen.Forms

--
Regards, LVT.


{RASkov}   (2008-03-31 16:48:00) [7]

> Гость

Только перед этим:

> ArrButt[2,3].Visible:=False;

но после этого:

> SetLength(ArrButt, 5, 5);

(в принципе можно использовать и статический массив, тогда это(SetLength) не нужно будет)

- нужно еще и занести объекты в массив. т.е. нечто так: ArrButt[0,0]:=button1; и т.д.


Оригинал   (2008-03-31 16:34:00) [8]


> Плохиш ©   (31.03.08 15:25) [23]
>
> > Kolan ©   (31.03.08 15:12) [21]
> > > Если проверка is прошла, то прямое приведение достаточно…
> >
> > Шас лень рыться в справке по as… Я всегда делаю так, но
>
> > уже не помню точно почему это хорошо :).
> >
> > Но вот первое попавшееся из Controls.pas:
>
> Это из серии "В огороде бузина, а в Киеве дядька".
>
> PS. Твоё домашнее задание, узнать почему приведённый тобой
> кусок и близко не подходит к тому высказыванию, которое
> ты пытаешься опровергнуть.


Лучше объяснить, чем отличается приведение class(Object) от (Object as class), чем менторством заниматься.

class(Object)- прямое приведение типа. обращение к объекту происходит как к объекту класса class

(Object as class)- в этом случае приведение происходит после проверки, является ли объект класса class, его наследником или nil.
В случае отрицательной проверки поднимается исключение.


Игорь Шевченко   (2008-03-31 15:25:00) [9]


> Я всегда делаю так, но уже не помню точно почему это хорошо


потому что по-другому не умеешь


Плохиш   (2008-03-31 15:25:00) [10]


> Kolan ©   (31.03.08 15:12) [21]
> > Если проверка is прошла, то прямое приведение достаточно…
>
> Шас лень рыться в справке по as… Я всегда делаю так, но
> уже не помню точно почему это хорошо :).
>
> Но вот первое попавшееся из Controls.pas:

Это из серии "В огороде бузина, а в Киеве дядька".

PS. Твоё домашнее задание, узнать почему приведённый тобой кусок и близко не подходит к тому высказыванию, которое ты пытаешься опровергнуть.


Palladin   (2008-03-31 15:21:00) [11]

Здесь это оправдано страховкой от отключения сокращенных вычислений булевых выражений и в пользу лаконичности кода. Тогда как в
If (obj is TSomeClass) Then TSomeClass(obj)

выглядит куда лаконичней и работает куда оптимизированей


Kolan   (2008-03-31 15:12:00) [12]

> Если проверка is прошла, то прямое приведение достаточно…

Шас лень рыться в справке по as… Я всегда делаю так, но уже не помню точно почему это хорошо :).

Но вот первое попавшееся из Controls.pas:
function TControlActionLink.IsPopupMenuLinked: Boolean;
begin
 Result := (Action is TCustomControlAction) and
   (FClient.PopupMenu = (Action as TCustomControlAction).PopupMenu);
end;


{RASkov}   (2008-03-31 14:43:00) [13]

> или я неправильно

т.е. не неправильно, а недопонял)


{RASkov}   (2008-03-31 14:41:00) [14]

> [17] Гость   (31.03.08 14:30)
> как создать такой масив?

type TArrButt = array of array of TButton;
var ArrButt: TArrButt;
..................
begin
 SetLength(ArrButt, 5, 5);
...

begin
 ArrButt[2,3].Visible:=False;

В принципе и одномерного массива для этой задачи хватит, или я неправильно понял [14] (


> [18] Kolan ©   (31.03.08 14:31)
> Ты по это? TButton(Components[I])

нет смысла asиспользовать на пару с is... Если проверка is прошла, то прямое приведение достаточно...


Kolan   (2008-03-31 14:31:00) [15]

> AS приводит к повторной проверке.

Ты по это? TButton(Components[I])


Гость   (2008-03-31 14:30:00) [16]


> Имена для этой цели нафиг не нужны, достаточно организовать
> двумерный массив объектов-кнопок.

я довольнотаки недавно в программировании и много не знаю..а как создать такой масив? или хоть литературку посаветуйте а то я тока о базах в основном чтил.


Palladin   (2008-03-31 14:24:00) [17]


> Гость   (31.03.08 14:09) [13]

по имени


Reindeer Moss Eater   (2008-03-31 14:22:00) [18]

Это обращение по индексу или по имени?

Это не обращение вообще. Это желаемый псевдокод.


Сергей М.   (2008-03-31 14:15:00) [19]


> кнопки названы H1-H25


Имена для этой цели нафиг не нужны, достаточно организовать двумерный массив объектов-кнопок.


Гость   (2008-03-31 14:09:00) [20]

Допустим простая игра на интуицию поле 5 на 5 (25 кнопок). пользователь тыкает одну после чего комп рандомно выбирает из этих 25 одну и меняет ее цвет.кнопки названы H1-H25.
S11click....
begin
i:=
s:='H'+inttostr(random(25));
Объектпод именем(s).color:=red;
end;
Это обращение по индексу или по имени?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо