FarDialogItem

Структура FarDialogItem описывает один элемент диалога. Массив этих структур передается в функции Dialog и DialogEx для показа диалога.
struct FarDialogItem
{
  int Type;
  int X1;
  int Y1;
  int X2;
  int Y2;
  int Focus;
  union
  {
    DWORD_PTR Reserved;
    int Selected;
    const char *History;
    const char *Mask;
    struct FarList *ListItems;
    int  ListPos;
    CHAR_INFO *VBuf;
  }
#ifdef _FAR_NO_NAMELESS_UNIONS
  Param
#endif
  ;
  DWORD Flags;
  int DefaultButton;
  union
  {
    char Data[512];
    struct
    {
      DWORD PtrFlags;
      int   PtrLength;
      char *PtrData;
      char  PtrTail[1];
    } Ptr;
  }
#ifdef _FAR_NO_NAMELESS_UNIONS
  Data
#endif
  ;
};

Элементы

Type
Тип элемента диалога. Может принимать одно значений, перечисленных в разделе "Элементы диалога"
X1,Y1,X2,Y2
Координаты, определяющие позицию элемента, относительно диалогового окна (начало отсчета - левый верхний угол диалогового окна, (0,0)). Более подробно о координатах см. описание каждого элемента диалога.
Focus
Определяет имеет ли элемент фокус ввода. Focus одного (одного и только одного!) из элементов диалога должен быть равным TRUE.
Param.Reserved
Размер этого параметра всегда равен размеру объединения Param, что позволяет использовать этот параметр для платформенно-независимой инициализации.
Param.Selected
Определяет состояние элементов DI_CHECKBOX и DI_RADIOBUTTON при показе диалога - включен/выключен. Возвращает их состояние после закрытия окна диалога.
Param.History
Адрес текстовой строки, которая будет использоваться как внутреннее название истории редактирования (см. также флаг DIF_HISTORY)
Param.Mask
Адрес текстовой строки с маской ввода. Используется только с элементом DI_FIXEDIT.
Param.ListItems
Указатель на структуру FarList, описывающую список для элементов DI_COMBOBOX и DI_LISTBOX.
Param.ListPos
Текущая позиция в элементах DI_LISTBOX и DI_COMBOBOX.
Param.VBuf
Указатель на структуру CHAR_INFO, описывающую виртуальный буфер для элемента DI_USERCONTROL.
Flags
Комбинация значений, перечисленных в разделе "Флаги элементов диалога"
DefaultButton
Флаг, означающий, что данный элемент диалога является "элементом по умолчанию". Если при нажатии на <Enter> фокус установлен не на кнопке, то функция Dialog (или DialogEx) вернет номер того элемента, для которого DefaultButton равно 1. Флаг DefaultButton может быть установлен не только для кнопки, но и для любого другого элемента диалога.
Data.Data
Буфер обмена данными с диалогом (без флага DIF_VAREDIT). Подробности использования в описаниях типов элементов диалога.
Data.Ptr.PtrFlags
Дополнительные флаги (в Dialog API 1.0 не используется). Ptr.PtrFlags должен быть равен 0.
Data.Ptr.PtrLength
Размер данных, на которые указывает PtrData.
Data.Ptr.PtrData
Указатель на пользовательский буфер редактирования.
Data.Ptr.PtrTail
"Остаток" - доступ к оставшейся части Data.

Замечания

  1. Вся информация по структуре FarDialogItem изложена с учетом именованных объединений. Более подробно читайте в описании определения _FAR_NO_NAMELESS_UNIONS.
  2. Поскольку содержимое переменной Data.Data имеет большой размер, прямая инициализация массива FarDialogItem, может заметно увеличить потребление памяти. Чтобы избежать этого, можно, например, инициализировать временный массив типов структур с *Data вместо Data[512] и затем преобразовать его в FarDialogItem используя простые функции.
  3. На предмет того, как это сделать смотрите исходные тексты плагинов, входящих в стандартную поставку FAR Manager (функция InitDialogItems и структура InitDialogItem).
  4. Члены Ptr.* используются только для DI_EDIT совместно с флагом DIF_VAREDIT.
Смотрите также:
структуры, _FAR_NO_NAMELESS_UNIONS, InitDialogItem, TFarDialogItem, Флаги элементов диалога
"О пользе и вреде static в диалогах"