Можно ли отсортировать действия в TActionList в Delphi XE IDE?

Когда количество действий в DXE IDE растет, в одном списке действий быстро становится трудно найти действие, которое вы хотите проверить или изменить.

Здесь нет поля поиска / фильтра, как для компонентов, а действия не сортируются автоматически. Сортировка объявлений действий в коде не меняет порядок их отображения в редакторе списков действий.

Даже инкрементальный поиск не работает: если вы сфокусируете панель списка действий и начнете печатать, нажатия клавиш перейдут к инспектору объектов (и вы случайно измените то или иное свойство). Основное раздражение!

Возможно, есть скрытый параметр, взлом реестра (их довольно много для Delphi) или стороннее расширение, которое будет сортировать действия?

2 ответа

Решение

Вы можете отсортировать их в файле DFM. Вы хотели бы написать небольшой служебный скрипт для этого.

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

Напишите небольшой плагин IDE, который расширяет контекстное меню TActionList с опцией Sort. Для сортировки списка действий вы можете использовать этот код:

procedure SortActions(ActionList: TActionList);
var
  act: TContainedAction;
  arr: TArray<TContainedAction>;
  I: Integer;
begin
  SetLength(arr, ActionList.ActionCount);
  for I := 0 to ActionList.ActionCount - 1 do begin
    arr[I] := ActionList[I];
  end;
  TArray.Sort<TContainedAction>(arr,
    TDelegatedComparer<TContainedAction>.Create(
      function(const Left, Right: TContainedAction): Integer
      begin
        result := CompareText(Left.Name, Right.Name);
      end));
  for I := 0 to High(arr) do
    arr[I].Index := I;
end;
Другие вопросы по тегам