Je suis pas certain que Sleep fonctionnera pour ce que tu veux faire. Sleep "gèle" le Thread en cours ... donc tu ne sauras pas décocher pendant le Sleep sauf si tu fais un programme multi-threads.
Ci-dessous j'ai testé ce que tu veux faire. Cela fonctionne chez moi mais j'utilise Visual C++ et les MFC pas Borland.
A toi d'adapter :
void CTestDlg::OnCheck1()
{
// Appelé lorsque la case est cochée
UpdateData(TRUE); // Récupère les infos du contrôle
if (m_bCheck) StartBoucle(); // Teste si coché
}
void CTestDlg::StartBoucle()
{
// Boucle infinie (sauf si on décoche la case)
SetTimer(1, 100, NULL); // Timer pour vérification
m_bFlag = TRUE; // Flag de contrôle de la boucle
do
{
// Boucle infinie
DoEvents();
}
while (m_bFlag);
}
void CTestDlg::OnTimer(UINT nIDEvent)
{
// handler Timer
KillTimer(1); // Kill Timer
UpdateData(TRUE); // Récupère les infos du contrôle
if (!m_bCheck) m_bFlag = FALSE; // On stoppe la boucle
else SetTimer(1, 100, NULL); // sinon init Timer de nouveau
CDialog::OnTimer(nIDEvent);
}
void CTestDlg::DoEvents()
{
// Laisse le système d'exploitation traiter les messages en attente
MSG Msg;
BOOL bRet;
if (PeekMessage(&Msg, m_hWnd, 0, 0, PM_NOREMOVE))
{
if ((bRet = GetMessage(&Msg, m_hWnd, 0, 0)))
DispatchMessage(&Msg);
}
}
PS
m_bCheck est la variable (booléenne) qui se rapporte au contrôle "case à cocher".
Voilà j'espère que ca aide.
Flying