PDA

Visualizza la versione completa : [DELPHI 2010] Forzare la visualizzazione della form


FengHuang
23-04-2012, 13:16
Buond a tutti,

Mi sto sicuramente perdendo in un bicchiere d'acqua ma a prescindere dal volume del liquido, sto affogando :dh:

la mia situazione questa:

eseguo il programma, visualizzo la form di login. valido la password e faccio lo show della form principale.

allo show della form principale eseguo un fottio di statement tra le quali alcune procedure che fanno dei DL di file.

quello che io vorrei che PRIMA di eseguire ogni DL la form principale venisse ridisegnata in modo che se aggiorno la caption di una label con qualcosa tipo "Sto scaricando il file pincopallino" l'utente sappia cosa sta succedendo.

Ho provato con Repaint, Invalidate, Refresh, application.processmessages... non c' verso, la form non compare nemmeno finch non ha finito tutto quello che c' da fare, compreso anche i DL di tutti i file.

Non vorrei mettermi dentro ad un multithread, non mi importa granch del fatto che si "blocchi" il programma durante i DL, ma almeno che l'utente abbia visibilit di cosa sta facendo il programma.

sicuramente una cavolata ma non riesco a venirne a capo :messner:

Caiodark
23-04-2012, 14:04
L'evento OnShow viene chiamato prima che il form venga visualizzato, pertanto perfettamente coerente che tu non lo veda prima che l'intero evento sia processato.

A questo punto i fatti sono due, o ti imbarchi nel multithreading oppure scegli un evento diverso come p.e. OnActivate. Occhio che eventi come OnActivate, OnPaint... etc. possono essere chiamati diverse volte nel tempo di vita di un form. Dovresti quindi evitare il caricamento dei dati quando non voluto.

FengHuang
23-04-2012, 14:12
temevo una risposta simile... :dh:

Provo a spostare tutto in un OnActivate...

Tnx

alka
23-04-2012, 16:06
Originariamente inviato da FengHuang
Ho provato con Repaint, Invalidate, Refresh, application.processmessages... non c' verso, la form non compare nemmeno finch non ha finito tutto quello che c' da fare, compreso anche i DL di tutti i file.


Fermo restando che il suggerimento gi dato sul multithreading a mio avviso validissimo e sarebbe comunque la strada corretta da seguire, prova a postare una parte del codice per capire se i metodi che hai indicato sopra sono usati nel modo corretto.

FengHuang
23-04-2012, 16:26
Temporaneamente ho bypassato il problema spostando tutto quanto nell'OnActivate.

il multithreading al momento mi affascina ma non avendo mai fatto nulla in questo ambito e avendo delle consegne da rispettare mi riservo lo studio per tempi pi tranquilli...

avete mica sotto mano un dproj molto banale di esempio sul multi? :fiore:

alka
23-04-2012, 17:11
Originariamente inviato da FengHuang
avete mica sotto mano un dproj molto banale di esempio sul multi? :fiore:

Vai con una ricerca su Google (http://www.google.com) prima... ;)

Poi, in caso di problemi, apri una discussione separata, visto che l'argomento diverso.

FengHuang
24-04-2012, 10:10
ok, rimango IT...

a prescindere dalla posizione errata degli statement, che differenza c' tra refresh, repaint o invalidate?

ho googlato un po ma ho letto alcuni dire che sono intercambiabili altri a dire che son diversi ma senza spiegare in cosa siano sostanzialmente differenti...

per come la vedo io, se sono 3 comandi distinti direi che la differenza deve esserci... o no? :confused:

alka
24-04-2012, 10:33
Originariamente inviato da FengHuang
ho googlato un po ma ho letto alcuni dire che sono intercambiabili altri a dire che son diversi ma senza spiegare in cosa siano sostanzialmente differenti...


Bisogna "googlare" bene. ;)
Vedi qui (http://stackoverflow.com/questions/1251009/whats-the-difference-between-refresh-update-repaint).

Loading