C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
OnKeyUp + OnKeyPress, Как программно добавить символ?
** Harold
Отправлено: 02.11.2005, 02:45


Не зарегистрирован







Имеем ListView в режиме ViewStyle = vsReport.
Вводим данные в ListView->Selected->Caption (хочется ввести время в формате 00:00:00)

CODE

void __fastcall TForm1::lv_TaskListDblClick(TObject *Sender)
{
if ( lv_TaskList->Selected != NULL )
 {
  if(   lv_TaskList->Items->Item[lv_TaskList->ItemIndex]->ImageIndex == 4 // типа, эту строчку можно редактировать
     && m_iMouseX < lv_TaskList->Column[0]->Width //смотрим, что хотят редактировать именно Caption
     && m_iMouseX > 32 //место под 2 картинки
     )
     {
     m_asTaskListCaptionPreviousData = lv_TaskList->Selected->Caption;
     lv_TaskList->Selected->Caption = "";
     lv_TaskList->Selected-> EditCaption();
     m_TaskListCaptionDigitsCount = 0;
     }
     else
     {
     lv_TaskList->Selected->CancelEdit();
     }
  }

void __fastcall TForm1::lv_TaskListKeyPress(TObject *Sender, char &Key)
{
if (lv_TaskList->IsEditing())
{
 if(Key != ':')
  {
  Key = Parsers->CheckIfKeyIsDigit(Key); // проверка на цифру
  }
 if(Key != NULL && Key != ':')
 {
 m_TaskListCaptionDigitsCount++;
 }
}
}

void __fastcall TForm1::lv_TaskListKeyUp(TObject *Sender, WORD &Key,
 TShiftState Shift)
{
if (m_TaskListCaptionDigitsCount == 2 || m_TaskListCaptionDigitsCount == 4)
  {
  Form1->lv_TaskListKeyPress (Form1->lv_TaskList, ':');
  }

  if(m_TaskListCaptionDigitsCount == 6)
  {
  lv_TaskList->Selected->CancelEdit();
  }
}

}


По отпусканию кнопки во второй и четвертый раз ':' замечательно передается в OnKeyPress, но ':' в редактируемом окошке не появляется. Как правильно добавить разделитель? API?
О провеке допустимости ЧАСОВ<24, МИНУТ, СЕКУНД<59 пока речь не идет...


** Harold
Отправлено: 02.11.2005, 22:48


Не зарегистрирован







Н... да, судя по всему Windows все эти сообщения перехватывает раньше... Ну, и всякие там WORD &Key надо обрабатывать только по KeyDown а не по KeyPress, согласно мануалу же... будем копаться... Хотя, если через Ж, можно и по таймеру и дождаться, пока очередь дойдет и до Builder'a... хоть и работает, но криво это все... хотелось бы правильно...

Вернуться в Вопросы программирования в C++Builder