Pagina 4 di 5 primaprima ... 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 31 a 40 su 41
  1. #31
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    si è chiaro che uso un ciclo di scansione dei componenti, visto che tanto dovevo fare altre cose e quindi il ciclo era già pronto prima di questo topic, allora ho usato il componentindex per lavorare in quel modo.

    il timer lo disabilito all'avvio,
    la procedura "madre" subito prima di chiamare la procedura del timer
    lo avvia

    timer.enabled:=true;

    solo che non so come bloccarlo!

    grazie.

  2. #32
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da lyllo
    solo che non so come bloccarlo!
    Se è un TTimer ad occuparsi dell'incremento della ProgressBar e viene avviato quando è necessario riempire quest'ultima, è sufficiente disabilitarlo non appena la ProgressBar raggiunge il proprio "traguardo".
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #33
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    codice:
    procedure TForm1.TimeTimer(Sender: TObject);
    begin
      if TProgressBar(form1.Components[indiceOUT]).position<=rel then
          TProgressBar(form1.Components[indiceOUT]).StepIt
      else
        Time.Enabled:=false; //ECCO DOVE LO DOVREI DISATTIVARE
    end;
    ma non si disattiva!
    una volta arrivato al valore REL riparte da 0!

  4. #34
    Quando si disattiva il timer é logico che il suo contatore venga azzerato.

  5. #35
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    non riesco a capire come mai non riesco a farmi capire.
    ora la barra si riempie con un'animazione e fin qui va bene.
    il fatto è che invece di riempirsi e fermarsi dove dovrebbe, poi si riavvia e riparte da 0 e si ri-riempie..
    poi si riazeera etc...

    come posso fare?
    spero di aessermi spiegato meglio ora


  6. #36
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Suppongo che la variabile rel, dal nome decisamente intuitivo, costituisca il valore massimo a cui la ProgressBar deve arrivare, anche se esiste una proprietà Max appositamente progettata per questo scopo.

    Supponiamo che rel e Max si equivalgano: tenendo conto del tuo codice, esegui il metodo StepIt anche quando la barra ha raggiunto il valore massimo, poichè usi l'operatore di confronto <= (che include l'uguaglianza).

    Il problema è che la ProgressBar, raggiungendo il valore massimo, riparte da 0 quando si esegue StepIt; insomma, fa una sorta di "wrap" e torna al proprio valore minimo. In definitiva, dovresti sostituire l'operatore di confronto usando solo <, senza la condizione di "uguale a".

    Per identificare il problema, era sufficiente mettere un breakpoint sull'istruzione di confronto accorgendosi poi che, quando il valore di Position era uguale a rel, incrementando di nuovo usando StepIt si otteneva una Position di 0 (zero), in virtù di quanto detto precedentemente.

    In alternativa, avendo l'impressione che il timer riparta, bastava verificare - sempre con un breakpoint - che il timer venisse prima arrestato e successivamente riavviato; in realtà, ciò che avviene è la prima condizione, cioè il timer non si arresta mai, poichè il valore di Position, attraverso il confronto usato nell'if, ripartiva sempre da capo. Supponendo di avere un breakpoint nell'istruzione che ferma il timer ponendo Enabled a False, ci si può facilmente accorgere che tale istruzione non viene mai eseguita, pertanto è necessario ricercarne la causa nell'istruzione di confronto, influenzata dal problema che credo di aver descritto a sufficienza.

    Debugging is not an option!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #37
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    il debug è stato fatto molteplici volte, la prova di lasciare una disugaglianza stretta è stata provata imemdiatamente dopo aver notato il problema, diversi giorni fa.
    ed il problema RIMANEVA comunque.
    poi, aggiungendo il comando timer.enable:=false;, funziona.

    grazie.

  8. #38
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da lyllo
    poi, aggiungendo il comando timer.enable:=false;, funziona.
    Scusa, ma tu hai scritto precentemente questo codice
    codice:
    procedure TForm1.TimeTimer(Sender: TObject);
    begin
      if TProgressBar(form1.Components[indiceOUT]).position<=rel then
          TProgressBar(form1.Components[indiceOUT]).StepIt
      else
        Time.Enabled:=false; //ECCO DOVE LO DOVREI DISATTIVARE
    end;
    e non funzionava, o almeno così hai detto.

    Ora hai appena scritto che aggiungendo il comando "timer.enable:=false" funziona...ma sembra essere proprio l'istruzione commentata con ECCO DOVE LO DOVREI DISATTIVARE...

    In sostanza, vuoi dire che hai risolto il problema aggiungendo una cosa che in realtà c'era già?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #39
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    lol no


    visto che mi avevi accusato di non aver debuggato, ti ho spiegato la sequenza di eventi e prove che ho seguito dall'inizio.
    avevo intuito che un problema stava nella disuguaglianza larga ma non avevo intuito che il timer sarebbe rimasto attivo.
    poi ho tolto l'ugualianza con il comando per disabilitare il timer ed il gioco si è risolto.

    ciao e grazie!

    PS: non ho capito come avrei dovuto fare, cmq, per creare un componente ad hoc


  10. #40
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da lyllo
    visto che mi avevi accusato di non aver debuggato, ti ho spiegato la sequenza di eventi e prove che ho seguito dall'inizio.
    Questo l'avevo capito. Ciò che ho detto io è che se si nota che il timer non viene arrestato, si dovrebbe almeno verificare se l'istruzione che esegue effettivamente l'arresto viene eseguita. Senza metterci un breakpoint, non avresti mai potuto saperlo.

    Originariamente inviato da lyllo
    avevo intuito che un problema stava nella disuguaglianza larga ma non avevo intuito che il timer sarebbe rimasto attivo.
    Se qualcosa viene eseguito in seguito ad un'eventualità, avendo problemi in quest'ultima non puoi pretendere che vada a buon fine la seconda. Come fai ad intuire che la condizione dell'if è un problema senza farti poi venire il dubbio che proprio quel problema non faccia eseguire l'istruzione che ti serve proprio ad ottenere ciò che volevi, cioè l'arresto del timer?

    Non riesco proprio a seguirti...

    Originariamente inviato da lyllo
    poi ho tolto l'ugualianza con il comando per disabilitare il timer ed il gioco si è risolto.
    E' strano che tu riesca sempre a intuire autonomanente la soluzione dopo che è stata scritta.

    Ciao!
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.