Использование списка изображений - PullRequest
0 голосов
/ 21 декабря 2011

Я храню значки для своих приложений в нескольких списках изображений.

Есть один, чтобы:

X16

X24

X48

X32

Из этих нескольких списков изображений получены и TActions, и прямой доступ для размещения ICO в TButton, или TImage.

Моя проблема в том, что когда мне нужно снять один его кошмар

Я думал об установке значения CONST для всех, но поскольку некоторые из них используются в TActions, это не полное решение.

Как вы, ребята, делаете это и какие решения вы должны решить или хотя бы улучшить? Я использую DELPHI 2007.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

Что я делаю, так это добавляю все значки во время выполнения, загружая их из ресурсов.Когда я добавляю их, я сохраняю индекс добавленной иконки в глобальной переменной.Я также назначаю свойство ImageIndex каждому действию во время выполнения, ссылаясь на эти глобальные переменные.

Это позволяет гибко добавлять и удалять значки в проекте без проблем с нумерацией.Этот подход учитывает решения о размере значков во время выполнения, основанные на масштабировании шрифта.Недостатком является то, что вы не видите изображения во время разработки, что является недостатком.Если вы хотите получить всю гибкость, изложенную выше, я не вижу лучшего решения.В идеальном мире изображения будут идентифицироваться по имени или идентификатору, а не по непрерывному индексу в массиве.Но для этого вам нужно реализовать много кода поверх VCL.

3 голосов
/ 21 декабря 2011

Существует несколько решений этой проблемы.

Если вы хотите использовать константы, но не хотите менять их каждый раз при удалении изображения. Вы можете сделать следующее:

const
  idImgA   =   0;
  idImgB   =   idImgA + 1;
  idImgC   =   idImgB + 1;
  idImgD   =   idImgC + 1;
  idImgE   =   idImgD + 1;
  idImgF   =   idImgE + 1;
  idImgG   =   idImgF + 1;

Если вы хотите удалить изображение D, вам нужно изменить только две строки:

const
  idImgA   =   0;
  idImgB   =   idImgA + 1;
  idImgC   =   idImgB + 1;
  idImgE   =   idImgC + 1;
  idImgF   =   idImgE + 1;
  idImgG   =   idImgF + 1;

Другой способ - работать с типами enum:

type
  TImgEnum = (imgA, imgB, imgC, imgD, imgE, imgG);

Вы можете использовать оператор Ord для получения индекса изображения:

index := Ord(Enum);
...