VCL TListView и EditCaption ()

В C ++ Builder у меня есть TListView с некоторыми элементами.

Каждый раз, когда кто-то вводит числовое значение, оно должно применяться к заголовку текущего выбранного TListItem в ListView:

void __fastcall TFormMain::ListViewKeyDown(TObject *Sender, WORD &Key,
  TShiftState Shift)
{
    if ( Key >= '0' && Key <= '9' )
    {
        if ( !ListView->IsEditing() )
        {
            ListView->Selected->EditCaption();
        }
    }
}

Этот код работает «как-то»: ввод числового значения переводит TListView в режим редактирования. Затем мне нужно повторно ввести номер, чтобы применить его к подписи TListItem.

Разве нет способа сделать EditCaption() и применить номер всего за один шаг?


person Herwig    schedule 11.09.2018    source источник


Ответы (1)


Разве нет способа сделать EditCaption () и применить число всего за один шаг?

Вам придется вручную переслать набранную цифру в редактор ListView после его вызова, например:

void __fastcall TFormMain::ListViewKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
    if ( (Key >= '0') && (Key <= '9') )
    {
        TListItem *Item = ListView->Selected;
        if ( (Item) && (!ListView->IsEditing()) )
        {
            Item->EditCaption();

            HWND hWnd = ListView_GetEditControl(ListView->Handle);

            TCHAR str[2] = {TCHAR(Key), 0};
            SetWindowText(hWnd, str);
        }
    }
}
person Remy Lebeau    schedule 12.09.2018