Delphi 7

mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007 - 13 mars 2006 à 23:12
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007 - 25 mars 2006 à 22:59
salut à tous ; j'ai jamais utilisé delphi 7 ; et j'aimrai savoir comment ouvrire un nouveau projet pour fair mon premiér programme merci de vous me répander

36 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mars 2006 à 16:57
au fait tu me dis que tu as créer un fichier test sous forme d'un
fichier texte mais tu ne pourras pas relire ce fichier avec la
procedure AssembleWorkGR7 puisqu'il n'aura pas la même structure

pour créer un fichier test ayant une structure semblable il faut faire:

type

RCell = record

Grafcet : word; (* Indice des grafcet partiel *)

Page : byte; (* Indice de la page graphique *)

Couleur : byte; (* Couleur pour l'objet graphique *)

Nature : byte; (* Nature de l'objet graphique *)

Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)

Convergence : word; (* Gestion de la convergence *)

Indice : smallint; (* Indice numérique associé à l'objet *)

Extension :integer ; (* Pointeur vers chaîne de caractères associée *)

end;



var enregistrement:Rcell

fichier:file of Rcell;





begin

assignfile(fichier,'nomdufichier);

rewrite(fichier);

with enregistrement do

begin

Grafcet :=XXXX;


Page :=XXXX;


Couleur :=XXXX;


Nature :=XXXX;


Connexion :=XXXX;


Convergence :=XXXX;


Indice :=XXXX;


Extension :=XXXX;

write(fichier,enregistrement);



///et ceci autant de fois que tu as d'enregistrements dans ton exemple 7 fois


end;

closefile(fichier);



end;



@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mars 2006 à 17:04
une derniere chose personnellement j'ouvrirais la fichier de la même façon

type

RCell = record

Grafcet : word; (* Indice des grafcet partiel *)

Page : byte; (* Indice de la page graphique *)

Couleur : byte; (* Couleur pour l'objet graphique *)

Nature : byte; (* Nature de l'objet graphique *)

Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)

Convergence : word; (* Gestion de la convergence *)

Indice : smallint; (* Indice numérique associé à l'objet *)

Extension :integer ; (* Pointeur vers chaîne de caractères associée *)

end;



var enregistrement:Rcell

fichier:file of Rcell;

begin

assignfile(fichier,'nomdufichier);

reset(fichier);

while not(EOF(fichier)) do

begin

read(fichier,enregistrement);

with enregistrement do
begin
if Nature =16 then //taritement
end;

end,

closefile(fichier);

end;

le code y gagnerait en simplicité et en clareté





@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
18 mars 2006 à 18:32
dsl j'ai toujours un probléme cette fois un erreur:(derictive decompilation incorecte)
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
18 mars 2006 à 18:36
un erreur:(derictive decompilation incorecte)
voila le code :
program prj3;

{$APPTYPE CONSOLE}

uses
SysUtils ;


type
RCell = record
Grafcet : word; (* Indice des grafcet partiel *)
Page : byte; (* Indice de la page graphique *)
Couleur : byte; (* Couleur pour l'objet graphique *)
Nature : byte; (* Nature de l'objet graphique *)
Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)
Convergence : word; (* Gestion de la convergence *)
Indice : smallint; (* Indice numérique associé à l'objet *)
Extension :integer ; (* Pointeur vers chaîne de caractères associée *)


end;

var enregistrement:Rcell
fichier:file of Rcell;
NombreEtape :integer;
begin
assignfile(fichier,'test1');
reset(fichier);
while not(EOF(fichier)) do
begin
read(fichier,enregistrement);
with enregistrement do
begin
if Nature=16 then inc(NombreEtape);
end;
end;
closefile(fichier);
writeln('nombre des etpas :', NombreEtape);
end.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mars 2006 à 18:42
il faut mettre un point virgule après

enregistrement:Rcell;

il ne faut pas te contenter de faire un simple copié collé!!!!!!!!



@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
18 mars 2006 à 18:52
dsl encore fechier intouvable ; mon fichier ds un fichier (.txt)
voila le code :
program prj3;

{$APPTYPE CONSOLE}

uses
SysUtils, Types, Classes, Variants, StrUtils;


type
RCell = record
Grafcet : word; (* Indice des grafcet partiel *)
Page : byte; (* Indice de la page graphique *)
Couleur : byte; (* Couleur pour l'objet graphique *)
Nature : byte; (* Nature de l'objet graphique *)
Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)
Convergence : word; (* Gestion de la convergence *)
Indice : smallint; (* Indice numérique associé à l'objet *)
Extension :integer ; (* Pointeur vers chaîne de caractères associée *)


end;

var enregistrement:Rcell;
fichier :file of Rcell;
NombreEtape :integer;
begin
assignfile(fichier,'test1');
reset(fichier);
NombreEtape:=0;
while not(EOF(fichier)) do
begin
read(fichier,enregistrement);
with enregistrement do
begin
if Nature=16 then inc(NombreEtape);
end;
end;
closefile(fichier);
writeln('nombre des etpas :', NombreEtape);
end.
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
20 mars 2006 à 23:31
merci bq jlen le programme sa fonctin bien
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
24 mars 2006 à 19:10
bonjour a tous,
en fait je dois dans un 2eme temps travailler sur le fichier(en annexe) pour comparer des valeurs dans la partie connexion(7eme colonne)
1 1 5 3 1 1 3 0 1
1 1 7 4 1 1 3 0 3
1 1 9 4 1 1 3 0 4
1 1 5 5 1 1 3 0 2
ce que nous demande est de verifier si chaque numero est bien defini uniquement pour une seule etape et pas pour 2;donc je pense que je dois trier tout d'abord les nombre et par une simple comparaison je peux voir si il existe 2 numero semblable ou non;et pour faire ceci je pense que je dois manipuler des objets et pas parcourir simplement un fichier car il faut extraire ces données pour pouvoir les comparer. n'est ce pas??
pour jlen100:est ce que je dois faire la meme chose pour tobjet dans ce que t'as montré a mostafaziad (Rcell=record qui est semblable a "structure" en c++ je pense??)sinon comment faire exactement??
je voudrai utiliser "objet" parce que apres on doit verifier si le cellules sont bien connecté entre eux(cours de grafcet) et determiner les anomalies en donnant l'endroit où est elles sont etc..
merci d'avance
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
24 mars 2006 à 20:59
le type record de dephi (pascal) et la structure du 'C' sont
équivalentes et ont accède à un élément du record en mettant un point
entre le nom et le champ

voici ce dit l'aide:

Un enregistrement (appelé aussi structure dans certains langages)
représente un ensemble de données hétérogènes. Chaque élément est
appelé un champ ; la déclaration d'un type enregistrement spécifie le
nom et le type de chaque champ. Une déclaration de type enregistrement
a la syntaxe suivante :



type nomTypeEnregistrement = record

listeChamp1: type1;

...

listeChampn: typen;

end



où nomTypeEnregistrement est un identificateur valide et où chaque type
désigne un type, et chaque listeChamp est un identificateur valide ou
une liste d'identificateurs délimitée par des virgules. Le
point-virgule final est facultatif.



Par exemple, la déclaration suivante crée un type enregistrement nommé TDateRec.



type

TDateRec = record

Annee: Integer;

Mois: (Jan, Fev, Mar, Avr, Mai, Jun,

Jul, Aou, Sep, Oct, Nov, Dec);

Jour: 1..31;

end;



Chaque TDateRec contient trois champs : une valeur entière appelée
Annee, une valeur d'un type énuméré appelé Mois et une autre valeur
entière comprise entre 1 et 31 appelée Jour. Les identificateurs Annee,
Mois et Jour sont des noms de champs de TDateRec qui se comportent
comme des variables. Néanmoins, la déclaration de type TDateRec
n'alloue pas de mémoire pour les champs Annee, Mois et Jour ; la
mémoire est allouée quand vous instanciez l'enregistrement, de la
manière suivante :



var Record1, Record2: TDateRec;



Cette déclaration de variable crée deux instances de TDateRec, appelées Record1 et Record2.



Vous pouvez accéder aux champs de l'enregistrement en qualifiant le nom de champ avec le nom de l'enregistrement :



Record1.Annee := 1922;

Record1.Mois := Nov;

Record1.Jour := 26;



Ou en utilisant une instruction with :



with Record1 do

begin

Annee := 1922;

Mois := Nov;

Jour := 26;

end;



Vous pouvez alors copier les valeurs des champs de Record1 dans Record2 :



Record2 := Record1;



Comme la portée d'un nom de champ est limitée à l'enregistrement dans
lequel il est spécifié, vous n'avez pas à vous préoccuper de conflits
entre les noms de champ et des noms de variable.



Au lieu de définir des types d'enregistrement, vous pouvez utiliser
directement la construction record ... dans des déclarations de
variable :



var S: record

Nom: string;

Age: Integer;

end;



Cependant, une telle déclaration annule complètement les avantages des
enregistrements, à savoir éviter le codage répétitif de groupes de
variables identiques. De plus, des enregistrements déclarés séparément
avec cette méthode ne sont pas compatibles pour l'affectation même si
leur structure est identique.

pour ton utilisation tu peux soit rouvrir le fichier à chaque utilisation soit l'ouvrir dans un liste

par exemple:

type

Pcell=^Rcell;/ /type pointeur sur la structure RCell



RCell = record// pas de changement

Grafcet : word; (* Indice des grafcet partiel *)

Page : byte; (* Indice de la page graphique *)

Couleur : byte; (* Couleur pour l'objet graphique *)

Nature : byte; (* Nature de l'objet graphique *)

Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)

Convergence : word; (* Gestion de la convergence *)

Indice : smallint; (* Indice numérique associé à l'objet *)

Extension :integer ; (* Pointeur vers chaîne de caractères associée *)

end;



var ListePoints: = Tlist; //on déclare une variable liste

Fichier : file of PCell;





Procedure TForm1.create(Sender: TObject);

begin

ListePoints: = Tlist.Create;//on crée la liste

end ;

dans la procedure de chargement à ne faire qu'une seule fois



procedure open;

var enregistrement:PCell;//on déclare une variable pointeur

begin

assignfile(fichier,'nomdufichier');

reset(fichier);

while not(EOF(fichier)) do

begin

new(enregistrement);//on assigne une nouvelle variable enregistrement

ListePoints.Add(P);// on l'ajoute à la liste (l'adresse seulement)

read(fichier,enregistrement^);//ne pas oublier le ^ on écrit dans la zone mémmoire pointée
end,

closefile(fichier);

end;



pour utiliser la liste



procedure utiliseliste;

var enregistrement:PCell;//on déclare une variable pointeur

i:integer;


begin
for i: = 0 to ListePoints.count-1 do //pour lire la liste du début à la fin:

begin

enregistrement: = ListePoints.Items[i]; //on l'utilise comme un tableau ; on peut récupérer la variable en la pointant directement


with enregistrement^ do// autre façon d'accéder aux champs sans avoir à écrire chaque fois enregistrement.nomdu champ;


begin

nature: =XXXXX;

Page := ZZZZZ;


end ;

end;

end;




en sortie il faut libérer la mémoire proprement:



procédure TForm1.close(Sender: TObject);

var enregistrement:PCell;//on déclare une variable pointeur

i:integer;

begin

for i: =0 to ListePoints.Count-1 do

begin

enregistrement:=ListePoints.Items[i]; //on récupère l'adresse de la variable

dispose(enregistrement);//on libère la mémoire

end;



ListePoints.Free;//on libère la liste



end;



on peut ainsi travailler sur le fichier sans avoir à le recharger



@+

jlen
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
24 mars 2006 à 21:50
merci bcp jlien100

1)ListePoints:=Tlist;ca veut dire que listepoints est de type Tliste(je veux dire le nom de liste est liste),dans ce cas il represente une ligne de fichier ??
2)pour mon fichier sur quoi je dois travailler ,je l'introduis dans "assignfile(fichier,'nomdufichier');"seulement??cad assignfile(fichier,'x:\test.txt');??
3)pour la Procedure TForm1.create(Sender: TObject);c equivalent au constructeur en c++ ??

4)pour for i:=0 to ListePoints.count-1 do ;pourkoi i va de 0 a -1 exactement?

5)pour manipuler un champs,je dois utiliser soit:"
begin
for i:=0 to ListePoints.count-1 do//pour lire la liste du début à la fin:
begin
enregistrement:=ListePoints.Items[i];"
soit:"with enregistrement^ do"??
6)"ListePoints.Add(P);"veut dire koi?
je te remercie jamais assez
a+
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
24 mars 2006 à 22:29
1) dans l'exemple je lui est donné le nom de listepoints mais j'aurais
pu l'appeler toto ou tata (en fait j'ai repris un bout de code d'un de
mes programmes : flemme qaund tu nous tient!!!)

2)pour assignfile tu fais comme tu l'as fait pour ouvrir ton
fichier-->assignfile(fichier,'x:\test.txt'); si c'est la fonction
que tu as utilisée.

3)pour la Procedure TForm1.create(Sender: TObject); tu vas dans
l'inspecteur d'objet de Form1 tu cliques l'évènement oncreate delphi
mettra dans le code la porcédure tu n'auras plus qu'a remplir

idem pour Procedure TForm1.Close(Sender: TObject); tu clique sur onclose dans l'inspecteur d'objet de Form1

4) Tlist est un objet de delphi qui permet de manipuler facilement les
listes (chaines, enregistrements,objet,image.....) cet
objet possède un certain nombre de propriétes, méthodes et
évèments qui facilitent la programmation ; vas
voir dans l'aide à TList tu
trouveras tout.

La propriétés count donne le nombre d'élément dans la liste le premier
élément est à la position 0 (comme dans tout
tableau) donc dans :

pour for i:= 0 to ListePoints.count-1 do on parcourt la liste de l'élément 0 au dernier élément situé à count-1

aide delphi:

property Count: Integer;





Description



Lisez la propriété Count pour déterminer le nombre de composants dans le tableau Items.



Une augmentation de Count ajoute le nombre nécessaire de pointeurs nil
(Delphi) ou NULL (C++) à la fin du tableau Items. Une diminution de
Count supprime le nombre nécessaire d'entrées en fin du tableau Items.



Count n'est pas égal au nombre d'objets référencés dans la liste. En
effet, certaines entrées du tableau Items peuvent contenir le pointeur
nil (Delphi) ou NULL (C++). Pour retirer les pointeurs nil (Delphi) ou
NULL (C++) et faire correspondre Count aux nombres d'entrées désignant
des objets, appelez la méthode Pack.

5)Dans : enregistrement: =ListePoints.Items[i]; on
copie l'adresse de l'enregistrement dans la variable enregistrement
(c'est un pointeur)

ensuite pour accéder à un champ 2 méthodes sont valables soit

enregistrement^.nomduchamp s'il n'y a qu'1 ou 2 champs à traiter soit s'il y a de nombreux champs

with enregistrement^ do


begin


acces champ1;


acces champ2;


.


.


acces champN


end;

cette écriture permet d'avoir un code plus lisible et plus performant

6)"ListePoints.Add(P);" c'est une méthode de Tlist ici on ajoute un
pointeur à la liste et cela met à jour entre autres la propriété count
(vas voir également dans l'aide c'est très bien expliqué):

aide delphi

function Add(Item: Pointer): Integer;



Description



Appelez la méthode Add pour insérer un nouvel objet à la fin du tableau
Items. Add renvoie l'indice du nouvel élément, le premier élément ayant
l'indice 0.



Add incrémente Count et, si nécessaire, alloue de la mémoire en augmentant la valeur de Capacity.



Remarque : Add ajoute toujours le pointeur Item
à la fin du tableau Items même si le tableau Items contient des
pointeurs nil (Delphi) ou NULL (C++).



@+

jlen
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
24 mars 2006 à 23:04
puisque je travaille avac mode console je pense que ca me servira a rien d'utiliser "TForm1.create(Sender: TObject);" ?parce que moi je crée rien ,je dois travailler sur un fichier qu'on me donne sous la forme que j'ai montré avant,
par exemple le fichier que j'ai donné au msg avant ;mon fichier est devenu une liste dont chaque case (du tableau ou cellule) contient les champs qui correspondent a une ligne??
merci
a+
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
24 mars 2006 à 23:42
j'avais oublier que c'était une application console (j'ai pas trop
l'habitude de ces bestioles sans interface graphique c'est un peu un
retour 25 ans en arriere du temps ou je programmais sous dos)

dans ce qu'on a fait jusqu'à présent on ne mémorisait pas la liste ce
qui oblige à la recharger à chaque manipulation ce qui n'est pas très
judicieux. dans la solution que je te propose tu charges la liste une
seule fois au début et ensuite tu peux faire autant de manipulation que
tu veux en ayant touujours la même structure

pour la crétion de la liste tu le fais en début de programme et tu la libère juste avant de sortir

nota;

Fichier : file of RCell; au lieu de Fichier : file of PCell;

et

ListePoints.Add(enregistrement);// on l'ajoute à la liste (l'adresse seulement)

au lieu de ListePoints.Add(P);// on l'ajoute à la liste (l'adresse seulement)



@+

jlen
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
25 mars 2006 à 00:05
pour la creation de la liste je le fais comme tu m'as montré??donc j'ai pas besoin de "Procedure TForm1.create(Sender: TObject);",sinon comment faire pour créer cette liste(en fait il reconnait pas Tlist,quel library je dois declarer??)
merci
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
25 mars 2006 à 06:37
il faut déclarer l'unité Classes;

voir dans l'aide à TList:

TList stocke un tableau de pointeurs.



Unité



Classes



Description



Un objet Tlist, qui stocke un tableau de pointeurs, est souvent utilisé
pour gérer une liste d'objets. TList introduit des propriétés et
méthodes permettant :



D'ajouter ou de supprimer des objets de la liste.

Changer l'ordre des objets de la liste.

Trouver et accéder aux objets de la liste.

Trier les objets de la liste.



@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
25 mars 2006 à 22:59
voila le programme qui j'ai fait mais sa ne marche pas ????,!!!!!!!!!!!!!!!!

program mpas;


{$APPTYPE CONSOLE}


uses
SysUtils, Types, Classes, Variants, StrUtils;
type
Pcell=^Rcell;//type pointeur sur la structure RCell


RCell = record// pas de changement
Grafcet : word; (* Indice des grafcet partiel *)
Page : byte; (* Indice de la page graphique *)
Couleur : byte; (* Couleur pour l'objet graphique *)
Nature : byte; (* Nature de l'objet graphique *)
Connexion : byte; (* Nature de la connectivité avec les cellules voisines *)
Convergence : word; (* Gestion de la convergence *)
Indice : smallint; (* Indice numérique associé à l'objet *)
Extension :integer ; (* Pointeur vers chaîne de caractères associée *)
end;



var
ListePoints:Tlist;
WorkPGR7: file of RCell;



Procedure TForm1.create(Sender: TObject); //je suis ds une application consol pour TForm1
begin
ListePoints:=Tlist.Create;
end;



procedure open;
var enregistrement:PCell;
begin
assignfile(WorkPGR7,'C:\Documents and Settings\Mostafa\Bureau\test1.txt');
reset(WorkPGR7);
while not(EOF(WorkPGR7)) do
begin
new(enregistrement);
ListePoints.Add(enregistrement);
read(WorkPGR7,enregistrement^);
end;
closefile(WorkPGR7);
end;





procedure utiliseliste;
var {enregistrement:PCell;//on déclare une variable pointeur }
i,j:integer;
begin
for i:=0 to ListePoints.count-1 do
begin
for j:=0 to ListePoints.count-1 do
begin
if (ListePoints[i].natur=ListePoints[j].natur)and(ListePoints[i].indice=ListePoints[j].indice)then


writeln('erreur.........');
else
writeln('pas d erreur ');


end;
end;
end;





procedure TForm1.close(Sender: TObject);
var enregistrement:PCell;//on déclare une variable pointeur
i:integer;
begin
for i:=0 to ListePoints.Count-1 do
begin
enregistrement:=ListePoints.Items[i]; //on récupère l'adresse de la variable
dispose(enregistrement);//on libère la mémoire
end;


ListePoints.Free;//on libère la liste


end;
begin {programme principal}
TForm1.create; //la je ne sais pas comment appler cette pocedure
open;
utiliseliste;
TForm1.close; //la je ne sais pas comment appler cette pocedure
end.
0
Rejoignez-nous