Urgent : code à corriger. Cela fait des jours que je suis dessus !!!!!!

Signaler
-
Messages postés
1
Date d'inscription
jeudi 11 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2004
-
Le code qui suit sert à créer un compte à rebours. Les 2 dernières lignes de ce code sont incorrecte car le compilateur signale:
[Erreur]Unit1.pas(56):Types incompatibles
[Erreur]Unit1.pas(56):Types incompatibles: 'String' et 'Integer'

Je ne parviens pas, malgré ces indications, à corriger ce bug.
Quelqu'un peut-il me rectifier ce code ?

J'aimerais en effet que le décompte du compte à rebours
(programmé à 1 heure 5 minutes) s'affiche dans le Caption du Label 1

merci d'avance
_________________________________________________________
voici le code :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel; // affichage du décompte de temps
Timer1: TTimer; // décompte du temps
Button1: TButton;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;
Hr, Min, Sec:integer; // heures, minutes, secondes

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Sec > 0 then Sec := Sec-1
else begin
Sec := 59;
if Min > 0 then Min := Min-1
else begin
Min := 59;
if Hr > 0 then Hr := Hr-1;
end;
label1.Caption:= Hr+':'+Min+':'+Sec; //01:05:00 (1 heure 5 minutes)
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

end.

3 réponses

arf,
je c pas si tu faisait du vb avant mais tu vien de commetre une erreur d'un ex-vbien :)

[Erreur]Unit1.pas(56):Types incompatibles: 'String' et 'Integer'

cette erreur signifie evidemment une incompatibilité de type, ce ki revien a dire ke y'a tu essay de faire rentrer un objet carré dans un trou rond ;) , le vb corrige cela mais pas le delphi

il faut donc utiliser des fonctions pour convertirs les types :

dan ton cas ca sera
IntToStr(nombre)
renvera la chaine de caractère de ce nombre

Label1.Caption:= IntToStr(Hr)+':'+IntToStr(Min)+':'+IntToStr(Sec); //01:05:00 (1 heure 5 minutes)

Voila

@+
Fabs
-------------------------------
Réponse au message :
-------------------------------

Je faisais effectivement du VB avant, eh oui !
Merci d'avoir rectifié la ligne de code incorrecte.

Il demeure néanmoins le problème suivant :

Même si le projet a été compilé correctement, le compte à rebours ne fonctionne pas !

Que se passe-t-il donc ? Voici ci-dessous mon projet.
(sur la form1: insérer un label, 1 timer et 1 button)

code de la Fiche Project1 :
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

code de la fiche Unit1 (Form1) :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel; // affichage du décompte de temps
Timer1: TTimer; // décompte du temps
Button1: TButton; // bouton déclenchant le compte à rebours
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;
Hr,Min,Sec:integer; // heures, minutes, secondes

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Sec > 0 then Sec := Sec-1
else begin
Sec := 59;
if Min > 0 then Min := Min-1
else begin
Min := 59;
if Hr > 0 then Hr := Hr-1;
end;
label1.Caption:= IntToStr(Hr)+':'+IntToStr(Min)+':'+IntToStr(Sec); //01:05:10 (1 heure 5 minutes 10 secondes)
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.enabled:=true
end;

end.
Messages postés
1
Date d'inscription
jeudi 11 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2004

Ce code marche impecc, il suffit d'initialiser les variables minutes, secondes et heures. Merci beaucoup à toi, je cherchais justement depuis un moment comment utiliser un compteur, cela va me servir de base.

Rajoute ces 3 lignes dans la procedure button1click :
Sec := 0;
Min := 0;
Hr := 0;