PDA

Visualizza la versione completa : [DELPHI] Chiudere una Form aperta con ShowModal


ekontar
20-10-2009, 19:07
ciao, io vorrei aprire una piccola form usando showModal, in modo da mostrare all'utente una finestra (tipo splash screen) mentre in background eseguo dei file batch.
All'interno della form così aperta controllo in un ciclo se il file batch ha terminato il suo compito e solo allora questa seconda form si deve chiudere e ritornare il controllo alla principale. Solo che se metto nel codice, dopo essere uscito dal ciclo di controllo, una
close();
la seconda form NON si chiude (mentre si chiude se, ad esempio, metto il close sull'evento click di un pulsante ...).
E' possibile fare cio' che vi ho descritto ?

grazie a tutti in anticipo :ciauz:
eK

Dalton
20-10-2009, 19:46
mentre si chiude se, ad esempio, metto il close sull'evento click di un pulsante


procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.ciclo;
begin
for........do
begin
.........
.........
.......
end;
Button1Click(Sender);
end;




ciao!

ekontar
21-10-2009, 08:59
grazie, purtroppo così avevo già provato ... a me non funziona.
La form aperta con showModal si chiude solo se clicco materialmente sul button1, mentre se provo a fare il furbo chiamando la button1click da programma come dici tu la form2 non si chiude !!
Non ho detto una cosa che forse è importante ... il mio 'ciclo', dal quale esco quando le mie procedure batch sono finite e dopo il quale chiamo la close l'ho messo nell'evento onActivate della form2 (quella aperta con showModal dalla form1) ... forse è importante ? Però anche mettendo lo stesso codice nell'evento onShow o onLoad non cambia nulla

Uso Delphi6, ma anche questo non dovrebbe essere importante.

ciao :confused:
eK

denis76
21-10-2009, 10:16
Io proverei così:
Userei sono il metodi Show e alla form che lavora in modo splah screen applicherei la proprietà
FormStyle:= fsStayOnTop

ekontar
21-10-2009, 10:48
grazie anche a te, Denis,
però io vorrei usare la showModal perchè devo fermare l'esecuzione del codice della form1 fino a quando non chiudo la form2 ... il tuo suggerimento (se l'ho capito bene) è un estetismo per tenere in primo piano la form2, ma se la apro con uno show credo che il codice della form1 continui il suo flusso.

ciao
eK

denis76
21-10-2009, 12:18
Scusa ma credo di non aver capito bene.
In pratica tu hai un programma che esegue un programma esterno.
Nel momento in cui viene eseguito il programma esterno mostri un form in ShowModal il quale deve attendere che il programma esterno si completi per poi chiudersi e ripassare il controllo al form principale vero?

Se è così allora nel form aperto in ShowModal metterei un timer che ogni 100 millisecondi controlla se la procedura esterna è finita. Se lo è Close() ed il form si chiude.

alka
21-10-2009, 12:55
Originariamente inviato da ekontar
ciao, io vorrei aprire una piccola form usando showModal, in modo da mostrare all'utente una finestra (tipo splash screen) mentre in background eseguo dei file batch.
Delega il compito di eseguire i batch alla finestra secondaria, oppure usa un thread separato per l'esecuzione dei programmi, in modo che l'applicazione non rimanga bloccata; se nessuna di queste due casistiche è applicabile, la scelta di visualizzare la Form modale non è quella corretta.

Credo sia meglio che tu spieghi il "panorama" generale del problema, piuttosto che calcare la mano su una soluzione che magari non è la più adatta, chiedendo poi come piegarla alle tue esigenze.

Ciao! :ciauz:

Loading