Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [delphi]lentezza aggiornamento schermate


    A seconda del computer in cui visualizzo l'applicazione si verifica che nel passaggio da una form all'altra (tramite form2.show;form1.hide) compare per un istante il desktop del PC cioè quello che c'è dietro la finestra dell'applicazione. Non ne capisco il motivo, al limite dovrebbe vedersi il form 1 per un secondo in più visto che Delphi lo nasconde dopo che ha mostrato il form2.
    Forse c'è qualcosa che non capisco. In effetti io utilizzo il metodo "show" ma forse dovrei prima creare il form che poi mostrerò e quindi scrivere:
    codice:
    form2.create;
    form2.show;
    form1.hide
    c'è qualche altra cosa che devo fare per evitare questo problema?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Prova a indicare un codice più completo (non esemplificativo) per vedere come viene visualizzata la finestra secondaria, in quale evento e in che contesto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ok.
    L'applicazione è formata da vari form che vengono mostrati solo uno alla volta tramite evento onclick su pulsanti o su label.
    Nel'application main form ho inserito i componenti per l'accesso al database. I form successivi contengono testo o griglie per mostrare il contenuto del database.
    Questo scrivo nell'evento onclick dei form:
    codice:
    form2.show;
    form1.hide;
    Il form contiene codice sia nell'evento oncreate che nell'evento onshow anche se non ho capito bene la differenza tra i due, solo che certe cose ho visto che funzionano solo se le metto nell'evento onshow.
    Cos'altro devo dire?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    Il form contiene codice sia nell'evento oncreate che nell'evento onshow anche se non ho capito bene la differenza tra i due, solo che certe cose ho visto che funzionano solo se le metto nell'evento onshow.
    L'evento OnCreate viene eseguito quando la finestra viene creata: è possibile creare tante volte una finestra quante sono le effettive finestre che voglio vedere a video.

    Ad esempio, mi pare di capire che ogni finestra della tua applicazione sia unica e che venga creata una sola volta.

    Una volta creata, la finestra può essere nascosta e visualizzata quante volte si vuole, e ogni volta che la finestra viene mostrata entra in azione l'evento OnShow.

    E' chiaro che se quest'ultimo evento contiene operazioni pesanti, la finestra impiegherà del tempo a mostrarsi; qualsiasi operazione che inizializza la finestra va fatta solo una volta.

    Ho il sospetto che l'architettura dell'applicazione sia abbastanza intricata...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Quindi poiché nelle impostazioni del mio progetto è previsto un main form e 7 form che si auto-creano (tra questi c'è anche il main form) vuol dire che poi non devo più utilizzare l'evento oncreate dei form secondari ma solo l'evento onshow perché i form sono già tutti creati quando parte l'applicazione e quindi quelle istruzioni non possono essere più eseguite?
    In effetti anche se io vedo che il codice messo nell'oncreate del form secondario viene eseguito, forse questo può essere l' errore che mi causa i problemi di visualizzazione?

  6. #6
    Anche se ho eliminato tutti gli eventi oncreate dei vari form secondari la situazione non è cambiata. Riporto il codice che richiama dal form Sommario (che contiene varie label) una pagina di testo:
    codice:
    procedure TformSommario.lblIntroduzioneClick(Sender: TObject);
    begin
      HTMLPath:=ExtractFilePath(Application.ExeName) + 'HTML\introduzione.htm';
      formTesto.webbrwser.Navigate(HTMLPath);
      formTesto.show;
      formSommario.Hide;
    end;
    Il formTesto è molto semplice perché contiene solo una webbrowser. Non mi sembra che ci siano operazioni "pesanti" da svolgere.
    Quello che avviene a video è che per 1-2 secondi nel passaggio da un form all'altro si vede lo sfondo azzurro del desktop con il logo di window. (preciso che il computer è quello che uso normalmente per le elaborazioni grafiche quindi è potente, veloce e con molta RAM). L'unica cosa che mi lascia in dubbio è che il sistema operativo è Window 7, sul mio portatile che ha Win XP il problema, infatti, non si verifica.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    Quindi poiché nelle impostazioni del mio progetto è previsto un main form e 7 form che si auto-creano (tra questi c'è anche il main form) vuol dire che poi non devo più utilizzare l'evento oncreate dei form secondari ma solo l'evento onshow perché i form sono già tutti creati quando parte l'applicazione e quindi quelle istruzioni non possono essere più eseguite?
    Il Form deve essere "creato" in quanto oggetto per poter essere utilizzato, all'avvio dell'applicazione o quando serve.

    Se il Form che viene visualizzato o nascosto non deve essere "reinizializzato" in qualche modo, ma è sufficiente che venga reso visibile o invisibile mantenendo il suo stato, tale stato va inizializzato al momento della creazione con OnCreate.

    Il fatto che il Form sia visibile o meno è solamente una informazione sullo stato dell'oggetto, che non ha nulla di diverso rispetto all'essere blu o verde, per intenderci.

    L'evento OnShow va definito se, ogni volta che il Form viene mostrato, è necessario che le informazioni al suo interno siano in qualche modo aggiornate rispetto all'ultima volta in cui era visibile; è chiaro però che, eseguendo istruzioni nel contesto dell'OnShow, la finestra impiega più tempo a visualizzarsi.


    Originariamente inviato da vicky
    Anche se ho eliminato tutti gli eventi oncreate dei vari form secondari la situazione non è cambiata.
    Infatti non c'era nessun problema nell'evento OnCreate, così come ce n'è uno nell'OnShow.

    Riepilogo: se le informazioni che sono nella finestra non cambiano quando questa viene nascosta con Hide e poi mostrata di nuovo con Show, la sua inizializzazione deve essere effettuata una sola volta, nell'evento OnCreate. Se invece ogni volta che la finestra deve essere mostrata va aggiornata, quella logica va nell'evento OnShow, pena un certo ritardo nella visualizzazione se quel codice richiede tempo per essere eseguito.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Effettivamente la finestra che viene mostrata contiene un controllo webbrowser il cui contenuto viene stabilito tramite un link presente nella finestra precedente. Quindi nell'evento onshow della finestra secondaria non è presente il codice che ne permette l'aggiornamento. Non so come potrei fare altrimenti. La mia finestra principale non è altro che una serie di link (parlando come se fosse una pagina html) che portano verso pagine con contenuti diversi.

  9. #9
    Mi viene in mente una cosa: il problema della lentezza nell'aggiornamento della pagina potrebbe derivare dal fatto che vedo la mia applicazione in un PC win 7 a 64bit? Dopotutto la versione di Delphi che uso e le librerie di componenti sono a 32 bit.

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    Mi viene in mente una cosa: il problema della lentezza nell'aggiornamento della pagina potrebbe derivare dal fatto che vedo la mia applicazione in un PC win 7 a 64bit? Dopotutto la versione di Delphi che uso e le librerie di componenti sono a 32 bit.
    Ma questo "problema di lentezza" come si verifica esattamente?

    E' il Form che impiega tempo ad apparire, o è la pagina mostrata nel WebBrowser a caricarsi lentamente?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.