Работаем только с некоторыми компонентами
Привет! В одной из предыдущих статей мы перечисляли все компоненты определённого типа на форме, мы могли присвоить им одно и то же свойство, получить их содержание и так далее.
А что если, например, у нас на форме штук 20 TPanel, и нам нужно у пяти из них поменять высоту?
Передо мной сейчас как раз и встала такая задача.
Всё очень просто:
- Выделяем нужные компоненты (в данном случае TPanel).
- Ставим свойство Tag отличное от нуля — по нему мы поймём, что этот компонент — нам нужный
- И вот мой код:
var i: integer; begin for i:=0 to ComponentCount-1 do if Components[i].Tag=1 then (Components[i] as TControl).Height:=Panel3.Height div 6; end;
В общем, всё аналогично той статье, но теперь мы используем свойство Tag компонента, чтобы отделить его от общей массы, а не тип.
Между делом замечу, что у меня последние два апа тиц держится на уровне полтинника, а я на него не потратил ни копейки (не считая кое-каких услуг после последнего апдейта). Можно вручную пытаться получить ссылки, а можно и заказать seo оптимизацию.
На использование свойства Tag компонентов должно быть табу.
Объясняю: представьте себе достаточно объёмный проект, в котором ваш коллега в определённом участке устанавливает и обрабатывает значения свойства Tag компонентов по своему усмотрению. Тогда использование значения свойства невозможно в данном участке кода по другому назначению. Хорошо, если коллеги это вовремя обнаружили и договорились, а если у вас написан некий движок для приложений и докопаться почему и как используется свойство Tag становится не просто и затратно.
Ну это если большой проект. В небольших утилитах считаю это вполне оправданным. А если с кем-то делиться исходником, иожно в комментарии в начала кода сказать об этом.
Дело ваше. Мне одного переписывания кода с использованием tag хватило.
Новые версии Delphi поддерживает синтаксис forin. И еще я бы все же проверял на соответствие TPanel…
Примерно так
var
cmp:TComponent;
begin
for cmp in Self do begin
if (cmp is TPanel)and ((cmp as TPanel).Tag=1) then begin
…
end;
end;
end;
Я не стал проверять, так как сам ставил tag только на TPanel. Хотя в серьёзных проектах стоит, согласен
Удобно очень. не нужно заморачиваться с растяжением компоненты.
Только вот это место не совсем понятно:
Panel3.Height
высота Panel3, почему именно Panel3? Для примера?
Так и есть, просто скопировал код
Баннер от Гуггли вылазиет.. В опере 10.
Благодаря этой статье немного вспомнил синтаксис Object Paskal))
Ребят попрошу не закидывать камняти. Я далек от делфи, последней раз работал в паскале года 2 назад практики давно небыло, помню лишь только одну задачку класную придумал по расчету диапазона работы РЛС и зенитных установок =). В войну тогда играли с препод, пролетит самолет или нет. Сейчас нет уже того пыла как раньше.
if Components[i].Tag=1 then
неправильно, надо if Components[i].Tag>0
я ставил единичку и проверял на единичку)
дело в том, что я в статье написал про больше нуля, а скопировал код с проверкой на равенство единице — тут вы правы, спасибо
Inot:
у меня такая же проблемас Оперой пришлось на FF перейти и все ок