Как я могу реализовать выделенные значки панели инструментов с Delphi? - PullRequest
5 голосов
/ 03 февраля 2011

Я хотел бы выделить значки на панели инструментов, когда их связанное действие имеет свойство «флажок», установленное в значение true. Я хотел бы сделать это способом, аналогичным тому, как это делал Microsoft Office 2003, например, см. значки Bold и Align Left на этом изображении:

Toolbar example

Изображение нарисовано с рамкой вокруг него, а фон был изменен на оранжевый.

Как я могу реализовать это с помощью Delphi 2009?

В качестве бонуса, есть ли способ сделать то же самое со значком в меню для соответствующего элемента? например как показано ниже с записями линейки и разметки:

Menu example


Followup:

Спасибо, Андреас, за простой и правильный ответ на мой вопрос. Как программист Delphi 4, преобразованный в Delphi 2009, я не был достаточно знаком с дополнениями VCL Delphi 5-7, поэтому TActionManager, TActionToolbar и их работа не были в моем словаре Delphi. И это основано на способности Delphi использовать стиль, родственный теме Microsoft O / S.

Однако, с вашим ответом и небольшим исследованием, использующим его, я подтверждаю, что я не хочу делать это таким образом. Яркая тема Embarcadero: всплывающие меню: «Проверенные» элементы со значком, который больше не отображается как утонувший? , когда Питер Белоу поделился своим опытом, заставил меня понять, что я не хочу переходить на тему XP все, так как это пойдет на пользу пользователям Vista и Windows 7, вернув их в Бронзовый век.

Настоящий виновник здесь в том, что есть определенные вещи, которые темы O / S хотят, чтобы вы уважали. Delphi пытается следовать правилам. Я могу вернуться к XP, стилю / теме XP и карте цветов XP. В этом режиме отмеченные элементы будут подсвечены. И это действительно все, что я хотел - выделить проверенные позиции. Я использовал Office 2003 в качестве примера, потому что это было то, что я хотел. Но я действительно не хотел полностью менять темы и придавать новый вид моей программе. Это особенно заставит пользователей Vista и Windows 7 выглядеть неестественно.

Что было бы идеально, если бы у меня был другой набор изображений, который будет применяться при проверке объекта ... но нет свойства "CheckedImages". Или способ программного или автоматического изменения изображения, если оно отмечено (например, отключенные изображения получают версию своего включенного изображения в оттенках серого).

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

Ответы [ 3 ]

13 голосов
/ 03 февраля 2011

Добавьте TActionManager к форме и создайте некоторые действия (например, жирный, курсив и подчеркивание).Убедитесь, что для свойства AutoCheck установлено значение true для каждого действия.Затем добавьте TActionToolbar.Дважды щелкните диспетчер действий и перетащите три действия на панель инструментов.Теперь добавьте TXPColorMap к форме и назначьте его менеджеру действий.Также добавьте TImageList и добавьте значки жирным шрифтом, курсивом и подчеркиванием (от C:\Program Files (x86)\Common Files\CodeGear Shared\Images\GlyFX\Icons\BMP\16x16).Присвойте список изображений диспетчеру действий.

Установите значки панели инструментов, чтобы отображать только глиф, а не заголовок.Наконец, установите для свойства Style ActionManager значение XP Style.Конечный результат - это то, что вы ищете.

Пример панели инструментов http://privat.rejbrand.se/toolbar.png

2 голосов
/ 06 февраля 2011

Можно также использовать обычный TToolBar с DrawingStyle, установленным на dsGradient, я только что узнал.

Пример панели инструментов с dsGradient в качестве DrawingStyle http://privat.rejbrand.se/toolbar2.png

0 голосов
/ 05 февраля 2011

Без изменения всей темы, я думаю, что это может работать наполовину прилично:

  1. Добавить дополнительные изображения в ImageList, так что для данного действия есть два (или более) изображения на выбор.

  2. Вместо того, чтобы изменять свойство «флажок» на true или false, измените ImageIndex на альтернативное изображение, например:

    if WS = 1 then begin
      ElTree.Align := alTop;
    //  TileTopBottomAction.Checked := true;  --- take this out
    //  TileLeftRightAction.Checked := false;  --- take this out
      TileTopBottomAction.ImageIndex := 47;  { hilighted image }
      TileLeftRightAction.ImageIndex := 14;  { regular image }
    end 
    else begin
      ElTree.Align := alLeft;
    //  TileTopBottomAction.Checked := false;  --- take this out
    //  TileLeftRightAction.Checked := true;  --- take this out
      TileTopBottomAction.ImageIndex := 13;  { regular image }
      TileLeftRightAction.ImageIndex := 48;  { hilighted image }
    end;
    

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

toolbar

и вот так в меню:

menu

Преимущества этого метода в том, что он также работает в меню, и вы можете иметь несколько изображений для представления того, что вы хотите.Кроме того, он не разрушит тему (XP, Vista, Windows 7 и т. Д.), Которую взяла на себя программа.

Недостатком этого метода является то, что вы ограничены областью изображения 16x16 для воспроизведения и не можете нарисовать рамку вокруг нее, которая выходит за эти пределы, как это происходит, когда вы устанавливаете для свойства «selected» значение true.

...