** 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... хоть и работает, но криво это все... хотелось бы правильно... |
|
|