DI_COMBOBOX

Programming Far Manager plugins

DI_COMBOBOX

Элемент диалога DI_COMBOBOX описывает поле ввода со списком (комбинированный список).
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_COMBOBOX
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  struct FarList *ListItems    = ListItems
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = редактируемый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

ListItems

Указатель на структуру FarList, описывающую пункты для начальной инициализации комбинированного списка. Редактируемое поле заполняется значением первого пункта списка с установленным флагом LIF_SELECTED при условии, что Data не содержит "редактируемый текст" и есть хотя бы один элемент списка с таким флагом. Если таких пунктов несколько, берётся первый.

Если значение равно NULL, то список выводится не будет.

Флаги

Для элемента DI_COMBOBOX имеют значения следующие флаги (про флаги списка см. FarListItem):
ФлагОписание
DIF_DEFAULTBUTTON флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_DROPDOWNLIST стиль не редактируемого раскрывающегося списка - DropDownList
DIF_EDITEXPAND "расширять" переменные среды
DIF_EDITPATH строка ввода будет содержать имена реальных файловых объектов
DIF_LISTAUTOHIGHLIGHT горячие клавиши будут назначены автоматически
DIF_LISTNOAMPERSAND показывать горячие клавиши в списке
DIF_LISTWRAPMODE "заворачивает" список при навигации по списку
DIF_DISABLE элемент является недоступным
DIF_READONLY переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY выделить редактируемый текст при получении фокуса ввода
DIF_NOFOCUS управляющий элемент не получает клавиатурный фокус ввода

События

СобытиеОписание
DN_DRAWDLGITEM начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки строки редактирования комбинированного списка; Param2:
Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_DIALOGEDITUNCHANGED)
Colors[3] - цвет символа для вызова списка
                (COL_DIALOGTEXT)

Param2 (при флаге DIF_DROPDOWNLIST):

Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDIT
            элемент в фокусе
                COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[3] - цвет символа для вызова списка
                (COL_DIALOGTEXT)
DN_CTLCOLORDLGLIST запрос цветовых атрибутов перед отрисовкой открытого комбинированного списка
DN_CONTROLINPUT нажали клавиатурную клавишу или кликнули клавишей мыши
DN_LISTHOTKEY пользователь для смены пункта в открытом комбинированном списке воспользовался горячими клавишами
DN_EDITCHANGE текст изменён
DN_KILLFOCUS элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Работа со списками DI_COMBOBOX и DI_LISTBOX организована по следующей схеме:
  • Запуск DialogInit
    FarDialogItem.Param.ListItems - только для начальной инициализации.

  • DM_LISTADD
    Добавляет только пункт списка, без ассоциированных данных

  • DM_LISTINSERT
    Вставляет только пункт списка, без ассоциированных данных

  • DM_LISTUPDATE
    Удаляет UserData для обновляемого пункта списка.
    Только обновление данных пункта списка без ассоциированных данных

  • DM_LISTSETDATA
    Перед установкой новых ассоциированных данных предыдущие уничтожаются (если было выделение по памяти)

  • DM_LISTGETDATA
    Возвращается значение, предварительно установленное DM_LISTSETDATA.

  • DM_LISTGETDATASIZE
    Возвращается размер ассоциированных данных.

  • DM_LISTGETITEM
    Возвращает только пункт списка, без ассоциированных данных.

  • Завершение DialogFree
    Ассоциированные данные уничтожаются (если было выделение по памяти)

Смотрите также: