dbzpunkrocker
Messages postés6Date d'inscriptionmardi 13 janvier 2009StatutMembreDernière intervention26 février 2009
-
26 févr. 2009 à 10:57
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
27 févr. 2009 à 13:39
Bonjour,
J'ai un petit problème pour un programme : je dois dessiner avec la propriété Canvas des rectangles imbriqués les uns dans les autres. Pour cela, pas de problème. Mais lorsque je clique sur le bouton Départ, tout les rectangles sont dessinés instantanément alors que je voudrais qu'ils se dessinent les uns après les autres pour pouvoir faire une pause si je le souhaite...J'utilise alors la fonction SLEEP, mais il ne fait pas de pause entre les dessins, il fait une pause quand je clique sur le bouton Départ et il m'affiche tout les rectangles...
Pouvez-vous m'aider svp voici le code :
procedure Tdessin.finClick(Sender: TObject);
begin
close;
end;
procedure Tdessin.departClick(Sender: TObject);
var
x,y,i,p: integer;
begin
p:=0;
x:=Image1.Width;
y:=Image1.Height;
Image1.Canvas.Pen.Color:=clBlack;
Image1.Canvas.Pen.Width:=2;
st:=false;
for i:=1 to 8 do
begin
if st=false then
begin
Image1.Canvas.LineTo(p,y);
Image1.Canvas.LineTo(x,y);
Image1.Canvas.LineTo(x,p);
Image1.Canvas.LineTo(p,p);
p:=p+(x div 35);
Image1.Canvas.MoveTo(p,p);
x:=x-(x div 35);
y:=y-(x div 35);
end;
end;
end;
procedure Tdessin.stopClick(Sender: TObject);
begin
if st=true then
st:=false
else
st:=true;
end;
procedure Tdessin.FormActivate(Sender: TObject);
begin
image1.Canvas.MoveTo(0,0);
image1.Center:=true;
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 27 févr. 2009 à 03:19
tu mets un timer sur ta fiche puis tu le regle entre 45 et 500 ms, puis :
procedure Tdessin.finClick(Sender: TObject);
begin
close;
end;
procedure Tdessin.stopClick(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
end;
procedure Tdessin.FormActivate(Sender: TObject);
begin
image1.Canvas.MoveTo(0,0);
image1.Center := true;
end;
var
Step : integer = 0;
procedure TDessin.Timer1Timer(Sender: TObject);
var X,Y,I,P : integer;
begin
if Step = 0 then
begin
P := 0;
X := Image1.Width;
Y := Image1.Height;
Image1.Canvas.Pen.Color := clBlack;
Image1.Canvas.Pen.Width := 2;
end;
if (Step > 0) and (Step <= 8) then
begin
Image1.Canvas.LineTo(P, Y);
Image1.Canvas.LineTo(X, Y);
Image1.Canvas.LineTo(X, P);
Image1.Canvas.LineTo(P, P);
P := P + (X div 35);
Image1.Canvas.MoveTo(P, P);
X := X-(X div 35);
Y := Y-(Y div 35);
end;
inc(Step);
if Step = 9 then
begin
Step := 0;
// Efface l'affichage pour refaire l'animation
// Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
// Stop automatiquement l'animation a la fin
// Timer1.Enabled := False;
end;
end;