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
13 mars 2006 à 23:33
salut,

sous D7 c'est très simple:

quand tu ouvre D7 il t'affiche la première fiche du projet.

Si tu pose un composant dessus prenons par exemple un bouton -->
dans la barre au dessus il y a des onglets
"Suppléments","standard","Win32".....etc

tu cliques sur le premier (c'est un bouton bitbtn) tu te déplaces sur la fiche (Form1) et tu cliques et miracle tu as un bouton

Maintenant tu retournes dans la barre et tu choisis standard la tu trouveras un A tu cliques dessus et tu le poses sur la fiche

Mainteant tu double-cliques sur le bouton. à ce moment une fenetre s'ouvre marquée unit1

avec

procedure TForm1.BitBtn1Click(Sender: TObject);

begin



end;



maintenant entre le begin et le end tu tapes:

procedure TForm1.BitBtn1Click(Sender: TObject);


begin


Label1.Caption:='Delphi c''est formidable j''ai creer mon premier programme';




end;

maintenant appuies sur F9 et ton programme s'exécute si clique sur le bouton tu verras s'ecrire Delphi c''est formidable j''ai creer mon premier programme

maintenant pour sauvegarder ton projet tu fais:

fichier--->

Enregistrer le projet sous tu clique et tu suis ce qu'il te demande (si tu fais entrer, entrer cela suffira)



@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
13 mars 2006 à 23:42
merci de votre réponce . mais mnt le probléme que je doit créer un programme qui conte le nombre des étape éxistent ds un grafcet mais je ne sais pas comment faire pour lier les deux programmes
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
13 mars 2006 à 23:51
pour un premier programme tu fais fort: ce que tu veux faire est assez complexe.

premiere chose: le grafcet est sous quelle forme (structure du fichier)?

en fonction de celà on pourra orienter la structure du programme d'analyse



@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
13 mars 2006 à 23:58
merci ;
voila ce que j'ai:
(* Projet EDITEUR GRAFCET
======================
Copyright FPMs/TCTS 2005
Fiche : Gestion de la page graphique
Auteur : J. HANCQ
Nom de fichier : GestionGR7.pas
Révision : 0.10 du 25/08/2005
Modifié en 0.00 sans objet
*)

unit GestionGR7;

interface

uses

{$DEFINE WIN32}
SysUtils, Types, Classes, Variants, EditGR7, StrUtils,
{$IFDEF WIN32 }
Graphics, Forms;
{$ELSE}
QGraphics, QForms;
{$ENDIF}

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 : PansiChar ; (* Pointeur vers chaîne de caractères associée *)
end;

Tbl_RCell = array of RCell;

TCell = class(TObject)
Grafcet : word; (* Indice des grafcet partiel *)
Page : byte; (* Indice de la page graphique *)
XPos : smallint; (* Position horizontale *)
YPos : smallint; (* Position verticale *)
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 : PansiChar; (* Pointeur vers chaîne de caractères associée *)
procedure Extrait_Cellule(var Table_Cell: Tbl_RCell; X, Y: SmallInt);
procedure Sauve_Cellule(var Table_Cell: Tbl_RCell);
procedure Init_Cellule(X, Y: SmallInt);
procedure DrawCell;
private
{ Private declarations }
public
{ Public declarations }
end;

procedure AffichePageGraphique;
procedure CreeZoneGraphique;
procedure AfficheGrilleGraphique;
procedure Init_Tabl_CELL;
procedure OuvreEWorkGR7;
procedure OuvreLEWorkGR7;
procedure EcritPageGR7;
procedure OuvreLWorkGR7;
procedure LitPageGR7;
procedure FermeWorkGR7;
procedure AssembleWorkGR7;
procedure DeAssembleWorkGR7;

const
(* Structuration du graphisme *)
(* ========================== *)
X_Cel_Def = 24; (* Nombre de cellules GR7 en horizontal *)
Y_Cel_Def = 15; (* Nombre de cellules GR7 en vertical *)
T_Cell = 32; (* Taille de la cellule *)
O_h = 6; (* Origine horizontale pour graphisme cellules *)
O_v = 10; (* Origine verticale pour graphisme cellules *)
Taill_Pol = 5; (* Nombre de caractères par cellule *)

(* Modèlisation des objets graphiques des cellules *)
(* =============================================== *)
(* Liste des couleurs possibles *)
clVide = 0; (* Effacement *)
clNoir = 1; (* Tracé normal *)
clRouge = 2; (* Exécution : actif / Compilation : Erreur *)
clBleu = 4;
clVert = 8; (* Sélectionné *)
clGris = 16;

(* Liste des natures possibles pour la cellule *)
ntVide = 0; (* Vierge *)
ntEtape = 1; (* Etape *)
ntMacro = 2; (* Macro-étape *)
ntEncap = 3; (* Etape encapsulante *)
ntMacEnt = 4; (* Etape début de macro *)
ntMacSor = 5; (* Etape sortie de macro *)
ntActive = 6; (* Etape encapsulée activée *)
ntInitial= 16; (* Initilisation *)
ntTrans = 32; (* Transition *)
ntRenvoi = 64; (* Renvoi *)
ntRecept = 65; (* Réceptivité *)
ntAction = 66; (* Action *)
ntConnex = 128; (* Connexion *)
ntConver = 129; (* Extension pour convergence *)

(* Liste des connexions possibles *)
(* Pour étape et transition *)
ntConnect= 0; (* Normale *)
ntSource = 1; (* Source *)
ntPuits = 2; (* Puits *)
ntSrcPts = 3; (* Source et puits *)
(* Pour renvoi *)
ntOrg = 1; (* Début *)
ntFin = 2; (* Fin *)
(* Pour connexion *)
ntSans = 0; (* Normale *)
ntVt = 1; (* Verticale *)
ntHz = 2; (* Horizontale *)
ntVH = 3; (* Croissement *)
ntVhHg = 4; (* Vertical haut et horizontal gauche *)
ntVhHd = 8; (* Vertical haut et horizontal droit *)
ntVbHg = 16; (* Vertical bas et horizontal gauche *)
ntVbHd = 32; (* Vertical bas et horizontal droit *)
ntSens = 128; (* Ajout du sens montant *)
(* Pour réceptivité et action *)
nsDeb = 1; (* Début *)
nsExt = 2; (* Extension *)
nsFin = 4; (* Fin *)
nsAss = 8; (* Assignation *)
nsAff = 16; (* Affectation *)
nsCond = 32; (* Conditionnel *)
nsDact = 64; (* Désactivation *)
nsFor = 128; (* Forçage *)

(* Liste des convergences possibles *)
(* Pour étape, transition et extension *)
cgVide = 0; (* Pas de convergence *)
cgAmGE = 16+1; (* Amont gauche ET *)
cgAmDE = 16+2; (* Amont droit ET *)
cgAvGE = 16+4; (* Aval gauche ET *)
cgAvDE = 16+8; (* Aval droit ET *)
cgAmGO = 32+1; (* Amont gauche OU *)
cgAmDO = 32+2; (* Amont droit OU *)
cgAvGO = 32+4; (* Aval gauche OU *)
cgAvDO = 32+8; (* Aval droit OU *)
cgActEt = 64; (* Convergence Etape-Action *)
cgActTr = 128; (* Convergence Transition-Action *)
(* Pour action *)
cgActDeb = 256; (* Associé action liée étape : extension vers bas *)
cgActFin = 512; (* Associé action liée étape : extension vers haut *)
(* Pour connexion, renvoi, réceptivité: Néant *)

(* Définition des variables globales *)
var
(* Variables cellules : traitement, éditée, vue, origine symbole, associée *)
Cellule, Cell_Edit, Cell_Vue, Cell_Org, Cell_Ass, Cell_Lue : TCell;
Cell_Deb_Tr, Cell_Fin_Tr : TCell;
(* Position cellule : antérieure ou courant : X et Y *)
X_Cel_Ant, Y_Cel_Ant, X_Cel_Cur, Y_Cel_Cur, Q_Cel_Cur : SmallInt;
X_Cel_Deb, Y_Cel_Deb, Q_Cel_Deb, X_Cel_Fin, Y_Cel_Fin, Q_Cel_Fin : SmallInt;
(* Tableau de mémorisation d'une page *)
Table_Cell : Tbl_RCell;
(* Fichier de travail courant *)
WorkGR7,SaveGR7,FichGR7 : Text;
NomF : String;

implementation

procedure CreeNomWorkGR7 (var NomF : String);
var I : word;
Temp : String;
begin
Str(Vision_Graph.GR7Partiel:5,Temp);
NomF:='GRF'+Temp;
For I:=1 To Length(NomF) Do
If NomF[I]=' ' Then NomF[I]:='0';
Str(Vision_Graph.PageGraph,Temp);
NomF:=NomF+'.$'+Temp;
NomF:=Pt_Work+NomF;
end;

procedure OuvreEWorkGR7 ; (* Ouverture d'une page non existante *)
var I : SmallInt;
begin
(* Gérer la page graphique *)
Init_Tabl_CELL;
AffichePageGraphique;
AfficheGrilleGraphique;
{$I-}
(* Gérer l'accès fichier *)
CloseFile(WorkGR7);
If IOResult 0 Then I:=IOResult;
{$I+}
CreeNomWorkGR7(NomF);
AssignFile(WorkGR7,NomF);
Rewrite(WorkGR7)
end;

procedure OuvreLWorkGR7 ;
begin
AssignFile(WorkGR7,NomF);
Reset(WorkGR7);
end;

procedure FermeWorkGR7 ;
var I : SmallInt;
begin
(* Gérer l'accès fichier *)
{$I-}
CloseFile(WorkGR7);
If IOResult 0 Then I:=IOResult;
{$I+}
(* Ne pas mémoriser des fichiers vides : taille nulle *)
FindFirst(NomF,0,FWork);
if FWORK.Size=0 Then DeleteFile(NomF)
end;

procedure OuvreLEWorkGR7 ;
var I : SmallInt;
begin
(* Gérer la page graphique *)
Init_Tabl_CELL;
AffichePageGraphique;
AfficheGrilleGraphique;
(* Gérer l'accès fichier *)
{$I-}
CloseFile(WorkGR7);
If IOResult 0 Then I:=IOResult;
{$I+}
CreeNomWorkGR7(NomF);
If FileExists(NomF) Then Begin
OuvreLWorkGR7;
LitPageGR7;
FermeWorkGR7 End;
AssignFile(WorkGR7,NomF);
Rewrite(WorkGR7);
end;

procedure EcritPageGR7 ;
var iX,iY,Ind_Cell : Word;
begin
for iY:=0 to Vision_Graph.Y_Grille-1 do
for iX:=0 to Vision_Graph.X_Grille-1 do begin
Ind_Cell:= iY*Vision_Graph.X_Grille+iX;
if Table_Cell[Ind_Cell].Nature ntVide then
writeln(WorkGR7,Table_Cell[Ind_Cell].Grafcet:6,
Table_Cell[Ind_Cell].Page:4,
iX:4,
iY:4,
Table_Cell[Ind_Cell].Couleur:4,
Table_Cell[Ind_Cell].Nature:4,
Table_Cell[Ind_Cell].Connexion:4,
Table_Cell[Ind_Cell].Convergence:4,
Table_Cell[Ind_Cell].Indice:8,' ',
StrPas(Table_Cell[Ind_Cell].Extension));
end;
end;

procedure LitPageGR7 ;
var Page,Couleur,Nature,Connexion : byte;
Grafcet,Convergence : word;
Indice,iX,iY,Ind_Cell,I : smallint;
Extension : string;
Pt_Extension : PAnsiChar;
begin
While Not(Eof(WorkGR7)) do begin
readln(WorkGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);
I:=1;
While Extension[I]=' ' do I:=I+1; I:=I-1;
Delete(Extension,1,I);
Ind_Cell:= iY*Vision_Graph.X_Grille+iX;
Table_Cell[Ind_Cell].Grafcet:=Grafcet;
Table_Cell[Ind_Cell].Page:=Page;
Table_Cell[Ind_Cell].Couleur:=Couleur;
Table_Cell[Ind_Cell].Nature:=Nature;
Table_Cell[Ind_Cell].Connexion:=Connexion;
Table_Cell[Ind_Cell].Convergence:=Convergence;
Table_Cell[Ind_Cell].Indice:=Indice;
If Length(Extension)0 then begin
Pt_Extension:=StrAlloc(Length(Extension)+1);
Pt_Extension:=StrPCopy(Pt_Extension,Extension);
Table_Cell[Ind_Cell].Extension:=Pt_Extension end;
(* Restituer vue cellule *)
Cell_Lue.Extrait_Cellule(Table_Cell,iX,iY);
Cell_Lue.DrawCell;
end
end;

procedure AssembleWorkGR7;
var I,Attr : Integer;
Page,Couleur,Nature,Connexion : byte;
Grafcet,Convergence : word;
Indice,iX,iY : smallint;
Extension : string;
NomFGen,NomFWork : String;
NomPage : TSearchRec;
WorkPGR7 : Text;
begin
(* Sauver la page en cours *)
EcritPageGR7;
FermeWorkGR7;
(* Ecrire les parametres de la grille graphique *)
If NumAuto_Etape then I:=1 else I:=0;
writeln(CopyGR7,Vision_Graph.X_Grille:6,Vision_Graph.Y_Grille:6,GR7PartielMax:6,
I:6,Indice_Etape:6);
(* Lecture des différents fichiers de travail correspondant aux pages ouvertes *)
Attr:=0;
NomFGen:=Pt_Work+'GRF*.$*';
if FindFirst(NomFGen,Attr,NomPage)=0 then
begin
repeat
NomFWork:=Pt_Work+NomPage.Name;
AssignFile(WorkPGR7,NomFWork);
Reset(WorkPGR7);
While Not(Eof(WorkPGR7)) do begin
readln(WorkPGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);
I:=1;
While Extension[I]=' ' do I:=I+1; I:=I-1;
Delete(Extension,1,I);
writeln(CopyGR7,Grafcet:6,Page:4,iX:4,iY:4,Couleur:4,Nature:4,
Connexion:4,Convergence:4,Indice:8,' ',Extension)
end;
CloseFile(WorkPGR7);
until FindNext(NomPage)0;
FindClose(NomPage)
end;
(* Fermeture du fichier de copie *)
CloseFile(CopyGR7);
(* Réouvrir fichier existant page en cours en écriture *)
OuvreLEWorkGR7;
end;

procedure DeAssembleWorkGR7;
var I : Integer;
Page,Couleur,Nature,Connexion,PageAnt : byte;
Grafcet,Convergence,GrafcetAnt : word;
Indice,iX,iY : smallint;
Premier : boolean;
Extension,Temp : string;
NomF : String;
WorkPGR7 : Text;
begin
Premier:=True; GrafcetAnt:=0; PageAnt:=0;
(* Lire les parametres de la grille graphique *)
If Not(Eof(CopyGR7)) then readln(CopyGR7,Vision_Graph.X_Grille,Vision_Graph.Y_Grille,
GR7PartielMax,I,Indice_Etape);
If I0 then NumAuto_Etape:=True else NumAuto_Etape:=False;
(* Lecture du fichier GRF et constitution des différents fichiers de travail *)
While Not(Eof(CopyGR7)) do begin
readln(CopyGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);
I:=1;
While Extension[I]=' ' do I:=I+1; I:=I-1;
Delete(Extension,1,I);
if (GrafcetGrafcetAnt) Or (PagePageAnt)then begin
GrafcetAnt:=Grafcet;
PageAnt:=Page;
if Premier then Premier:=False else CloseFile(WorkPGR7);
Str(Grafcet:5,Temp);
NomF:='GRF'+Temp;
For I:=1 to Length(NomF) do if NomF[I]=' ' then NomF[I]:='0';
Str(Page,Temp);
NomF:=NomF+'.$'+Temp;
NomF:=Pt_Work+NomF;
AssignFile(WorkPGR7,NomF);
Rewrite(WorkPGR7) end;
writeln(WorkPGR7,Grafcet:6,Page:4,iX:4,iY:4,Couleur:4,Nature:4,
Connexion:4,Convergence:4,Indice:8,' ',Extension)
end;
(* Fermeture des fichiers de copie et de travail *)
CloseFile(WorkPGR7);
CloseFile(CopyGR7)
end;

procedure Init_Tabl_CELL;
var I : integer;
begin
for I :=0 to (Vision_Graph.X_Grille*Vision_Graph.Y_Grille)-1 do
begin
Table_Cell[I].Grafcet := EditGR7.Vision_Graph.GR7Partiel ;
Table_Cell[I].Page := EditGR7.Vision_Graph.PageGraph ;
Table_Cell[I].Nature := ntVide ;
Table_Cell[I].Connexion := ntVide ;
Table_Cell[I].Convergence := ntVide ;
Table_Cell[I].Indice := -1 ;
Table_Cell[I].Extension := nil end
end;

(* Affichage dans la fenêtre graphique
=================================== *)
procedure Des_EtapeCadre ( Org_X,Org_Y : word );
begin
with EdtGR7.Image do
begin
Canvas.MoveTo(Org_X+4,Org_Y+5);
Canvas.LineTo(Org_X+T_Cell-4,Org_Y+5);
Canvas.LineTo(Org_X+T_Cell-4,Org_Y+T_Cell-5);
Canvas.LineTo(Org_X+4,Org_Y+T_Cell-5);
Canvas.LineTo(Org_X+4,Org_Y+5) end
end;

procedure Des_InitCadre ( Org_X,Org_Y : word );
begin
with EdtGR7.Image do
begin
Canvas.MoveTo(Org_X+6,Org_Y+7);
Canvas.LineTo(Org_X+T_Cell-6,Org_Y+7);
Canvas.LineTo(Org_X+T_Cell-6,Org_Y+T_Cell-7);
Canvas.LineTo(Org_X+6,Org_Y+T_Cell-7);
Canvas.LineTo(Org_X+6,Org_Y+7) end
end;

procedure AffichePageGraphique;
var TexteTemp : string;
begin
(* Ecrire titre de la page graphique *)
Str(Vision_Graph.GR7Partiel:2,TexteTemp);
EdtGR7.TitrePage.Caption := ' Grafcet Partiel : '+ TexteTemp;
Str(Vision_Graph.PageGraph:2,TexteTemp);
EdtGR7.TitrePage.Caption := EdtGR7.TitrePage.Caption + ' - Page : ' + TexteTemp;
end;

procedure CreeZoneGraphique;
var
Bitmap: TBitmap;
begin
if Not Vision_Graph.Ouvert then
(* Créer le bitmap image de la zone d'affichage graphique *)
begin
Bitmap := nil;
try
Bitmap := TBitmap.Create;
Bitmap.Width := T_Cell*Vision_Graph.X_Grille+2*O_h;
Bitmap.Height := T_Cell*Vision_Graph.Y_Grille+2*O_v;
EdtGR7.Image.Picture.Graphic := Bitmap;
finally
Bitmap.Free
end;
Vision_Graph.Ouvert := True
end
end;

procedure AfficheGrilleGraphique;
var I : word;
begin
(* Créer la grille d'affichage graphique *)
with EdtGR7.Image do
begin
Canvas.FillRect(Rect(0,0,T_Cell*Vision_Graph.X_Grille+2*O_h,T_Cell*Vision_Graph.Y_Grille+2*O_v));
Canvas.Pen.Color:= clSilver;
for I:=0 to Vision_Graph.Y_Grille do
begin
Canvas.MoveTo(O_h,O_v+I*T_Cell);
Canvas.LineTo (O_h+T_Cell*Vision_Graph.X_Grille,O_v+I*T_Cell);
end;
for I:=0 to Vision_Graph.X_Grille do
begin
Canvas.MoveTo(O_h+I*T_Cell,O_v);
Canvas.LineTo (O_h+I*T_Cell,O_v+T_Cell*Vision_Graph.Y_Grille);
end;
end
end;

procedure TCell.Extrait_Cellule(var Table_Cell: Tbl_RCell; X, Y: SmallInt);
var Ind_Cell : SmallInt;
begin
if (X>=0) And (Y>=0) And
(X=0) And
(Self.XPos=0) And
(Self.XPos= 0 then Texte:= Format('M%u',[Self.Indice])
else Texte:= 'M#' end;
ntEncap : begin
Canvas.MoveTo(Org_X+4,Org_Y+13);
Canvas.LineTo(Org_X+12,Org_Y+5);
Canvas.MoveTo(Org_X+T_Cell-4,Org_Y+13);
Canvas.LineTo(Org_X+T_Cell-12,Org_Y+5);
Canvas.MoveTo(Org_X+T_Cell-4,Org_Y+T_Cell-13);
Canvas.LineTo(Org_X+T_Cell-12,Org_Y+T_Cell-5);
Canvas.MoveTo(Org_X+4,Org_Y+T_Cell-13);
Canvas.LineTo(Org_X+12,Org_Y+T_Cell-5);
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#' end;
ntMacEnt: begin
if Self.Indice >= 0 then Texte:= Format('E%u',[Self.Indice])
else Texte:= 'E#' end;
ntMacSor: begin
if Self.Indice >= 0 then Texte:= Format('S%u',[Self.Indice])
else Texte:= 'S#' end;
ntActive: begin
Canvas.MoveTo(Org_X+1,Org_Y+10);
Canvas.LineTo(Org_X+3,Org_Y+13);
Canvas.MoveTo(Org_X+1,Org_Y+13);
Canvas.LineTo(Org_X+3,Org_Y+10);
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#' end;
ntEtape+ntInitial: begin
Des_InitCadre(Org_X,Org_Y);
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#' end;
ntEncap+ntInitial: begin
Des_InitCadre(Org_X,Org_Y);
Canvas.MoveTo(Org_X+6,Org_Y+13);
Canvas.LineTo(Org_X+12,Org_Y+7);
Canvas.MoveTo(Org_X+T_Cell-6,Org_Y+13);
Canvas.LineTo(Org_X+T_Cell-12,Org_Y+7);
Canvas.MoveTo(Org_X+T_Cell-6,Org_Y+T_Cell-13);
Canvas.LineTo(Org_X+T_Cell-12,Org_Y+T_Cell-7);
Canvas.MoveTo(Org_X+6,Org_Y+T_Cell-13);
Canvas.LineTo(Org_X+12,Org_Y+T_Cell-7);
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#' end;
ntActive+ntInitial: begin
Canvas.MoveTo(Org_X+1,Org_Y+10);
Canvas.LineTo(Org_X+3,Org_Y+13);
Canvas.MoveTo(Org_X+1,Org_Y+13);
Canvas.LineTo(Org_X+3,Org_Y+10);
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#' end;
end;
case Length(Texte) of
1 : Canvas.TextOut(Org_X+13,Org_Y+11,Texte);
2 : Canvas.TextOut(Org_X+10,Org_Y+11,Texte);
3 : Canvas.TextOut(Org_X+8,Org_Y+11,Texte);
else Canvas.TextOut(Org_X+6,Org_Y+11,Texte)
end;
if (Self.Connexion And ntSource)=0 then
case Self.Convergence And (32+3) of
(32+1): begin
Canvas.MoveTo(Org_X ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
(32+2): begin
Canvas.MoveTo(Org_X+T_Cell,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
(32+3): begin
Canvas.MoveTo(Org_X,Org_Y+1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+1);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
else begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
end;
if (Self.Connexion And ntPuits)=0 then
case Self.Convergence And (32+12) of
(32+4): begin
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
(32+8): begin
Canvas.MoveTo(Org_X+T_Cell,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4); end;
(32+12): begin
Canvas.MoveTo(Org_X,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
else begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
end;
if (Self.Convergence And cgActEt)0 then begin
Canvas.MoveTo(Org_X+T_Cell-4,Org_Y+(T_Cell Div 2));
Canvas.LineTo(Org_X+T_Cell,Org_Y+(T_Cell Div 2)) end;
end;
ntTrans : begin (* Transition *)
Canvas.Pen.Width := 3;
Canvas.MoveTo(Org_X+9,Org_Y+16);
Canvas.LineTo(Org_X+T_Cell-9,Org_Y+16);
Canvas.Pen.Width := 1;
if Self.Extension=nil then Texte:= '#'
else Texte:= StrPas(Self.Extension);
Canvas.TextOut(Org_X+T_Cell-6,Org_Y+11,Texte);
if (Self.Connexion And ntSource)=0 then
case Self.Convergence And (16+3) of
(16+1): begin
Canvas.MoveTo(Org_X ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.MoveTo(Org_X ,Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
(16+2): begin
Canvas.MoveTo(Org_X+T_Cell,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.MoveTo(Org_X+T_Cell,Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
(16+3): begin
Canvas.MoveTo(Org_X,Org_Y+1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+1);
Canvas.MoveTo(Org_X,Org_Y+4);
Canvas.LineTo(Org_X+T_Cell,Org_Y+4);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
else begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
end;
if (Self.Connexion And ntPuits)=0 then
case Self.Convergence And (16+12) of
(16+4): begin
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
(16+8): begin
Canvas.MoveTo(Org_X+T_Cell,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X+T_Cell,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
(16+12): begin
Canvas.MoveTo(Org_X,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell-4);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
else begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+16) end;
end;
if (Self.Convergence And cgActTr)0 then begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+(T_Cell Div 2));
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell) end;
end;
ntConnex: begin (* Arc *)
case (Self.Connexion And (Not ntSens)) of
ntSans: begin
if (Self.Convergence And 16)0 then begin
if (Self.Convergence And 1)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.MoveTo(Org_X ,Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
if (Self.Convergence And 2)0 then begin
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
if (Self.Convergence And 4)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
if (Self.Convergence And 8)0 then begin
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
end;
if (Self.Convergence And 32)0 then begin
if (Self.Convergence And 1)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1) end;
if (Self.Convergence And 2)0 then begin
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1) end;
if (Self.Convergence And 4)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1) end;
if (Self.Convergence And 8)0 then begin
Canvas.MoveTo(Org_X+T_Cell ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1) end;
end;
end;
ntVt : begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell) end;
ntHz : begin
Canvas.MoveTo(Org_X,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell Div 2) end;
ntVH : begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell);
Canvas.MoveTo(Org_X,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell Div 2) end;
ntVhHg: begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X,Org_Y+T_Cell Div 2) end;
ntVhHd: begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell Div 2) end;
ntVbHg: begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y+T_Cell);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X,Org_Y+T_Cell Div 2) end;
ntVbHd: begin
Canvas.MoveTo(Org_X+T_Cell Div 2,Org_Y+T_Cell);
Canvas.LineTo(Org_X+T_Cell Div 2,Org_Y+T_Cell Div 2);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell Div 2) end;
end;
if (Self.Connexion And ntSens) 0 then begin
case Self.Couleur of
clNoir : Canvas.Brush.Color := clBlack;
clRouge : Canvas.Brush.Color := clRed;
clBleu : Canvas.Brush.Color := clBlue;
clVert : Canvas.Brush.Color := clGreen;
clGris : Canvas.Brush.Color := clGray;
end;
Canvas.Polygon([Point(Org_X+(T_Cell Div 2),Org_Y+10),
Point(Org_X+10,Org_Y+T_Cell-10),
Point(Org_X+T_Cell-10,Org_Y+T_Cell-10)]);
Canvas.Brush.Color := clWhite
end
end;
ntRenvoi: begin (* Renvoi *)
if Self.Indice >= 0 then Texte:= Format('%u',[Self.Indice])
else Texte:= '#';
if (Self.Connexion And ntOrg)0 then begin
Case Length(Texte) of
1 : Canvas.TextOut(Org_X+13,Org_Y+20,Texte);
2 : Canvas.TextOut(Org_X+10,Org_Y+20,Texte);
3 : Canvas.TextOut(Org_X+8,Org_Y+20,Texte);
else Canvas.TextOut(Org_X+6,Org_Y+20,Texte)
end;
Canvas.MoveTo(Org_X+16,Org_Y);
Canvas.LineTo(Org_X+16,Org_Y+12);
Canvas.LineTo(Org_X+10,Org_Y+12);
Canvas.LineTo(Org_X+16,Org_Y+20);
Canvas.LineTo(Org_X+T_Cell-10,Org_Y+12);
Canvas.LineTo(Org_X+16,Org_Y+12)
end
else begin
Case Length(Texte) of
1 : Canvas.TextOut(Org_X+13,Org_Y+1,Texte);
2 : Canvas.TextOut(Org_X+10,Org_Y+1,Texte);
3 : Canvas.TextOut(Org_X+8,Org_Y+1,Texte);
else Canvas.TextOut(Org_X+6,Org_Y+1,Texte)
end;
Canvas.MoveTo(Org_X+16,Org_Y+T_Cell);
Canvas.LineTo(Org_X+16,Org_Y+T_Cell-12);
Canvas.LineTo(Org_X+10,Org_Y+T_Cell-20);
Canvas.LineTo(Org_X+T_Cell-10,Org_Y+T_Cell-20);
Canvas.LineTo(Org_X+16,Org_Y+T_Cell-12)
end;
end;
ntRecept: begin (* Réceptivité *)
if (Self.Convergence And 16)0 then begin
if (Self.Convergence And 1)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.MoveTo(Org_X ,Org_Y+4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+4) end;
if (Self.Convergence And 2)0 then begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+1);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+4);
Canvas.LineTo(Org_X+T_Cell,Org_Y+4) end
end;
if (Self.Convergence And 16)0 then begin
if (Self.Convergence And 4)0 then begin
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X ,Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4) end;
if (Self.Convergence And 8)0 then begin
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-1);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell-1);
Canvas.MoveTo(Org_X+(T_Cell Div 2),Org_Y+T_Cell-4);
Canvas.LineTo(Org_X+T_Cell,Org_Y+T_Cell-4) end
end;
I:=0;
repeat begin
I:=I+1;
Cellule.Extrait_Cellule(Table_Cell,Self.XPos-I,Self.YPos)
end until (Cellule.Nature=ntTrans) Or (Self.XPos
0

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

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 mars 2006 à 01:16
Moi cela m'amuse toujours de voir un "debutant" (ce n'est pas pejoratif, debutant nous fumes tous un jours) se lancer dans la programmation.

Mon ami, tu vas passer par ces 4 etapes ...

1) la decouverte de l'IDE, le debutant la voie comme une laboratoire de savant fou, des bouttons et du texte partout, bref, il ne sais ou ni sur quoi cliquer pour avoir un semblant de resultat ... mais que cela n'entache pas ta motivation.

2) la desillusion, le debutant se confronte a la syntaxe du langage en lui meme, il n'y connais rien, n'a pas de livre et s'appraite a bientot crier au secours comme si il se retrouvait face a face avec un legendaire demon de l'enfer ... mais que cela n'entache pas ta motivation.

3) le trou noir, le debutant tombe nez a nez avec les differents principes aux noms barbare POO, RAD, Classe, Pointeurs, Methodologie, Logique, Mathematique, structure, enregistrement, variable, constante, constante variable, type, type typé, type non typé, programmation abstraite, logique inverse ect... ect... mais que cela n'entache pas ta motivation.

4) Le denouement, la lumiere au bout du tunel, le debutant trouve enfin des gens qui vont le guider vers la lumiere de la maitrise du langage, les principes deviennent clair, les connaissances tombent de toute part, le debutant s'enrichie de l'experience des vieux maitres, la maitrise est a sa portée ... mais ta route n'est pas finie encore donc entretien ta motivation.

voila, a defaut de t'expliquer ... je t'encourage.

en passant, tu devrais commencer par plus simple pour un debut.

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0
Utilisateur anonyme
14 mars 2006 à 01:30
Salut,

Juste deux petites choses :

*FoXi a raison au début on rame pas mal, on comprend rien. Et puis tout d'un coup tout s'illumine et on progresse alors tres vite. Surtout un petit conseil : ne pas désesperer. Car ce n'est pas si dur que cela et surtout c'est passionnant.

*Pourquoi utiliser Delphi pour faire un grafcet ??

N'hésites surtout pas à poster car sur ce site il y a des gens formidables (dont deux que tu viens de connaitre) qui de part le savoir et leur disponibilité t'apporteront beaucoup.

C'est le moment de le dire : Merci à vous les gars.
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
14 mars 2006 à 02:19
merci à francky
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
14 mars 2006 à 09:15
salut,

si j'ai bien compris tu veux intégrer l'unité graphcet à un nouveau projet?

C'est très simple:

Quand tu as ouvert delphi du fait :

fichier--->nouveau-->nouvelle unité

ceci t'ouvre une fenêtre nommée unit2

tu copies ton code dans cette fenêtre puis tu fais Fichier-->>sauvegarder

tu enregistres avec pour nom : GestionGR7 à cette instant tu as creer une novelle unité nommée GestionGR7

Pour pouvoir l'utiliser dans le projet retourne sur unit1

et ajoutes l'unité dans la clause uses:

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs,GestionGR7 ;

Cette unité sera également éutilisable dans d'autres projets .
Dans un autre projet pour utiliser cette unité il te suffira de faire
projet projet ---> ajouter au projet

Mais je le répètes si tu commences en DELPHI fais toi la main sur des
exemples simples pour voir comment réagissent les controle (boutons,
listes boite de dialogue....) sinon tu vas te prendre la tête et tu
n'arriveras à rien.

Si tu as déja programmé ce sera assez simple sinon il te faudra tout apprendre et là ce sera beaucoup beaucoup plus long.



Pour marcher il faut mettre un pied devant l'autre Et on ne s'attaque pas au maranthon olympique sans un très bon entrainement





@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
14 mars 2006 à 12:34
merci ; en fait j'ai déja etudié sur un livre de programmation delphi . mais il me monque l'application ;
mais dans votre reponce vous n'avez rien dis sur le 1er Teste (c'est un fichier grf) comment je doit fair pour relier ce ficher avec mon projet
merci trés bien car vous me reponez vite :-).
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
14 mars 2006 à 14:26
Plusieurs choses:

1) ce que tu as donné est une unité faisant partie d'un programme. Elle appellé par le programme et n'est pas utilisable seule

2) il te manque une unité : EditGR7 sans cette unité tu ne pourras pas compiler ton projet:

3) le test que tu donnes n'est pas le graphcet mais apparament la table
de vérité qui conduit au graphcet ce qui est tout à fait différent .
Résoudre une telle table demande la mise en place d'algorythmes qui
dépasse largement le cadre du forum (c'est une étude complète qui peut
représenter plusieurs centaines de lignes de code) Recherche sur google
tu devrais y trouver les méthodes de résolution des équations Ces
méthodes sont indépendantes du langage et relève de l'algèbre
booléenne. Si tu rencontre des difficultés pour mettre sous forme de
code ces équations alors à ce moment nous pourrans t'être utile.

4) Si tu dois déterminer les étapes à partir du fichier .GRF c'est différents

Ce fichier est un fichier texte WorkPGR7 dont la structure est:



Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension

avec:

Page,Couleur,Nature,Connexion: byte;

Grafcet,Convergence: word;

Indice,iX,iY : smallint;

Premier : boolean;

Extension : string;



tu trouveras les méthodes d'ouverture et de lecture dans la procedure AssembleWorkGR7

en décodant Nature,Connexion,Convergence,Indice et des
constantes décrites dans l'inferaces tu peux déterminer le nombre
d'étapes (à mon avis avec la nature de l'étape cela devrait suffir )

5) Comme je te l'ai à l'ouverture de DELPHI tu crée ton projet en incluant les unités dont tu as besoin



bon j'esprère n'avoir rien oublier



@+

jlen
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
14 mars 2006 à 18:04
voila tous ce que j'ai plus unit GestionGR7 qui j'ai déja montrer et le le 1er teste ;
:

Description des diverses variables représentant une cellule graphique :
------------------------------------------------------------------------
------------------------------------------------------------------------

Une cellule graphique est représentée par un objet décrit comme suit :
TCell = class(TObject)
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 : byte; (* Gestion de la convergence *)
Indice : smallint; (* Indice numérique associé à l'objet *)
Extension : PansiChar; (* Pointeur vers chaîne de caractères associée *)
procedure Extrait_Cellule(var Table_Cell: Tbl_RCell; X, Y: SmallInt);
procedure Sauve_Cellule(var Table_Cell: Tbl_RCell; X, Y: SmallInt);
procedure DrawCell(X, Y : SmallInt);
private
{ Private declarations }
public
{ Public declarations }
end;

La fonctionnalité de base est la Nature définie comme suit :
(* Liste des natures possibles pour la cellule *)
ntVide = 0; (* Vierge *)
ntEtape = 1; (* Etape *)
ntMacro = 2; (* Macro-étape *)
ntEncap = 3; (* Etape encapsulante *)
ntMacEnt = 4; (* Etape début de macro *)
ntMacSor = 5; (* Etape sortie de macro *)
ntActive = 6; (* Etape encapsulée activée *)
ntInitial= 16; (* Initilisation en ET avec le type*)
ntTrans = 32; (* Transition *)
ntConnex = 64; (* Connexion *)
ntRenvoi = 65; (* Renvoi *)
ntRecept = 66; (* Réceptivité *)
ntAction = 67; (* Action *)
ntConver = 128; (* Extension de convergence *)

Pour chacun de ces types, les fonctionnalités Connexion et Convergence précisent l'interconnexion avec les cellules voisines ou le schéma de représentation.

Ainsi pour une étape, on a :
(* Liste des connexions possibles *)
ntConnect= 0; (* Normale *)
ntSource = 1; (* Source *)
ntPuits = 2; (* Puits *)
ntSrcPts = 3; (* Source et puits *)
(* Liste des convergences possibles *)
cgVide = 0; (* Pas de convergence *)
cgAmGO = 32+1; (* Amont gauche OU *)
cgAmDO = 32+2; (* Amont droit OU *)
cgAvGO = 32+4; (* Aval gauche OU *)
cgAvDO = 32+8; (* Aval droit OU *)
cgActEt = 64; (* Convergence Etape-Action *)

Pour une transition, on a ;
(* Liste des connexions possibles *)
ntConnect= 0; (* Normale *)
ntSource = 1; (* Source *)
ntPuits = 2; (* Puits *)
ntSrcPts = 3; (* Source et puits *)
(* Liste des convergences possibles *)
cgVide = 0; (* Pas de convergence *)
cgAmGE = 16+1; (* Amont gauche ET *)
cgAmDE = 16+2; (* Amont droit ET *)
cgAvGE = 16+4; (* Aval gauche ET *)
cgAvDE = 16+8; (* Aval droit ET *)
cgActTr = 128; (* Convergence Transition-Action *)

Pour un renvoi, on a :
(* Liste des connexions possibles *)
ntOrg = 1; (* Début *)
ntFin = 2; (* Fin *)
(* Liste des convergences possibles *)
Néant

Pour une action, on a :
(* Liste des connexions possibles *)
nsDeb = 1; (* Début *)
nsExt = 2; (* Extension *)
nsFin = 4; (* Fin *)
nsAss = 8; (* Assignation *)
nsAff = 16; (* Affectation *)
nsCond = 32; (* Conditionnel *)
nsDact = 64; (* Désactivation *)
nsFor = 128; (* Forçage *)
(* Liste des convergences possibles *)
cgVide = 0; (* Pas de convergence *)
cgAmGO = 32+1; (* Amont gauche OU *)
cgAmDO = 32+2; (* Amont droit OU *)
cgAvGO = 32+4; (* Aval gauche OU *)
cgAvDO = 32+8; (* Aval droit OU *)
cgActEt = 64; (* Convergence Etape-Action *)
cgActTr = 128; (* Convergence Transition-Action *)
cgActExt = 16+2; (* Associé action liée étape : action intermédiaire *)
cgActFin = 16+4; (* Associé action liée étape : action finale *)

Pour une réceptivité (extension de la transition réservée à l'écriture de la réceptivité), on a :
(* Liste des connexions possibles *)
Néant
(* Liste des convergences possibles *)
cgVide = 0; (* Pas de convergence *)
cgAmGE = 16+1; (* Amont gauche ET *)
cgAmDE = 16+2; (* Amont droit ET *)
cgAvGE = 16+4; (* Aval gauche ET *)
cgAvDE = 16+8; (* Aval droit ET *)

Pour une connexion, on a :
(* Liste des connexions possibles *)
ntSans = 0; (* Normale *)
ntVt = 1; (* Verticale *)
ntHz = 2; (* Horizontale *)
ntVH = 3; (* Croisement *)
ntVhHg = 4; (* Vertical haut et horizontal gauche *)
ntVhHd = 8; (* Vertical haut et horizontal droit *)
ntVbHg = 16; (* Vertical bas et horizontal gauche *)
ntVbHd = 32; (* Vertical bas et horizontal droit *)
ntSEns = 64 ; (* Indique le sens de parcours inversé *)
(* Liste des convergences possibles *)
Néant

Pour une convergence (cellule vide utilisée en extension d'une étape ou d'une transition), on a :
(* Liste des connexions possibles *)
Néant
(* Liste des convergences possibles *)
cgVide = 0; (* Pas de convergence *)
cgAmGE = 16+1; (* Amont gauche ET *)
cgAmDE = 16+2; (* Amont droit ET *)
cgAvGE = 16+4; (* Aval gauche ET *)
cgAvDE = 16+8; (* Aval droit ET *)
cgAmGO = 32+1; (* Amont gauche OU *)
cgAmDO = 32+2; (* Amont droit OU *)
cgAvGO = 32+4; (* Aval gauche OU *)
cgAvDO = 32+8; (* Aval droit OU *)
cgActEt = 64; (* Convergence Etape-Action *)
cgActTr = 128; (* Convergence Transition-Action *)

La fonctionnalité Indice est réservée aux étapes (numéro), aux transitions(non utilisé), réceptivités et actions (nombre de cellules utilisées dans la représentation).

La fonctionnalité Extension permet l'association d'un texte (transition, action).

////////////////////////////////////////////////////////////////////////
unit ValiderSauve;

{$DEFINE WIN32}

interface

uses
Windows, Messages, SysUtils, Types, Classes, Variants,
{$IFDEF WIN32 }
Graphics, Controls, Forms, Dialogs, StdCtrls,
{$ELSE}
QTypes, QGraphics, QControls, QForms, QDialogs, QStdActns,
{$ENDIF}
EditGR7, GestionGR7;

type
TFenVallideSave = class(TForm)
Texte: TLabel;
BtOUI: TButton;
BtNON: TButton;
Valide: TLabel;
procedure FormActivate(Sender: TObject);
procedure BtOUIClick(Sender: TObject);
procedure BtNONClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
FenVallideSave: TFenVallideSave;

implementation

{$IFDEF WIN32}
{$R *.dfm}
{$ELSE}
{$R *.xfm}
{$ENDIF}

procedure TFenVallideSave.FormActivate(Sender: TObject);
begin
Texte.Caption := 'Fichier '+ NomFSave +' modifié'
end;

procedure TFenVallideSave.BtOUIClick(Sender: TObject);
begin
AssignFile(CopyGR7,NomFSave);
Rewrite(CopyGR7);
AssembleWorkGR7;
Close
end;

procedure TFenVallideSave.BtNONClick(Sender: TObject);
begin
Close
end;

end.


//////////////////////////////////////////////////////
alors mnt le probléme est bien posé ce qu'il me faut c'est de calculer le nombre des étape par exmple pour le le 1 ere testeet .
si vous avez bien comprenez mon but vous peuvez m'aider pour faire ce programme ; merci :-).
0
Utilisateur anonyme
14 mars 2006 à 20:58
Salut,

Différentes choses :

*Déjà c'est quoi un grafcet ?? "c'est un outil graphique (on réalise des sortes de synoptiques)pour l'automatisme séquentiel". Autrement dit c'est un "langage" pour programmer des automates (appareils utilisés pour l'automatisme dans les sites industriels).

*Il existes des logiciels tout fait pour faire des automates : il suffit de cliquer sur des petit carrés et de créer des instructions ouvert fermé selon ce que doit faire l'automate (bon là je schématise bcp). Pk utiliser des delphi alors que Siemens par exemple (désolé pour la pub) fait des logiciels pour faire des grafcet ?
0
mostafaziad Messages postés 21 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 12 juillet 2007
14 mars 2006 à 21:12
salut francky
oui il existes bq des méthodes pour fair des grafcet mais ce que je veudrai fair c'est un petit projet d'etude ; qui calcule les etaps d'un grafcet par la programmation delphi et ce n'est pas avec d'autre méthode .
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
15 mars 2006 à 09:01
bonjour a tous;
en fait je suis aussi tres debutant en delphi mais je connais un peu en c++,ma question est comment ecrire un petit programme qui m'affiche par exemple un petit message sans utiliser la fenetre grise(label ,boutton..) comme en c++,mon probleme c keske je dois ouvrir pour ecrire ce programme
merci bcp d'avance
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
15 mars 2006 à 09:18
salut,

mostafaziad---> je ne t'oublie pas et je te répondrai dns la journée



jamal9030---> ta question aurais du faire l'objet d'un autre post mais je vai te répondre

en DELPHI la propriété caption correspond à la proptiété text de C++ pour écrire dedans il suffit de faire:

Label1.caption:='XXXXX';

Button1.caption:='XXXX';

StaticText1.caption:='XXXX';

exception pour le TEdit et ses descendants pour lesquels cette propriété est text.

Edit1.Text:='XXXX';

@+

jlen
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
17 mars 2006 à 19:33
salut,merci pour tous c'est un tres bon forum je trouve,merci a tous.
pour jlien100,en fait ce que je cherchais c'est travailler sur une application console,j'ai trouvé,le but est crée un programme qui utilise le fichier .grf(voir en annexe)et de determiner le nombre d'etape en attestant si "nature=16",pour cela il faut (je pense):
1)inclure le fichier test6.grf dans uses??qd je compile,il me sort erreur:il connait pas ce fichier,comment faire exactement?
2)pour ecrire ce programme je dois utiliser(travailler sur)test6.grf pour le lire je dois ecrire ceci:
writeln(CopyGR7,Grafcet:6,Page:4,iX:4,iY:4,Couleur:4,Nature:4,
Connexion:4,Convergence:4,Indice:8,' ',Extension)
ou tout la procedure AssembleWorkGR7 et DeAssembleWorkGR7 (voir annexe) et eventuellemnt tout ce qui defini a l'interieur de ces 2 procedures,sinon comment faire exactement?
annexe:
1)
24 15 1 1 4
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
2)
procedure AssembleWorkGR7;
var I,Attr : Integer;
Page,Couleur,Nature,Connexion : byte;
Grafcet,Convergence : word;
Indice,iX,iY : smallint;
Extension : string;
NomFGen,NomFWork : String;
NomPage : TSearchRec;
WorkPGR7 : Text;
begin
(* Sauver la page en cours *)
EcritPageGR7;
FermeWorkGR7;
(* Ecrire les parametres de la grille graphique *)
If NumAuto_Etape then I:=1 else I:=0;
writeln(CopyGR7,Vision_Graph.X_Grille:6,Vision_Graph.Y_Grille:6,GR7PartielMax:6,
I:6,Indice_Etape:6);
(* Lecture des différents fichiers de travail correspondant aux pages ouvertes *)
Attr:=0;
NomFGen:=Pt_Work+'GRF*.$*';
if FindFirst(NomFGen,Attr,NomPage)=0 then
begin
repeat
NomFWork:=Pt_Work+NomPage.Name;
AssignFile(WorkPGR7,NomFWork);
Reset(WorkPGR7);
While Not(Eof(WorkPGR7)) do begin
readln(WorkPGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);
I:=1;
While Extension[I]=' ' do I:=I+1; I:=I-1;
Delete(Extension,1,I);
writeln(CopyGR7,Grafcet:6,Page:4,iX:4,iY:4,Couleur:4,Nature:4,
Connexion:4,Convergence:4,Indice:8,' ',Extension)
end;
CloseFile(WorkPGR7);
until FindNext(NomPage)<>0;
FindClose(NomPage)
end;
(* Fermeture du fichier de copie *)
CloseFile(CopyGR7);
(* Réouvrir fichier existant page en cours en écriture *)
OuvreLEWorkGR7;
end;
procedure DeAssembleWorkGR7;
var I : Integer;
Page,Couleur,Nature,Connexion,PageAnt : byte;
Grafcet,Convergence,GrafcetAnt : word;
Indice,iX,iY : smallint;
Premier : boolean;
Extension,Temp : string;
NomF : String;
WorkPGR7 : Text;
begin
Premier:=True; GrafcetAnt:=0; PageAnt:=0;
(* Lire les parametres de la grille graphique *)
If Not(Eof(CopyGR7)) then readln(CopyGR7,Vision_Graph.X_Grille,Vision_Graph.Y_Grille,
GR7PartielMax,I,Indice_Etape);
If I<>0 then NumAuto_Etape:=True else NumAuto_Etape:=False;
(* Lecture du fichier GRF et constitution des différents fichiers de travail *)
While Not(Eof(CopyGR7)) do begin
readln(CopyGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);
I:=1;
While Extension[I]=' ' do I:=I+1; I:=I-1;
Delete(Extension,1,I);
if (Grafcet<>GrafcetAnt) Or (Page<>PageAnt)then begin
GrafcetAnt:=Grafcet;
PageAnt:=Page;
if Premier then Premier:=False else CloseFile(WorkPGR7);
Str(Grafcet:5,Temp);
NomF:='GRF'+Temp;
For I:=1 to Length(NomF) do if NomF[I]=' ' then NomF[I]:='0';
Str(Page,Temp);
NomF:=NomF+'.$'+Temp;
NomF:=Pt_Work+NomF;
AssignFile(WorkPGR7,NomF);
Rewrite(WorkPGR7) end;
writeln(WorkPGR7,Grafcet:6,Page:4,iX:4,iY:4,Couleur:4,Nature:4,
Connexion:4,Convergence:4,Indice:8,' ',Extension)
end;
(* Fermeture des fichiers de copie et de travail *)
CloseFile(WorkPGR7);
CloseFile(CopyGR7)
end;
merci a tous,bonne soirée
0
jamal9030 Messages postés 8 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 25 mars 2006
17 mars 2006 à 20:18
j'ai oublié de signaler qu'on doit pas editer une page graphique c juste la lire et chaque fois calculer ou verifier quelque proprieté.comme par exemple ici compter combien il y a d'etape cad nature=16.
merci
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 mars 2006 à 21:20
bonjour,

le fichier test6.grf étant un fichier de données tu ,e peux pas
l'inclure dans les clauses parceque'il ne serait pas reconnu par
le compilateur mais il faut que ce fichier soit présent sur le disque.

2)tu n'es pas obliger d'utiliser toute la procédure AssembleWorkGR7
mais seulement ce qui concerne l'ouverture du fichier et la lecture;
comme tu ne modifies pas le fichier se n'est pas la peine d'en faire
une copie.

AssignFile(WorkPGR7,NomFWork);

Reset(WorkPGR7);//pour l'ouverture

NombreEtape:= 0; //on initialise le compteur d'étape

While Not(Eof(WorkPGR7)) do

begin

readln(WorkPGR7,Grafcet,Page,iX,iY,Couleur,Nature,Connexion,Convergence,Indice,Extension);//seule la partie lecture nous intéresse

if nature =16 then inc(NombreEtape);//ici on vérifie si c'est une étape et on incrémente le compteur d'étape

end;

CloseFile(WorkPGR7);//on referme le fichier



@+

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 à 14:46
salut jlen
mais comment je doit declairer WorkPGR7 et NomFWork
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 à 15:01
salut ,

je t'ai envoyé la réponse en MP



@+

jlen
0
Rejoignez-nous