DI_COMBOBOX

Элемент диалога DI_COMBOBOX описывает поле ввода со списком (комбинированный список).
struct FarDialogItem
{
  int Type             = DI_COMBOBOX
  int X1               = X1
  int Y1               = Y
  int X2               = X2
  int Y2               = Y (равен значению Y1)
  int Focus            = Focus
  union {
    FarList *ListItems = ListItems  [передается]
    int ListPos        = ListPos    [возвращается]
  };
  DWORD Flags          = Flags
  int DefaultButton    = DefaultButton
  union {
    char Data[512];    = редактируемый текст (без флага DIF_VAREDIT)
    struct {
      DWORD PtrFlags;  = дополнительные флаги (в Dialog API 1.0 не используется)
      int   PtrLength; = размер данных, на которые указывает PtrData
      char *PtrData;   = указатель на пользовательский буфер редактирования
      char  PtrTail[1];= "остаток" - доступ к оставшейся части Data
    } Ptr;             = редактируемый текст (с флагом DIF_VAREDIT)
  };
};

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

Focus

Определяет, имеет ли поле ввода клавиатурный фокус ввода.

ListItems

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

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

ListPos

Текущая позиция в списке ListItems.Items. После закрытия диалога это поле содержит позицию выбранного пользователем элемента списка.

Флаги

Для элемента DI_COMBOBOX имеют значения следующие флаги (про флаги списка см. FarListItem):
ФлагОписание
DIF_DROPDOWNLIST Стиль нередактируемого раскрывающегося списка - DropDownList.
DIF_EDITEXPAND "Расширять" переменные среды.
DIF_LISTAUTOHIGHLIGHT Горячие клавиши будут назначены автоматически.
DIF_LISTNOAMPERSAND показывать горячие клавиши в списке.
DIF_LISTWRAPMODE "Заворачивает" список при навигации по списку.
DIF_DISABLE Элемент является недоступным.
DIF_READONLY Переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY Выделить редактируемый текст при получении фокуса ввода.
DIF_NOFOCUS Управляющий элемент не получает клавиатурный фокус ввода.
DIF_VAREDIT Использовать указатель на собственный буфер редактирования (FarDialogItem.Ptr.*) вместо FarDialogItem.Data.

События

СобытиеОписание
DN_DRAWDLGITEM начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки строки редактирования комбинированного списка; Param2:
LoWord LoByte - редактируемый текст
                (COL_WARNDIALOGEDIT или
                 COL_DIALOGEDIT)
LoWord HiByte - выделенный текст
                (COL_DIALOGEDITSELECTED)
HiWord LoByte - неизмененный текст (UnChanched)
                (COL_DIALOGEDITUNCHANGED)
HiWord HiByte - цвет символа для вызова списка
                (COL_DIALOGTEXT)

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

LoWord LoByte - редактируемый текст
                (COL_WARNDIALOGEDIT или
                 COL_DIALOGEDIT)
LoWord HiByte - выделенный текст
                (COL_DIALOGEDIT
                элемент в фокусе
                COL_DIALOGEDITSELECTED)
HiWord LoByte - неизмененный текст (UnChanched)
                (COL_WARNDIALOGEDIT или
                 COL_DIALOGEDIT)
HiWord HiByte - цвет символа для вызова списка
                (COL_DIALOGTEXT)
DN_CTLCOLORDLGLIST запрос цветовых атрибутов перед отрисовкой открытого комбинированного списка.
DN_KEY нажали клавишу.
DN_MOUSECLICK "кликнули" клавишей мыши
DN_EDITCHANGE текст изменен
DN_KILLFOCUS элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS).
DN_GOTFOCUS элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS).

Замечания

Смотрите также:
DI_LISTBOX, FarDialogItem