Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Problema con timer
Forum - Delphi - Problema con timer

Avatar
rep87 (Normal User)
Newbie


Messaggi: 17
Iscritto: 27/12/2010

Segnala al moderatore
Postato alle 13:02
Domenica, 16/01/2011
Buongiorno ragazzi..ho bisogno del vostro aiuto!

Allora...Ho un TIMER (chiamato TTimerEngine) con il seguente codice:

Codice sorgente - presumibilmente Delphi

  1. procedure TForm5.TTimerEngineTimer(Sender: TObject);
  2. begin
  3.     if checkbox9.Checked=false then
  4.     begin
  5.     ttimerengine.Enabled:=true;
  6.     ttimerengine.Interval:=1;
  7.     x1:=pi*trackbar2.position;
  8.     x2:=-pi*trackbar2.position;
  9.     y1:=trackbar1.position;
  10.     y2:=-trackbar1.position;
  11.     x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  12.     y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  13.     py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  14.     image1.Canvas.Pixels[px,py]:=clwhite;
  15.     image1.canvas.pen.Width:=10;
  16.     px:=px+1;
  17.     if px=image1.Width then
  18.               begin
  19.               x:=0;
  20.               px:=0;
  21.               ttimerengine.Enabled:=false;
  22.               end;
  23.     end
  24.  
  25.     else
  26.     begin
  27.  
  28.     case trackbar3.Position of
  29.     0:    begin
  30.           with image1.Canvas do
  31.               begin
  32.               for px:=0 to image1.Width do
  33.                   begin
  34.                   x1:=pi*trackbar2.position;
  35.                   x2:=-pi*trackbar2.position;
  36.                   y1:=trackbar1.position;
  37.                   y2:=-trackbar1.position;
  38.                   //Cambia le coordinate schermo in coordinate cartesiane
  39.                   x:= strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  40.                   y:=-strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  41.                   //Cambia le coordinate cartesiane in coordinate schermo
  42.                   py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  43.                   Image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  44.                   image1.Canvas.Pen.Width:=10;
  45.                   end;
  46.               end;
  47.           ttimerengine.Enabled:=false;
  48.           end;
  49.     1:    begin
  50.           ttimerengine.Enabled:=true;
  51.           ttimerengine.Interval:=10;
  52.           x1:=pi*trackbar2.position;
  53.           x2:=-pi*trackbar2.position;
  54.           y1:=trackbar1.position;
  55.           y2:=-trackbar1.position;
  56.           x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  57.           y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  58.           py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  59.           image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  60.           image1.canvas.pen.Width:=10;
  61.           px:=px+1;
  62.           if px=image1.Width then
  63.               begin
  64.               x:=0;
  65.               px:=0;
  66.               ttimerengine.Enabled:=false;
  67.               end;
  68.           end;
  69.     2:    begin
  70.           ttimerengine.Interval:=20;
  71.           x1:=pi*trackbar2.position;
  72.           x2:=-pi*trackbar2.position;
  73.           y1:=trackbar1.position;
  74.           y2:=-trackbar1.position;
  75.           x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  76.           y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  77.           py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  78.           image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  79.           image1.canvas.pen.Width:=10;
  80.           px:=px+1;
  81.           if px=image1.Width then
  82.               begin
  83.               x:=0;
  84.               px:=0;
  85.               ttimerengine.Enabled:=false;
  86.               end;
  87.           end;
  88.     3:    begin
  89.           ttimerengine.Interval:=30;
  90.           x1:=pi*trackbar2.position;
  91.           x2:=-pi*trackbar2.position;
  92.           y1:=trackbar1.position;
  93.           y2:=-trackbar1.position;
  94.           x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  95.           y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  96.           py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  97.           image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  98.           image1.canvas.pen.Width:=10;
  99.           px:=px+1;
  100.           if px=image1.Width then
  101.               begin
  102.               x:=0;
  103.               px:=0;
  104.               ttimerengine.Enabled:=false;
  105.               end;
  106.           end;
  107.     4:    begin
  108.           ttimerengine.Interval:=60;
  109.           x1:=pi*trackbar2.position;
  110.           x2:=-pi*trackbar2.position;
  111.           y1:=trackbar1.position;
  112.           y2:=-trackbar1.position;
  113.           x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  114.           y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  115.           py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  116.           image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  117.           image1.canvas.pen.Width:=10;
  118.           px:=px+1;
  119.           if px=image1.Width then
  120.               begin
  121.               x:=0;
  122.               px:=0;
  123.               ttimerengine.Enabled:=false;
  124.               end;
  125.           end;
  126.     5:    begin
  127.           ttimerengine.Interval:=90;
  128.           x1:=pi*trackbar2.position;
  129.           x2:=-pi*trackbar2.position;
  130.           y1:=trackbar1.position;
  131.           y2:=-trackbar1.position;
  132.           x:=x1+strtofloat(edit3.Text)*px*((x2-x1)/image1.Width)+strtofloat(edit1.Text);
  133.           y:=strtofloat(edit4.Text)*sin(x)+strtofloat(edit2.text);
  134.           py:=trunc(image1.height-(y-y1)*image1.height/(y2-y1));
  135.           image1.Canvas.Pixels[px,py]:=colordialog1.Color;
  136.           image1.canvas.pen.Width:=10;
  137.           px:=px+1;
  138.           if px=image1.Width then
  139.               begin
  140.               x:=0;
  141.               px:=0;
  142.               ttimerengine.Enabled:=false;
  143.               end;
  144.           end;
  145.     end;
  146.  
  147. end;
  148. end;




n poche parole, ecco cosa fa:

Nella checkbox9 c'è semplicemente il comando

Codice sorgente - presumibilmente Plain Text

  1. ttimerengine.enabled:=true



Al click sulla checkbox parte il timer. Se la checkbox è selezionata, il timer disegna la funzione seno. Se nella trackbar3 (le cui posizioni variano da 0 a 5) il valore della posizione è uguale o maggiore a 1, allora il seno viene disegnato con una velocità decrescente (ovvero, il seno viene tracciato come se fosse disegnato a mano libera, con intervallo del timer sempre maggiore, e quindi velocità minore). Se nella trackbar3 il valore è 0, il seno viene disegnato a velocità istantanea.

Se la checkbox è deselezionata, accade uno strano evento:

Se la trackbar3 aveva posizione maggiore o uguale a 1, il seno viene cancellato (o meglio, viene disegnato un nuovo seno con intervallo del timer = 1 e di colore bianco), così come voglio che avvenga. Riselezionando la checkbox, si ridisegna il seno.

Se la trackbar3 aveva posizione 0, non accade nulla!!

E' proprio questa la mia domanda: come mai?! cosa c'è di sbagliato? Cosa devo correggere?

Vi prego..DATEMI UNA MANO!!!!! :hail::hail::hail::hail: :_doubt::_doubt::_doubt: :blush::blush::blush:!!

PS: per la cronaca, non sono nè le edit nè le coordinate x1,x2,y1,y2 a dar problemi...


rep87 ha allegato un file: REALIZE EVERYTHING.zip (421806 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da rep87 il 24/01/2011 alle 22:06
PM
Avatar
systemgvp (Normal User)
Expert


Messaggi: 296
Iscritto: 14/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 21:11
Domenica, 23/01/2011
ho provato a ricreare il tuo form, ma non capisco il tuo problema, prova magari a frati un pò di conti a mano che il problema prima o poi salta fuori.

Ho messo tutto il file del progetto. Ora che ce l'hai, sapresti come risolvermi il problema?! Pleaseeee! - rep87 - 24/01/11 22:05
PM