<< Нажмите, чтобы показать Содержание >>

Не рекомендуется отображать модальную форму внутри этого события: во время отображения этой формы работа компонентов TRVCamReceiver и TRVCamSender будет приостановлена.

Это происходит потому, что это событие вызывается из метода Synchronize фонового потока (Synchronize позволяет вызывать метод потока в контексте основного процесса). Из-за этого все остальные потоки не смогут вызвать Synchronize, пока вы не завершите обработку этого события. Если вы отобразите модальную форму, это может занять много времени.

Возможные пути решения:

(для Windows) Используйте PostMessage для отправки сообщения в форму и отображения модальной формы в обработчике сообщений.

(универсальный) Используйте TTimer. Сделайте его отключённым по умолчанию. В этом событии включите его, а при первом выполнении OnTimer отключите его и отобразите форму.

Пример

В этом примере объясняется, как использовать таймер.

Демонстрационный объект ClientServer\VideoChats\ChatRooms\ должен отображать форму чата из события RVCamReceiver1.OnRequestJoinGroup. В демонстрации она отображается как немодальная форма. Если мы хотим отобразить модальную форму, мы можем выполнить следующие шаги:

1.Размещение таймера Timer2: TTimer на форме. Присвоение небольшого значения параметру Interval, Enabled = False.

2.Вместо вызова frmRoom.ShowModal, вызовите Timer2.Enabled := True. Не скрывайте основную форму.

3.Обработка процедуры таймера:

procedure TfrmMain.Timer2Timer(Sender: TObject);
begin
  Timer2.Enabled := False;
  frmRoom.ShowModal;
end;