-
> или я неправильно
т.е. не неправильно, а недопонял)
-
> Если проверка is прошла, то прямое приведение достаточно
Шас лень рыться в справке по as
Я всегда делаю так, но уже не помню точно почему это хорошо :). Но вот первое попавшееся из Controls.pas: function TControlActionLink.IsPopupMenuLinked: Boolean;
begin
Result := (Action is TCustomControlAction) and
(FClient.PopupMenu = (Action as TCustomControlAction).PopupMenu);
end;
-
Здесь это оправдано страховкой от отключения сокращенных вычислений булевых выражений и в пользу лаконичности кода. Тогда как в If (obj is TSomeClass) Then TSomeClass(obj)
выглядит куда лаконичней и работает куда оптимизированей
-
> Kolan © (31.03.08 15:12) [21] > > Если проверка is прошла, то прямое приведение достаточно… > > Шас лень рыться в справке по as… Я всегда делаю так, но > уже не помню точно почему это хорошо :). > > Но вот первое попавшееся из Controls.pas:
Это из серии "В огороде бузина, а в Киеве дядька".
PS. Твоё домашнее задание, узнать почему приведённый тобой кусок и близко не подходит к тому высказыванию, которое ты пытаешься опровергнуть.
-
> Я всегда делаю так, но уже не помню точно почему это хорошо
потому что по-другому не умеешь
-
> Плохиш © (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. В случае отрицательной проверки поднимается исключение.
-
> Гость
Только перед этим:
> ArrButt[2,3].Visible:=False;
но после этого:
> SetLength(ArrButt, 5, 5); (в принципе можно использовать и статический массив, тогда это(SetLength) не нужно будет)
- нужно еще и занести объекты в массив. т.е. нечто так: ArrButt[0,0]:=button1; и т.д.
-
> {RASkov} © (31.03.08 16:48) [26]
> - нужно еще и занести объекты в массив. т.е. нечто так:
Снова здарова ;) Есть уже такой - Controls.
Hint: за валидностью элементов оного списка уже следят. Как, собс-но, и за Screen.Forms
-- Regards, LVT.
-
> [27] Leonid Troyanovsky © (31.03.08 17:51) > Снова здарова ;)
Привет:)
> Есть уже такой - Controls.
Есть-то оно есть, и ни я и никто его не отменял... просто Сергей М. предложил как вариант... а я вот тут взялся на свою голову разжовывать :) Причем вариант относительно не плох, так как есть возможность сгруппировать объекты на общем родителе... Можно конечно же их групировку организовать Тэгами там всякими, или еще как, но массив(или список) тоже не плохо, имхо.
> Как, собс-но, и за Screen.Forms
Кстати, это хоть из другой оперы, но более подходит в той "опере" :) Опять же, если только при единичном существовании формы.) Можно конечно и считать кол-во нужных форм в общем списке.... в общем это уже не по этой теме... сорри..)
-
> потому что по-другому не умеешь
Конечно, я не умею вместо (Components[I] as TButton).Visible написать TButton(Components[I]).Visible это для меня слишком. По сабжу, я бы сделал потомка кнопки, с двумя полями XY и создавал бы его (все равно динамически кнопки генерить). XY заполнялись бы при создании. При клике на такой кнопке, извлеч её «координаты» проще простого.
|