Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.27;
Скачать: CL | DM;

Вниз

Обращение к объектам по именни.   Найти похожие ветки 

 
Гость   (2008-03-31 08:26) [0]

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


 
YurikGL ©   (2008-03-31 08:31) [1]

1) Создать массив из TButton
2) FindComponent (button+IntToStr(i)) (вроде так было)


 
brother   (2008-03-31 09:21) [2]


> 1) Создать массив из TButton
> 2) FindComponent (button+IntToStr(i)) (вроде так было)

а не "button"+IntToStr(i))   ?


 
Kolan ©   (2008-03-31 09:24) [3]

> Возможно ли обращатся к объектам примерно так:

for I := 0 to ComponentCount — 1 do
 if Components[I] is TButton then
   (Components[I] as TButton).Visible := False;


 
YurikGL ©   (2008-03-31 09:37) [4]


> а не "button"+IntToStr(i))   ?

Так правильней :))


 
Reindeer Moss Eater ©   (2008-03-31 09:46) [5]

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

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


Это не по имени.


 
Семеныч   (2008-03-31 11:45) [6]

> Kolan ©   (31.03.08 09:24) [3]

AS приводит к повторной проверке. Она не дает ничего, кроме ненужных потерь.


 
Palladin ©   (2008-03-31 11:56) [7]


> Семеныч   (31.03.08 11:45) [6]

я ему уже говорил :) видимо подзабыл... :)


 
Гость   (2008-03-31 13:52) [8]


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

Почему собственно нет?
бутону любое имя мона задать например
for i:=1 to 100 do
 knopka[i].visible:=false


 
Reindeer Moss Eater ©   (2008-03-31 13:54) [9]

knopka[i].visible:=false

И где здесь "по имени"?
Здесь по индексу.


 
Гость   (2008-03-31 13:57) [10]

Пример условный. мне просто было интерестно можно ли обращатся к объектам сгнерироваными именами типа
s:= некоторые вычисления.
объект(s).color := red .


 
Reindeer Moss Eater ©   (2008-03-31 13:58) [11]

где ты увидел сгенерированные имена?
ты увидел сгенерированные индексы массива.


 
Reindeer Moss Eater ©   (2008-03-31 14:00) [12]

knopka[1].name := "имя";
knopka[1].visible := false;

knopka[1].name := "другое_имя";
knopka[1].visible := true;

Если имя меняется, то при обращении "по имени" должен был измениться программный код. А он как был так и остался knopka[1]


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

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


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


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


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


 
Reindeer Moss Eater ©   (2008-03-31 14:22) [15]

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

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


 
Palladin ©   (2008-03-31 14:24) [16]


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

по имени


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


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

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


 
Kolan ©   (2008-03-31 14:31) [18]

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

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


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

> [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 прошла, то прямое приведение достаточно...


 
{RASkov} ©   (2008-03-31 14:43) [20]

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

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


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

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

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

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


 
Palladin ©   (2008-03-31 15:21) [22]

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

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


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


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

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

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


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


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


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


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


> Плохиш ©   (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.
В случае отрицательной проверки поднимается исключение.


 
{RASkov} ©   (2008-03-31 16:48) [26]

> Гость

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

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

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

> SetLength(ArrButt, 5, 5);

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

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


 
Leonid Troyanovsky ©   (2008-03-31 17:51) [27]


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

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

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

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

--
Regards, LVT.


 
{RASkov} ©   (2008-03-31 18:53) [28]

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

Привет:)

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

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

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

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


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

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

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

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

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

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

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


 
Leonid Troyanovsky ©   (2008-03-31 22:39) [30]


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

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

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

--
Regards, LVT.


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

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

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2008.04.27;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.017 c
15-1205737121
KSergey
2008-03-17 09:58
2008.04.27
BIOS выдает DMA Error


2-1206819586
AlexDan
2008-03-29 22:39
2008.04.27
Файловые переменные


15-1205469399
monk
2008-03-14 07:36
2008.04.27
подключить боковые кнопки мыши в webbrowser


11-1188415993
Andrey_rus
2007-08-29 23:33
2008.04.27
Гиперссылки в TKOLRichEdit


2-1207153625
TCrash
2008-04-02 20:27
2008.04.27
"Мягкий" поиск в TIBDataSet