Идея состоит в запуске цикла уже после отработки системного события (нажатие кнопки, пункта меню и т.п.). Это реализовано с помощью подключения обработчика событий в форме и внешней компоненты. При нажатии кнопки "Выполнить" подключается процедура, в которой выполняется цикл. При этом необходимо в цикле обрабатывать сообщения Windows, чтобы работали интерфейсные элементы управления. Те элементы, которые не нужны можно сделать недоступными. Внешняя компонента как раз содержит метод, который обрабатывает сообщения Windows. Метод возвращает true, если была нажата комбинация Ctrl+Break. Код метода на С++:
HRESULT InitDone::GetMessage(VARIANT * cbKey)
{
MSG msg;
V_VT(cbKey) = VT_BOOL;
V_BOOL(cbKey) = false;
while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::DispatchMessage(&msg);
::TranslateMessage(&msg);
if(msg.message == WM_KEYDOWN && msg.wParam == 3) // Ctrl + Break
V_BOOL(cbKey) = true;
}
return S_OK;
}
В приложенных файлах содержатся исходники простейшей компоненты для 1, dll компоненты и шаблон обработки