Fabio:
Ho una procedura che cicla su tutti i file e directory e dovrebbe aggiornare un controllo con dei parametri, dico dovrebbe perchè la finestra esce solo quando il ciclo è terminato quindi l'applicazione risulta come bloccata fino a che non finisce.
In visual basic se non ricordo male si usava DoEvents o una roba simile per dare un po' di ossigeno al programma e dargli il tempo di aggiornare le finestre e i controlli, qui come si fa?
Ho già provato Application.Processmessages, Refresh, Repaint e Update ma niente da fare, quando parte il ciclo si blocca tutto e si sblocca solo quando il ciclo è terminato.
Fabio:
Aggiorno il thread, dunque il problema è che la procedura viene eseguita all'apertura di un form che viene usato per mostrare l'avanzamento della procedura, e il form non viene proprio mostrato.
Se io sposto l'avvio della procedura dal FormShow a un FormClick e avvio la procedura a mano con un click allora mettendo un Update nel ciclo si vede l'aggiornamento delle statistiche in tempo reale.
Quindi cambio la domanda in, come fare a far partire una procedura dopo che il form supplementare risulta caricato e visibile ?
Fabio:
E già che ci sono rincaro anche la dose ;D , come posso far si che l'utente possa interrompere la procedura?
Ok che il form viene aggiornato però l'applicativo è comunque ingestibile, anche se ho un pulsante per annullare non riesco a cliccarlo fino a che la procedura è terminata.
Grazie.
xinyiman:
Allora, metti quel codice in un timer. Il timer lo fai partire all'apertura della form valorizzando il parametro .Intervall a un valore superiore a 0 (si tratta dei millisecondi). E all'avvio del tuo timer imposti il paratetro interval=0 in maniera tale da eseguire quel blocco di codice una volta sola. Esempio
procedure TForm1.FormShow(Sender: TObject); begin timer1.interval:=100; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin timer1.interval:=0; {tuo blocco di codice} end;
Fabio:
Ok perfetto, per l'avvio a form visibile è ok funziona.
Se avete poi un idea di come poter cliccare il pulsante che risulta non cliccabile fino al termine della procedura fate un fischio.