# EditorSelect

Структура `EditorSelect` используется в функции EditorControl для выделения или снятия выделения с текста в редакторе Far Manager.

    struct EditorSelect
    {
      size_t StructSize;
      intptr_t BlockType;
      intptr_t BlockStartLine;
      intptr_t BlockStartPos;
      intptr_t BlockWidth;
      intptr_t BlockHeight;
    };

### Элементы

StructSize
Это поле должно содержать размер структуры `EditorSelect`. Перед использованием структуры плагин должен заполнить поле.
BlockType
Одно из следующих значений (перечисление EDITOR_BLOCK_TYPES):

Тип блока | Описание
--- | ---
BTYPE_NONE | снять выделение с блока
BTYPE_STREAM | выделить строковой блок
BTYPE_COLUMN | выделить вертикальный блок

Если `BlockType = BTYPE_NONE`, другие поля этой структуры не важны.
BlockStartLine
Первая строка блока. Можно установить это поле в `-1` - началом блока будет текущая строка.
BlockStartPos
Начальная позиция блока. Если `BlockStartPos = -1`, то выделение блока снимается.
BlockWidth
Ширина блока. Может быть отрицательной величиной.
BlockHeight
Высота блока. Должна быть >= 1.

### Замечания

1. Функция EditorControl вернёт `FALSE`, если:
   - размер передаваемой переменной меньше размера структуры `EditorSelect`;
   - `BlockHeight` меньше 1;
   - `BlockStartLine` больше количества строк в редакторе.

### Пример

Программно строковый блок от (X1,Y1) до (X2,Y2) можно выделить так:

    es.BlockType=BTYPE_STREAM;
    es.BlockStartLine=min(Y2,Y1);
    es.BlockStartPos=(Y1 < Y2?X1:X2);

    // небольшая коррекция, если позиции равны
    if(X1 == X2)
      es.BlockStartPos+=(Y1 < Y2?1:-1);

    es.BlockHeight=max(Y1,Y2)-min(Y1,Y2)+1;

    if(Y1 < Y2)
      es.BlockWidth=X2-X1+1;
    else
      es.BlockWidth=X1-X2+1;

    if(X1 == X2)
    {
      if(Y1 < Y2)
        es.BlockStartPos--;
      else
        es.BlockStartPos++;
    }

    Info.EditorControl(-1,ECTL_SELECT,0,(void*)&es);

Смотрите также:
структуры