<< Нажмите, чтобы показать Содержание >>
Не рекомендуется отображать модальную форму внутри этого события: во время отображения этой формы работа компонентов 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;