DM_SETEDITPOSITION

Programming Far Manager plugins

DM_SETEDITPOSITION

Сообщение DM_SETEDITPOSITION посылается обработчику диалога для установки позиции и состояния курсора в строках редактирования диалога.

Param1

ID элемента диалога.

Param2

Указатель на структуру EditorSetPosition.

Return

FALSE - указанный ID элемента не является строковым редактором.
TRUE - позиция курсора установлена.

Элементы

ЭлементОписание
DI_COMBOBOX комбинированный список
DI_EDIT строка ввода
DI_FIXEDIT поле ввода фиксированного размера
DI_PSWEDIT поле ввода пароля

Замечания

Пример

Пример функции поддержки выделения мышью в строках ввода в плагине "Visual renaming files"
static void MouseSelect(HANDLE hDlg, DWORD idStr, DWORD dwMousePosX)
{
  SMALL_RECT dlgRect, itemRect;
  Info.SendDlgMessage(hDlg, DM_GETDLGRECT, 0, &dlgRect);
  Info.SendDlgMessage(hDlg, DM_GETITEMPOSITION, idStr, &itemRect);

  EditorSetPosition esp={sizeof(EditorSetPosition)};
  Info.SendDlgMessage(hDlg, DM_GETEDITPOSITION, idStr, &esp);

  int length=Info.SendDlgMessage(hDlg, DM_GETTEXT, idStr, 0);
  int CurPos=dwMousePosX - ( dlgRect.Left + itemRect.Left );

  if ( dwMousePosX <= ( dlgRect.Left + itemRect.Left ) && esp.LeftPos > 0 )
    esp.LeftPos-=1;
  else if ( dwMousePosX >= ( dlgRect.Left + itemRect.Right ) && CurPos+esp.LeftPos < length )
    esp.LeftPos+=1;

  if (CurPos+esp.LeftPos < 0)
    CurPos=0;
  else if (CurPos+esp.LeftPos > length)
    CurPos=length;
  else
    CurPos+=esp.LeftPos;

  esp.CurPos=esp.CurTabPos=CurPos;

  if (bStartSelect)
  {
    StartPosX=CurPos;
    bStartSelect=false;
  }

  EditorSelect es={sizeof(EditorSelect)};
  es.BlockType=BTYPE_COLUMN;
  es.BlockStartLine=es.BlockHeight=0;

  if (CurPos > StartPosX)
  {
    es.BlockStartPos=StartPosX;
    es.BlockWidth=CurPos-StartPosX;
  }
  else
  {
    es.BlockStartPos=CurPos;
    es.BlockWidth=StartPosX-CurPos;
  }

  Info.SendDlgMessage(hDlg, DM_SETSELECTION, idStr, &es);
  Info.SendDlgMessage(hDlg, DM_SETEDITPOSITION, idStr, &esp);
}
Смотрите также: