Работаем только с некоторыми компонентами

Привет! В одной из предыдущих статей мы перечисляли все компоненты определённого типа на форме, мы могли присвоить им одно и то же свойство, получить их содержание и так далее.

А что если, например, у нас на форме штук 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 оптимизацию.

13 ответов к «Работаем только с некоторыми компонентами»

  1. На использование свойства Tag компонентов должно быть табу.
    Объясняю: представьте себе достаточно объёмный проект, в котором ваш коллега в определённом участке устанавливает и обрабатывает значения свойства Tag компонентов по своему усмотрению. Тогда использование значения свойства невозможно в данном участке кода по другому назначению. Хорошо, если коллеги это вовремя обнаружили и договорились, а если у вас написан некий движок для приложений и докопаться почему и как используется свойство Tag становится не просто и затратно.

    1. Ну это если большой проект. В небольших утилитах считаю это вполне оправданным. А если с кем-то делиться исходником, иожно в комментарии в начала кода сказать об этом.

  2. Новые версии 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;

  3. Удобно очень. не нужно заморачиваться с растяжением компоненты.
    Только вот это место не совсем понятно:

    Panel3.Height

    высота Panel3, почему именно Panel3? Для примера?

  4. Ребят попрошу не закидывать камняти. Я далек от делфи, последней раз работал в паскале года 2 назад практики давно небыло, помню лишь только одну задачку класную придумал по расчету диапазона работы РЛС и зенитных установок =). В войну тогда играли с препод, пролетит самолет или нет. Сейчас нет уже того пыла как раньше.

    1. я ставил единичку и проверял на единичку)
      дело в том, что я в статье написал про больше нуля, а скопировал код с проверкой на равенство единице — тут вы правы, спасибо

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *