Я думаю, нужно добавить таймер с интервалом срабатывания 1сек. Завести глобальную переменную iCnt, которая будет увеличиваться на 1 при каждом срабатывании таймера. При клике мышкой или клавиатурой по RichEdit нужно обнулять этот счетчик.
int iCnt=0; //если нужно, чтобы при старте в конец добавлялись строки, проинициализировать iCnt=121
//---------------------------------------------------------------------------
void __fastcall Form1Main::RichEditProtocolKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
iCnt=0;
}
//---------------------------------------------------------------------------
void __fastcall Form1Main::RichEditProtocolMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
iCnt=0;
}
//---------------------------------------------------------------------------
void __fastcall Form1Main::Timer1Timer(TObject *Sender)
{
iCnt++;
}
При добавлении новой строки добавить проверку, превышает ли значение iCnt число 120 (2 минуты бездействия оператора)
Если превышает, то добавляем по простому варианту(со скролом в конец списка), если нет - по сложному.
if ((Form1Main) && (Form1Main->RichEditProtocol) && (Form1Main->CheckBox1))
if(Form1Main->CheckBox1->Checked == true)
{
if(iCnt>120)
{ int iPos = RichEditProtocol->SelStart;
Form1Main->ActiveControl=NULL;
Form1Main->RichEditProtocol->Lines->Add(sText);//добавление
Form1Main->RichEditProtocol->SelStart=iPos;
Form1Main->RichEditProtocol->SetFocus();
}
else
Form1Main->RichEditProtocol->Lines->Add(sText);
}