diff --git a/Notice d'utilisation des signaux_complexes_GL_V1.5.pdf b/Notice d'utilisation des signaux_complexes_GL_V1.6.pdf similarity index 66% rename from Notice d'utilisation des signaux_complexes_GL_V1.5.pdf rename to Notice d'utilisation des signaux_complexes_GL_V1.6.pdf index 3c704a6..92fb3b9 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V1.5.pdf and b/Notice d'utilisation des signaux_complexes_GL_V1.6.pdf differ diff --git a/Signaux_complexes_GL.dof b/Signaux_complexes_GL.dof index 490e277..5573344 100644 --- a/Signaux_complexes_GL.dof +++ b/Signaux_complexes_GL.dof @@ -130,3 +130,6 @@ OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; diff --git a/Signaux_complexes_GL.dpr b/Signaux_complexes_GL.dpr index c0dc88b..428e4aa 100644 --- a/Signaux_complexes_GL.dpr +++ b/Signaux_complexes_GL.dpr @@ -19,8 +19,8 @@ begin Application.CreateForm(TFormDebug, FormDebug); Application.CreateForm(TFormPilote, FormPilote); Application.CreateForm(TFormSimulation, FormSimulation); - Application.CreateForm(TFormTCO, FormTCO); Application.CreateForm(TFormConfig, FormConfig); Application.CreateForm(TFormConfigTCO, FormConfigTCO); + Application.CreateForm(TFormVersion, FormVersion); Application.Run; end. diff --git a/UnitConfigTCO.dfm b/UnitConfigTCO.dfm index e52c26b..8b26ef3 100644 --- a/UnitConfigTCO.dfm +++ b/UnitConfigTCO.dfm @@ -1,9 +1,10 @@ object FormConfigTCO: TFormConfigTCO - Left = 542 - Top = 389 - Width = 360 - Height = 251 + Left = 311 + Top = 218 + BorderStyle = bsDialog Caption = 'Configuration du TCO' + ClientHeight = 264 + ClientWidth = 618 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -15,14 +16,14 @@ object FormConfigTCO: TFormConfigTCO PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel - Left = 8 + Left = 32 Top = 16 Width = 83 Height = 13 Caption = 'Taille des cellules' end object Label2: TLabel - Left = 160 + Left = 176 Top = 16 Width = 5 Height = 13 @@ -49,8 +50,8 @@ object FormConfigTCO: TFormConfigTCO Height = 13 end object ButtonOK: TButton - Left = 240 - Top = 176 + Left = 168 + Top = 224 Width = 75 Height = 25 Caption = 'OK' @@ -58,7 +59,7 @@ object FormConfigTCO: TFormConfigTCO OnClick = ButtonOKClick end object EditTailleCellX: TEdit - Left = 104 + Left = 128 Top = 16 Width = 41 Height = 21 @@ -66,7 +67,7 @@ object FormConfigTCO: TFormConfigTCO Text = 'EditTailleCellX' end object EditTailleCellY: TEdit - Left = 176 + Left = 192 Top = 16 Width = 41 Height = 21 @@ -74,11 +75,11 @@ object FormConfigTCO: TFormConfigTCO Text = 'EditTailleCellY' end object ButtonDessine: TButton - Left = 24 - Top = 176 + Left = 16 + Top = 224 Width = 75 Height = 25 - Caption = 'Dessine' + Caption = 'Redessine' TabOrder = 3 OnClick = ButtonDessineClick end @@ -106,4 +107,104 @@ object FormConfigTCO: TFormConfigTCO TabOrder = 6 Text = 'EditNbCellY' end + object GroupBox1: TGroupBox + Left = 256 + Top = 8 + Width = 353 + Height = 217 + Caption = 'Couleurs ' + TabOrder = 7 + object Label5: TLabel + Left = 21 + Top = 32 + Width = 84 + Height = 13 + Caption = 'Couleur des voies' + end + object ImageAig: TImage + Left = 128 + Top = 16 + Width = 41 + Height = 41 + OnClick = ImageAigClick + end + object ImageFond: TImage + Left = 128 + Top = 64 + Width = 41 + Height = 41 + OnClick = ImageFondClick + end + object Label6: TLabel + Left = 30 + Top = 80 + Width = 75 + Height = 13 + Caption = 'Couleur de fond' + end + object ImageGrille: TImage + Left = 128 + Top = 112 + Width = 41 + Height = 41 + OnClick = ImageGrilleClick + end + object Label7: TLabel + Left = 31 + Top = 128 + Width = 74 + Height = 13 + Caption = 'couleur de grille' + end + object ImageDetAct: TImage + Left = 128 + Top = 160 + Width = 41 + Height = 41 + OnClick = ImageDetActClick + end + object Label8: TLabel + Left = 26 + Top = 176 + Width = 79 + Height = 13 + Caption = 'D'#233'tecteur activ'#233 + end + object Label9: TLabel + Left = 218 + Top = 176 + Width = 66 + Height = 13 + Caption = 'Canton activ'#233 + end + object Imagecanton: TImage + Left = 296 + Top = 160 + Width = 41 + Height = 41 + OnClick = ImagecantonClick + end + end + object Memo1: TMemo + Left = 8 + Top = 128 + Width = 241 + Height = 81 + BevelInner = bvLowered + BevelKind = bkFlat + BorderStyle = bsNone + Lines.Strings = ( + 'Si vous d'#233'finissez un nombre de cellules en ' + 'horizontal ou en vertical plus petit(s) que l'#39'actuel' + '(s), alors le TCO sera tronqu'#233', et les '#233'l'#233'ments ' + 'tronqu'#233's seront perdus '#224' la prochaine ' + 'sauvegarde.') + ReadOnly = True + TabOrder = 8 + end + object ColorDialog1: TColorDialog + OnShow = ColorDialog1Show + Left = 48 + Top = 24 + end end diff --git a/UnitConfigTCO.pas b/UnitConfigTCO.pas index 46488d6..541bd6f 100644 --- a/UnitConfigTCO.pas +++ b/UnitConfigTCO.pas @@ -4,7 +4,7 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls , UnitTCO; + Dialogs, StdCtrls , UnitTCO, ExtCtrls; type TFormConfigTCO = class(TForm) @@ -20,9 +20,28 @@ type EditNbCellX: TEdit; EditNbCellY: TEdit; LabelErreur: TLabel; + ColorDialog1: TColorDialog; + GroupBox1: TGroupBox; + Label5: TLabel; + ImageAig: TImage; + ImageFond: TImage; + Label6: TLabel; + ImageGrille: TImage; + Label7: TLabel; + ImageDetAct: TImage; + Label8: TLabel; + Memo1: TMemo; + Label9: TLabel; + Imagecanton: TImage; procedure ButtonOKClick(Sender: TObject); procedure ButtonDessineClick(Sender: TObject); procedure FormActivate(Sender: TObject); + procedure ImageAigClick(Sender: TObject); + procedure ImageFondClick(Sender: TObject); + procedure ImageGrilleClick(Sender: TObject); + procedure ImageDetActClick(Sender: TObject); + procedure ImagecantonClick(Sender: TObject); + procedure ColorDialog1Show(Sender: TObject); private { Déclarations privées } public @@ -31,14 +50,100 @@ type var FormConfigTCO: TFormConfigTCO; AvecGrille : boolean; - + titre_couleur : string; + implementation -uses UnitPrinc; +uses UnitPrinc ; {$R *.dfm} +procedure icone_aig; +var r : Trect; + x1,y1,x2,y2,x3,y3,x4,y4 : integer; +begin + with FormConfigTCO.ImageAig do + begin + canvas.Pen.color:=fond; + canvas.Brush.Color:=fond; + canvas.Rectangle(0,0,Width,Height); + + canvas.pen.color:=clVoies; + canvas.brush.color:=clvoies; + // bande horizontale + r:=Rect(0,(height div 2)-3,width,(height div 2)+3); + canvas.FillRect(r); + + x1:=(width div 2); y1:=(height div 2)-3; + x2:=3; y2:=0; + x3:=0; y3:=3; + x4:=0+(width div 2)-1; y4:=(height div 2)+3-1; + canvas.Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + +end; + +procedure dessine_icones; +var r : Trect; +begin + // 1 + icone_aig; + // 2 + with formConfigTCO.ImageFond do + begin + canvas.Pen.color:=fond; + canvas.Brush.Color:=fond; + canvas.Rectangle(0,0,Width,Height); + end; + // 3 + with formConfigTCO.ImageGrille do + begin + canvas.Pen.color:=fond; + canvas.Brush.Color:=fond; + canvas.Rectangle(0,0,Width,Height); + canvas.Pen.color:=ClGrille; + canvas.moveto(0,5); canvas.LineTo(width,5); + canvas.moveto(27,0); canvas.LineTo(27,Height); + end; + // 4 détecteur + with formConfigTCO.ImageDetAct do + begin + canvas.Pen.color:=fond; + canvas.Brush.Color:=fond; + canvas.Rectangle(0,0,Width,Height); + + + canvas.Brush.Color:=clAllume; + canvas.pen.color:=clAllume; + canvas.Pen.Mode:=pmCopy; + r:=Rect(1,(height div 2)-6,width-1,(height div 2)+6); + canvas.FillRect(r); + + canvas.pen.color:=clVoies; + canvas.brush.color:=clVoies; + // bande horizontale + r:=Rect(0,(height div 2)-3,width,(height div 2)+3); + canvas.FillRect(r); + end; + + // 5 canton + with formCOnfigTCO.Imagecanton do + begin + canvas.Pen.color:=fond; + canvas.Brush.Color:=fond; + canvas.Rectangle(0,0,Width,Height); + + + canvas.pen.color:=clAllume; + canvas.brush.color:=clAllume; + // bande horizontale + r:=Rect(0,(height div 2)-3,width,(height div 2)+3); + canvas.FillRect(r); + end; + +end; + function verif_config_TCO : boolean; // renvoie true si ok var erreur : integer; nokNbX,nokNbY,nokHt,nokLg : boolean; @@ -109,8 +214,6 @@ begin end; - - procedure TFormConfigTCO.FormActivate(Sender: TObject); begin EditTailleCellX.Text:=IntToSTR(LargeurCell); @@ -118,6 +221,68 @@ begin EditNbCellX.Text:=IntToSTR(NbreCellX); EditNbCellY.Text:=IntToSTR(NbreCellY); checkDessineGrille.Checked:=AvecGrille; + dessine_icones; +end; + + +procedure TFormConfigTCO.ImageAigClick(Sender: TObject); +begin + titre_couleur:='Changer la couleur des voies'; + if ColorDialog1.execute then + begin + clVoies:=ColorDialog1.Color; + TCO_modifie:=true; + dessine_icones; + end; +end; + +procedure TFormConfigTCO.ImageFondClick(Sender: TObject); +begin + titre_couleur:='Changer la couleur de fond'; + if ColorDialog1.execute then + begin + fond:=ColorDialog1.Color; + TCO_modifie:=true; + dessine_icones; + end; +end; + +procedure TFormConfigTCO.ImageGrilleClick(Sender: TObject); +begin + titre_couleur:='Changer la couleur de la grille'; + if ColorDialog1.execute then + begin + ClGrille:=ColorDialog1.Color; + TCO_modifie:=true; + dessine_icones; + end; +end; + +procedure TFormConfigTCO.ImageDetActClick(Sender: TObject); +begin + titre_couleur:='Changer la couleur de détecteur activé'; + if ColorDialog1.execute then + begin + ClAllume:=ColorDialog1.Color; + TCO_modifie:=true; + dessine_icones; + end; +end; + +procedure TFormConfigTCO.ImagecantonClick(Sender: TObject); +begin + titre_couleur:='Changer la couleur de canton activé'; + if ColorDialog1.execute then + begin + ClAllume:=ColorDialog1.Color; + dessine_icones; + end; +end; + +// change le titre de la fenêtre de choix des couleurs à son ouverture +procedure TFormConfigTCO.ColorDialog1Show(Sender: TObject); +begin + SetWindowText(ColorDialog1.Handle,pchar(titre_couleur)); end; end. diff --git a/UnitDebug.dcu b/UnitDebug.dcu index 9ebeabc..d99a279 100644 Binary files a/UnitDebug.dcu and b/UnitDebug.dcu differ diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index f9f4e9b..a2c7429 100644 Binary files a/UnitPrinc.dcu and b/UnitPrinc.dcu differ diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index d8f8524..c81ad73 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -1339,7 +1339,6 @@ object FormPrinc: TFormPrinc Width = 273 Height = 169 Anchors = [akTop, akRight] - Caption = 'Panel1' TabOrder = 5 object BoutonRaf: TButton Left = 8 diff --git a/UnitPrinc.pas b/UnitPrinc.pas index f5217ba..0ff14a8 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -184,11 +184,11 @@ type TBranche = record InversionCDM : integer ; // inversion pour les aiguillages BIS en lecture (pour parer bug CDM) vitesse : integer; // vitesse de franchissement de l"aiguillage en position déviée (60 ou 90) - ADroit : integer ; // (identifiant extérieur à la TJD) connecté sur la position droite en talon + ADroit : integer ; // (TJD:identifiant extérieur) connecté sur la position droite en talon ADroitB : char ; // id de branche pour TJD ADroitBis : integer ; // 0=pas connecté à aiguillage dont l'adresse est bis =1 connecté à un aig bis - ADevie : integer ; // (identifiant extérieur) adresse de l'élément connecté en position déviée + ADevie : integer ; // (TJD:identifiant extérieur) adresse de l'élément connecté en position déviée ADevieB : char; // caractère (D ou S)si aiguillage de l'élément connecté en position déviée AdevieBis : integer ; // 0=pas connecté à aiguillage dont l'adresse est bis =1 connecté à un aig bis @@ -410,13 +410,6 @@ var Temp,code,rayon,xViolet,YViolet,xBlanc,yBlanc, LgImage,HtImage : integer; ech : real; begin - with ACanvas do - begin - pen.mode:=PmCopy; - Brush.Color:=fond; - pen.color:=clyellow; - end; - code:=code_to_aspect(Etatsignal); // et aspect rayon:=round(6*frX); @@ -463,12 +456,6 @@ var Temp,code,rayon,xSem,Ysem,xJaune,Yjaune,Xvert,Yvert, s : string; ech : real; begin - with ACanvas do - begin - pen.mode:=PmCopy; - Brush.Color:=fond; - pen.color:=clyellow; - end; code:=code_to_aspect(Etatsignal); // et aspect rayon:=round(6*frX); @@ -518,12 +505,6 @@ var Temp,code,rayon,xSem,Ysem,xJaune,Yjaune,Xcarre,Ycarre,Xvert,Yvert, LgImage,HtImage : integer; ech : real; begin - with ACanvas do - begin - pen.mode:=PmCopy; - Brush.Color:=fond; - pen.color:=clyellow; - end; code:=code_to_aspect(Etatsignal); // et aspect rayon:=round(6*frX); @@ -539,10 +520,10 @@ begin begin //rotation 90° vers la gauche des feux ech:=frY;frY:=frX;FrX:=ech; - Temp:=HtImage-yjaune;YJaune:=XJaune;Xjaune:=Temp; - Temp:=HtImage-ycarre;Ycarre:=Xcarre;Xcarre:=Temp; - Temp:=HtImage-ySem;YSem:=XSem;XSem:=Temp; - Temp:=HtImage-yvert;Yvert:=Xvert;Xvert:=Temp; + Temp:=HtImage-yjaune; YJaune:=XJaune;Xjaune:=Temp; + Temp:=HtImage-ycarre; Ycarre:=Xcarre;Xcarre:=Temp; + Temp:=HtImage-ySem; YSem:=XSem;XSem:=Temp; + Temp:=HtImage-yvert; Yvert:=Xvert;Xvert:=Temp; end; if (orientation=3) then @@ -651,13 +632,6 @@ var code, XBlanc,Yblanc,xJaune,yJaune,Xsem,YSem,Xvert,YVert,Xcarre,Ycarre,Xral1, Temp,rayon,LgImage,HtImage : integer; ech : real; begin - with ACanvas do - begin - pen.mode:=PmCopy; - Brush.Color:=fond; - pen.color:=clyellow; - end; - code:=code_to_aspect(Etatsignal); // et combine rayon:=round(6*frX); XBlanc:=13; YBlanc:=23; @@ -742,12 +716,6 @@ var code,rayon, LgImage,HtImage,xt,yt : integer; ech : real; begin - with ACanvas do - begin - pen.mode:=PmCopy; - Brush.Color:=fond; - pen.color:=clyellow; - end; rayon:=round(6*frX); code:=code_to_aspect(Etatsignal); // et aspect // mise à l'échelle des coordonnées des feux en fonction du facteur de réduction frX et frY et x et y (offsets) @@ -3228,6 +3196,7 @@ begin i:=index_feu(Adr); if feux[i].aspect<10 then begin + // envoie la commande au décodeur case feux[i].decodeur of 0 : envoi_virtuel(Adr); 1 : envoi_signalBahn(Adr); @@ -3237,15 +3206,16 @@ begin 5 : envoi_NMRA(Adr); 6 : envoi_UniSemaf(Adr); end; - // dessine le feu dans la fenêtre de droite - Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adresse,1); - // dessine le feu du TCO + // allume les signaux du feu dans la fenêtre de droite + Dessine_feu_mx(Feux[i].Img.Canvas,0,0,1,1,adr,1); + + // allume les signaux du feu dans le TCO if AvecTCO then begin - for i:=1 to NbFeuTCO do + for i:=1 to NbFeuTCO do begin - adresse:=FeuTCO[i].adresse; + adresse:=FeuTCO[i].adresse; // vérifie si le feu existe dans le TCO if adresse<>0 then begin a:=EtatsignalCplx[adresse]; // a = état binaire du feu @@ -3267,21 +3237,21 @@ begin // réduction variable en fonction de la taille des cellules calcul_reduction(frx,fry,round(TailleX*LargeurCell/ZoomMax),round(tailleY*HauteurCell/ZoomMax),TailleX,TailleY); - // décalage en X pour mettre la tete du feu alignée sur le bord droit de la cellule pour les feux tournés à 90G - if orientation=2 then - begin - if aspect=9 then x:=x+round(10*frX); - if aspect=7 then x:=x+round(10*frX); - if aspect=5 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; - if aspect=4 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; - if aspect=3 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; - if aspect=2 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; - end; - Dessine_feu_mx(PCanvasTCO,x,y,frx,fry,adresse,orientation); - end; - end; - end; - end; + // décalage en X pour mettre la tete du feu alignée sur le bord droit de la cellule pour les feux tournés à 90G + if orientation=2 then + begin + if aspect=9 then x:=x+round(10*frX); + if aspect=7 then x:=x+round(10*frX); + if aspect=5 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; + if aspect=4 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; + if aspect=3 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; + if aspect=2 then begin x:=x+round(10*frX);y:=y+HauteurCell-round(tailleX*frY); end; + end; + Dessine_feu_mx(PCanvasTCO,x,y,frx,fry,adresse,orientation); + end; + end; + end; +end; end; // pilotage des signaux @@ -4743,11 +4713,13 @@ begin suivant_alg3:=adr;exit; end; begin + if aiguillage[Adr].position=9 then begin suivant_alg3:=9999;exit;end; // pour échappement s:='Aiguillage triple '+IntToSTR(Adr)+' : configuration des aiguilles interdite'; if CDM_connecte then s:=s+': '+IntToSTR(aiguillage[Adr].position); AfficheDebug(s,clYellow); Affiche(s,clRed); - suivant_alg3:=9999;exit; // pour échappement + suivant_alg3:=9999; + exit; end; end else @@ -5078,6 +5050,11 @@ begin repeat inc(j); AdrSuiv:=suivant_alg3(prec,typeElPrec,actuel,typeELActuel,2); + if AdrSuiv=9999 then // élément non trouvé + begin + carre_signal:=true; + exit; + end; if (AdrSuiv<>9998) then // arret sur aiguillage en talon mal positionnée begin prec:=actuel; @@ -5894,6 +5871,11 @@ begin rafraichit; rafraichit; rafraichit; + if avecTCO then + begin + zone_TCO(det2,det3,0); // désactivation + zone_TCO(det3,AdrSuiv,1); // activation + end; exit; // sortir absolument end; end; @@ -6790,12 +6772,13 @@ begin else begin - Sleep(1000); + Sleep(2000); + Application.ProcessMessages; // démarre le serveur IP : Alt C , return 2 fois SendKey(CDMHd,ord('C'),false,true,false); SendKey(CDMHd,VK_RETURN,false,false,false); SendKey(CDMHd,VK_RETURN,false,false,false); - Sleep(100); + Sleep(200); Application.ProcessMessages; // Ouvre le fichier réseau : Alt F , Return, O, return @@ -6803,14 +6786,14 @@ begin SendKey(CDMHd,VK_RETURN,false,false,false); SendKey(CDMHd,ord('O'),false,false,false); SendKey(CDMHd,VK_RETURN,false,false,false); - Sleep(200); // attendre ouverture de la fenêtre + Sleep(500); // attendre ouverture de la fenêtre Application.ProcessMessages; // ouvre le fichier réseau Affiche('Ouvre '+Lay,clyellow); s:=convert_VK(LAY); - Sleep(100); + Sleep(1000); for i:=1 to length(s) do SendKey(CDMHd,ord(s[i]),false,false,false); SendKey(CDMHd,VK_return,false,false,false); @@ -6891,7 +6874,7 @@ begin TempoAct:=0; DebugOuv:=True; - AvecInit:=false; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + AvecInit:=true; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Diffusion:=true; // créée la fenetre vérification de version @@ -6904,7 +6887,6 @@ begin AffMem:=true; N_routes:=0; N_trains:=0; - ButtonAffTCO.visible:=AvecTCO; // Train[1].index:=0; // lecture fichier de configuration client_GL.cfg et config.cfg @@ -6912,7 +6894,7 @@ begin // lancer CDM rail si on le demande if LanceCDM then Lance_CDM; - + ButtonAffTCO.visible:=AvecTCO; // tenter la liaison vers CDM rail ou vers la centrale Lenz //Affiche('Test présence CDM',clYellow); @@ -6984,8 +6966,8 @@ begin // TCO if avectco then begin - //créée la fenêtre TCO - FormTCO:=TformTCO.Create(Self); + //créée la fenêtre TCO non modale + FormTCO:=TformTCO.Create(nil); FormTCO.show; end; @@ -7996,7 +7978,7 @@ end; procedure TFormPrinc.ConfigClick(Sender: TObject); begin - Tformconfig.create(self); + Tformconfig.create(nil); formconfig.showmodal; formconfig.close; end; @@ -8077,18 +8059,11 @@ begin end; - - procedure TFormPrinc.ButtonAffTCOClick(Sender: TObject); var hd : THandle; begin - //SetactiveWindow(formTCO.handle); - //formTCO.BringToFront; - hd:=formTCO.handle; - - // SetForeGroundWindow(hd) ; - ShowWindow(hd,SW_Show); - // sendMessage(hd,wm_syscommand,sc_minimize,0); + formTCO.windowState:=wsNormal; //Maximized; + formTCO.BringToFront; end; @@ -8097,10 +8072,13 @@ begin if Lance_CDM then connecte_CDM; end; + begin + + end. diff --git a/UnitSimule.dcu b/UnitSimule.dcu index 2a537a7..5afbcb1 100644 Binary files a/UnitSimule.dcu and b/UnitSimule.dcu differ diff --git a/UnitTCO.dcu b/UnitTCO.dcu index 44a5bf9..f10a02e 100644 Binary files a/UnitTCO.dcu and b/UnitTCO.dcu differ diff --git a/UnitTCO.dfm b/UnitTCO.dfm index 6a2cf58..17881cf 100644 --- a/UnitTCO.dfm +++ b/UnitTCO.dfm @@ -1,8 +1,8 @@ object FormTCO: TFormTCO - Left = 232 - Top = 211 - Width = 992 - Height = 681 + Left = 1326 + Top = 122 + Width = 1139 + Height = 694 VertScrollBar.Visible = False Caption = 'FormTCO' Color = clBtnFace @@ -14,19 +14,21 @@ object FormTCO: TFormTCO Font.Style = [] KeyPreview = True OldCreateOrder = False + Position = poScreenCenter OnActivate = FormActivate OnClose = FormClose OnCreate = FormCreate OnDockOver = FormDockOver OnKeyDown = FormKeyDown + OnResize = FormResize DesignSize = ( - 976 - 643) + 1123 + 656) PixelsPerInch = 96 TextHeight = 13 object LabelX: TLabel - Left = 72 - Top = 6 + Left = 64 + Top = 0 Width = 7 Height = 16 Caption = '0' @@ -38,8 +40,8 @@ object FormTCO: TFormTCO ParentFont = False end object Label2: TLabel - Left = 16 - Top = 6 + Left = 8 + Top = 0 Width = 49 Height = 16 Caption = 'Cellule' @@ -51,8 +53,8 @@ object FormTCO: TFormTCO ParentFont = False end object LabelY: TLabel - Left = 96 - Top = 6 + Left = 88 + Top = 0 Width = 7 Height = 16 Caption = '0' @@ -63,36 +65,29 @@ object FormTCO: TFormTCO Font.Style = [fsBold] ParentFont = False end - object Label1: TLabel - Left = 776 - Top = 8 - Width = 3 - Height = 13 - Caption = '-' - end object SourisX: TLabel - Left = 232 - Top = 8 + Left = 128 + Top = 2 Width = 6 Height = 13 Caption = '0' end object SourisY: TLabel - Left = 288 - Top = 8 + Left = 168 + Top = 2 Width = 6 Height = 13 Caption = '0' end object ImageTemp: TImage - Left = 16 - Top = 464 + Left = 24 + Top = 394 Width = 97 Height = 97 end object Label19: TLabel - Left = 912 - Top = 456 + Left = 1059 + Top = 407 Width = 32 Height = 13 Anchors = [akRight, akBottom] @@ -106,23 +101,24 @@ object FormTCO: TFormTCO end object ScrollBox: TScrollBox Left = 8 - Top = 32 - Width = 889 - Height = 433 + Top = 18 + Width = 1036 + Height = 375 HorzScrollBar.Smooth = True HorzScrollBar.Tracking = True VertScrollBar.Smooth = True VertScrollBar.Tracking = True - Anchors = [akLeft, akTop, akRight, akBottom] + Anchors = [akLeft, akTop, akRight] + BevelEdges = [beLeft, beTop, beRight] TabOrder = 0 DesignSize = ( - 885 - 429) + 1032 + 371) object ImageTCO: TImage Left = 0 Top = 0 - Width = 865 - Height = 361 + Width = 1012 + Height = 303 Anchors = [akLeft, akTop, akRight, akBottom] PopupMenu = PopupMenu1 OnClick = ImageTCOClick @@ -134,10 +130,10 @@ object FormTCO: TFormTCO end end object TrackBarZoom: TTrackBar - Left = 912 - Top = 40 + Left = 1051 + Top = 34 Width = 41 - Height = 409 + Height = 366 Anchors = [akTop, akRight, akBottom] Max = 50 Min = 20 @@ -149,9 +145,9 @@ object FormTCO: TFormTCO end object Panel1: TPanel Left = 8 - Top = 472 - Width = 953 - Height = 153 + Top = 479 + Width = 1100 + Height = 166 Anchors = [akLeft, akRight, akBottom] Font.Charset = ANSI_CHARSET Font.Color = clBlue @@ -160,6 +156,9 @@ object FormTCO: TFormTCO Font.Style = [] ParentFont = False TabOrder = 2 + DesignSize = ( + 1100 + 166) object Label4: TLabel Left = 8 Top = 8 @@ -256,14 +255,14 @@ object FormTCO: TFormTCO Font.Style = [fsBold] ParentFont = False end - object ImagePaletteDroit: TImage + object ImagePalette1: TImage Left = 216 Top = 8 Width = 41 Height = 41 DragMode = dmAutomatic - OnEndDrag = ImagePaletteDroitEndDrag - OnMouseDown = ImagePaletteDroitMouseDown + OnEndDrag = ImagePalette1EndDrag + OnMouseDown = ImagePalette1MouseDown end object ImageSupG: TImage Left = 216 @@ -442,7 +441,7 @@ object FormTCO: TFormTCO ParentFont = False end object ImageFeu: TImage - Left = 368 + Left = 376 Top = 104 Width = 25 Height = 41 @@ -565,6 +564,160 @@ object FormTCO: TFormTCO Font.Style = [] ParentFont = False end + object ImagePalette16: TImage + Left = 504 + Top = 56 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette16EndDrag + OnMouseDown = ImagePalette16MouseDown + end + object Label24: TLabel + Left = 480 + Top = 70 + Width = 18 + Height = 19 + Caption = '16' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette17: TImage + Left = 576 + Top = 56 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette17EndDrag + OnMouseDown = ImagePalette17MouseDown + end + object Label25: TLabel + Left = 552 + Top = 70 + Width = 18 + Height = 19 + Caption = '17' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette18: TImage + Left = 648 + Top = 56 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette18EndDrag + OnMouseDown = ImagePalette18MouseDown + end + object Label26: TLabel + Left = 624 + Top = 70 + Width = 18 + Height = 19 + Caption = '18' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette19: TImage + Left = 720 + Top = 56 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette19EndDrag + OnMouseDown = ImagePalette19MouseDown + end + object Label27: TLabel + Left = 696 + Top = 70 + Width = 18 + Height = 19 + Caption = '19' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette20: TImage + Left = 792 + Top = 56 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette20EndDrag + OnMouseDown = ImagePalette20MouseDown + end + object Label28: TLabel + Left = 768 + Top = 70 + Width = 18 + Height = 19 + Caption = '20' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette21: TImage + Left = 864 + Top = 8 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette21EndDrag + OnMouseDown = ImagePalette21MouseDown + end + object Label29: TLabel + Left = 840 + Top = 22 + Width = 18 + Height = 19 + Caption = '21' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end + object ImagePalette22: TImage + Left = 936 + Top = 8 + Width = 41 + Height = 41 + DragMode = dmAutomatic + OnEndDrag = ImagePalette22EndDrag + OnMouseDown = ImagePalette22MouseDown + end + object Label30: TLabel + Left = 912 + Top = 22 + Width = 18 + Height = 19 + Caption = '22' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + end object EditAdrElement: TEdit Left = 152 Top = 8 @@ -578,12 +731,13 @@ object FormTCO: TFormTCO ParentFont = False TabOrder = 0 OnChange = EditAdrElementChange + OnKeyDown = EditAdrElementKeyDown end object EditTypeElement: TEdit Left = 152 Top = 32 Width = 33 - Height = 33 + Height = 28 Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -16 @@ -608,27 +762,29 @@ object FormTCO: TFormTCO OnKeyPress = EditTypeImageKeyPress end object ButtonSauveTCO: TButton - Left = 854 + Left = 992 Top = 48 - Width = 91 + Width = 92 Height = 33 + Anchors = [akTop, akRight] Caption = 'Sauvegarder TCO' TabOrder = 3 WordWrap = True OnClick = ButtonSauveTCOClick end object ButtonRedessine: TButton - Left = 856 + Left = 992 Top = 8 - Width = 89 + Width = 92 Height = 33 + Anchors = [akTop, akRight] Caption = 'Redessine' TabOrder = 4 OnClick = ButtonRedessineClick end object Button1: TButton - Left = 672 - Top = 88 + Left = 440 + Top = 112 Width = 89 Height = 25 Caption = 'Simu det 1' @@ -636,8 +792,8 @@ object FormTCO: TFormTCO OnClick = Button1Click end object Button2: TButton - Left = 672 - Top = 120 + Left = 536 + Top = 112 Width = 89 Height = 25 Caption = 'Simu Det 0' @@ -645,10 +801,11 @@ object FormTCO: TFormTCO OnClick = Button2Click end object ButtonConfigTCO: TButton - Left = 832 + Left = 992 Top = 88 - Width = 113 + Width = 92 Height = 33 + Anchors = [akTop, akRight] Caption = 'Configuration TCO' TabOrder = 7 OnClick = ButtonConfigTCOClick @@ -661,6 +818,46 @@ object FormTCO: TFormTCO TabOrder = 8 OnChange = EditTexteChange end + object ButtonSimu: TButton + Left = 632 + Top = 112 + Width = 113 + Height = 25 + Caption = 'Simu canton occup'#233 + TabOrder = 9 + OnClick = ButtonSimuClick + end + object CheckPinv: TCheckBox + Left = 16 + Top = 120 + Width = 161 + Height = 17 + Caption = 'Pilotage aiguillage invers'#233 + TabOrder = 10 + OnClick = CheckPinvClick + end + object ButtonMasquer: TButton + Left = 992 + Top = 128 + Width = 92 + Height = 33 + Anchors = [akTop, akRight] + Caption = 'Masquer bandeau' + TabOrder = 11 + WordWrap = True + OnClick = ButtonMasquerClick + end + end + object ButtonAfficheBandeau: TButton + Left = 1051 + Top = 431 + Width = 57 + Height = 33 + Anchors = [akRight, akBottom] + Caption = 'Affiche Bandeau' + TabOrder = 3 + WordWrap = True + OnClick = ButtonAfficheBandeauClick end object PopupMenu1: TPopupMenu Left = 360 diff --git a/UnitTCO.pas b/UnitTCO.pas index e40b909..addd84f 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -4,8 +4,8 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, Grids , UnitPrinc, StdCtrls, ExtCtrls, Menus, UnitPilote, - ComCtrls ; + Dialogs, Grids , UnitPrinc, StdCtrls, ExtCtrls, Menus, UnitPilote, UnitDebug, + ComCtrls ; type TFormTCO = class(TForm) @@ -15,7 +15,6 @@ type PopupMenu1: TPopupMenu; MenuCouper: TMenuItem; N1: TMenuItem; - Label1: TLabel; MenuCopier: TMenuItem; MenuColler: TMenuItem; ScrollBox: TScrollBox; @@ -39,7 +38,7 @@ type ImagePalette2: TImage; Label7: TLabel; Label10: TLabel; - ImagePaletteDroit: TImage; + ImagePalette1: TImage; ImageSupG: TImage; ImageSupD: TImage; ImageInfD: TImage; @@ -76,35 +75,50 @@ type ImageAig45PG_AD: TImage; Label23: TLabel; EditTexte: TEdit; + ButtonSimu: TButton; + CheckPinv: TCheckBox; + ImagePalette16: TImage; + Label24: TLabel; + ImagePalette17: TImage; + Label25: TLabel; + ImagePalette18: TImage; + Label26: TLabel; + ImagePalette19: TImage; + Label27: TLabel; + ImagePalette20: TImage; + Label28: TLabel; + ButtonMasquer: TButton; + ButtonAfficheBandeau: TButton; + ImagePalette21: TImage; + Label29: TLabel; + ImagePalette22: TImage; + Label30: TLabel; procedure FormCreate(Sender: TObject); procedure ImageTCOClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure ImageTCOContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); - procedure dessin_AigPG_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); - procedure dessin_Aig45PG_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode; position : integer); - procedure dessin_Aig45PD_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode; position : integer); - procedure dessin_Aig45PD_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); - procedure dessin_Aig45PG_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); - procedure dessin_AigPD_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); - procedure dessin_Diag1(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); - procedure dessin_Diag2(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); - procedure dessin_infG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); - procedure dessin_infD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); - procedure Entoure_cell(x,y : integer); + procedure dessin_AigPG_AG(Canvas : Tcanvas;x,y : integer;Mode , position : integer); + procedure dessin_Aig45PG_AG(Canvas : Tcanvas;x,y : integer;Mode, position : integer); + procedure dessin_Aig45PD_AG(Canvas : Tcanvas;x,y : integer;Mode, position : integer); + procedure dessin_Aig45PD_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); + procedure dessin_Aig45PG_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); + procedure dessin_AigPD_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); + procedure dessin_Diag1(Canvas : Tcanvas;x,y : integer;Mode : integer); + procedure dessin_Diag2(Canvas : Tcanvas;x,y : integer;Mode : integer); + procedure dessin_infG(Canvas : Tcanvas;x,y : integer;Mode : integer); + procedure dessin_infD(Canvas : Tcanvas;x,y : integer;Mode : integer); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); -// procedure Aiguillagegauchepointedroite1Click(Sender: TObject); - procedure dessin_AigG_PD(canvas : Tcanvas;X,Y : integer; couleur : Tcolor;Mode : TPenMode;position : integer); + procedure dessin_AigG_PD(canvas : Tcanvas;X,Y : integer; Mode,position : integer); procedure Elmentdroit1Click(Sender: TObject); - procedure dessin_voie(Canvas : Tcanvas;x,y : integer;couleur : TColor;Mode : TPenMode); + procedure dessin_voie(Canvas : Tcanvas;x,y,mode : integer); procedure Courbegaucheversdroite1Click(Sender: TObject); procedure Courbedroiteversgauche1Click(Sender: TObject); -// procedure Aiguillagedroitpointegauche1Click(Sender: TObject); - procedure dessin_AigD_PG(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode;position : integer ); + procedure dessin_AigD_PG(Canvas : Tcanvas;x,y,Mode,position : integer); procedure CourbeSupD1Click(Sender: TObject); - procedure dessin_SupD(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode); + procedure dessin_SupD(Canvas : Tcanvas;x,y : integer; Mode : integer); procedure CourbeSupG1Click(Sender: TObject); - procedure dessin_SupG(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode); + procedure dessin_SupG(Canvas : Tcanvas;x,y : integer;Mode : integer); procedure ImageTCODragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure FormDockOver(Sender: TObject; Source: TDragDockObject; X,Y: Integer; State: TDragState; var Accept: Boolean); @@ -120,9 +134,9 @@ type procedure ImagePalette4EndDrag(Sender, Target: TObject; X, Y: Integer); procedure ImagePalette4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - procedure ImagePaletteDroitEndDrag(Sender, Target: TObject; X, + procedure ImagePalette1EndDrag(Sender, Target: TObject; X, Y: Integer); - procedure ImagePaletteDroitMouseDown(Sender: TObject; + procedure ImagePalette1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ImageSupGEndDrag(Sender, Target: TObject; X, Y: Integer); procedure ImageSupGMouseDown(Sender: TObject; Button: TMouseButton; @@ -149,7 +163,7 @@ type procedure MenuCollerClick(Sender: TObject); procedure ButtonRedessineClick(Sender: TObject); procedure Affiche_TCO; - procedure affiche_cellule(x,y : integer;mode : TPenMode); + procedure affiche_cellule(x,y : integer); procedure grille; procedure EditAdrElementChange(Sender: TObject); procedure EditTypeImageKeyPress(Sender: TObject; var Key: Char); @@ -189,6 +203,48 @@ type procedure ImageAig45PG_ADMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure EditTexteChange(Sender: TObject); + procedure ButtonSimuClick(Sender: TObject); + procedure CheckPinvClick(Sender: TObject); + procedure dessin_16(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_17(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_18(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_19(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_20(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_21(Canvas : Tcanvas;x,y,mode: integer); + procedure dessin_22(Canvas : Tcanvas;x,y,mode: integer); + procedure ImagePalette16MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette16EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette17EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette17MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette18EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette18MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette19EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette19MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette20MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette20EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ButtonMasquerClick(Sender: TObject); + procedure ButtonAfficheBandeauClick(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure ImagePalette21EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette22EndDrag(Sender, Target: TObject; X, + Y: Integer); + procedure ImagePalette21MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure ImagePalette22MouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure EditAdrElementKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); private { Déclarations privées } @@ -199,42 +255,49 @@ type const - clGrille=$404040; + ZoomMax=50; MaxCellX=100;MaxCellY=50; + type - + // structure du TCO TTCO = array[1..MaxCellX] of array[1..MaxCellY] of record BType : integer ; // 1= détecteur 2= aiguillage 3=bis 4=Buttoir Adresse : integer ; // adresse du détecteur ou de l'aiguillage ou du feu IndexFeu : integer ; // index du feu dans le tableau FeuTCO BImage : integer ; // 0=rien 1=voie 2=aiguillage gauche gauche ... 30=feu + mode : integer; // 0=éteint 1=allumé + inverse : boolean; // aiguillage piloté inversé Texte : string[30]; //FeuAspect : integer; // aspect du feu (2 feux...9 feux) //FeuOriente : integer ; // orientation du feu : 1 vertical en bas / 2 horizontal gauche / 3 horizontal droit PiedFeu : integer; // type de pied au feu end; + + // Feux du TCO TfeuTCO = array[1..50] of record Adresse : integer ; // adresse du feu; x,y : integer ; // coordonnées pixels FeuOriente : integer; PiedFeu : integer; Aspect : integer; - end; + end; var - Fond,couleurAdresse : Tcolor; + clAllume,clVoies,Fond,couleurAdresse,clGrille : Tcolor; FormTCO: TFormTCO; Forminit,sourisclic,SelectionAffichee,TamponAffecte,entoure,Diffusion,TCO_modifie : boolean; HtImageTCO,LargImageTCO,XclicCell,YclicCell,XminiSel,YminiSel,XCoupe,Ycoupe, XmaxiSel,YmaxiSel,AncienXMiniSel,AncienXMaxiSel ,AncienYMiniSel,AncienYMaxiSel, - Xclic,Yclic,XClicCellInserer,YClicCellInserer,Xentoure,Yentoure : integer; + Xclic,Yclic,XClicCellInserer,YClicCellInserer,Xentoure,Yentoure, + AncienXClicCell,AncienYClicCell : integer; TamponTCO,tco : TTco ; + // pour copier coller TamponTCO_Org : record - x1,y1,x2,y2 : integer; + x1,y1,x2,y2 : integer; end; FeuTCO : TFeuTCO; NbFeuTCO : integer; @@ -249,6 +312,7 @@ var procedure calcul_reduction(Var frx,fry : real;DimDestX,DimDestY,DimOrgX,DimOrgY : integer); procedure sauve_fichier_tco; +procedure zone_TCO(det1,det2,mode : integer); implementation @@ -261,7 +325,7 @@ uses UnitConfigTCO; procedure lire_fichier_tco; var fichier : textfile; s : string; - x,y,i,adresse,Aspect,valeur,erreur,FeuOriente,PiedFeu : integer; + x,y,i,j,adresse,Aspect,valeur,erreur,FeuOriente,PiedFeu : integer; function lit_ligne : string ; var c : char; @@ -279,10 +343,22 @@ begin assignFile(fichier,'tco.cfg'); reset(fichier); except + Affiche('Nouveau tco',clyellow); + NbreCellX:=28;NbreCellY:=13;LargeurCell:=30;HauteurCell:=30; exit; end; - x:=1;y:=1;NbreCellX:=0;NbreCellY:=0;NbFeuTCO:=0; + + // couleurs + s:=lit_ligne; + val('$'+s,fond,erreur); + s:=lit_ligne; + val('$'+s,clVoies,erreur); + s:=lit_ligne; + val('$'+s,clAllume,erreur); + s:=lit_ligne; + val('$'+s,clGrille,erreur); + // taille de la matrice s:=lit_ligne; Val(s,NbreCellX,erreur); @@ -326,7 +402,14 @@ begin val(copy(s,1,i-1),valeur,erreur);if erreur<>0 then begin closefile(fichier);exit;end; tco[x,y].Bimage:=valeur; delete(s,1,i); - + + //Inverse + i:=pos(',',s); + if i=0 then begin closefile(fichier);exit;end; + val(copy(s,1,i-1),valeur,erreur);if erreur<>0 then begin closefile(fichier);exit;end; + tco[x,y].inverse:=valeur=1; + delete(s,1,i); + // FeuOriente (pas encore stocké) i:=pos(',',s); if i=0 then begin closefile(fichier);exit;end; @@ -334,21 +417,21 @@ begin delete(s,1,i); // PiedFeu (pas encore stocké) - i:=pos(',',s); - if i=0 then begin closefile(fichier);exit;end; - val(copy(s,1,i-1),PiedFeu,erreur);if erreur<>0 then begin closefile(fichier);exit;end; - delete(s,1,i); - + i:=pos(',',s); j:=pos(')',s); + if j0 then begin closefile(fichier);exit;end; + if s[i]=',' then delete(s,1,i) else delete(s,1,i-1); + // si c'est un feu, remplir tableau feux if tco[x,y].Bimage=30 then begin inc(NbFeuTCO); - // Affiche(intToSTR(tco[x,y].Adresse),clyellow); + //Affiche(intToSTR(tco[x,y].Adresse),clyellow); i:=index_feu(adresse); if i<>0 then begin aspect:=Feux[i].aspect; - // Affiche('Feu '+IntToSTR(Adresse)+' aspect='+intToSTR(aspect),clyellow); + //Affiche('Feu '+IntToSTR(Adresse)+' aspect='+intToSTR(aspect),clyellow); Feux[i].indexTCO:=NbFeuTCO; FeuTCO[NbFeuTCO].Aspect:=aspect; end; @@ -361,15 +444,21 @@ begin TCO[x,y].IndexFeu:=NbFeuTCO; TCO[x,y].PiedFeu:=PiedFeu; end; - - i:=pos(')',s); - if i<>1 then - tco[x,y].Texte:=copy(s,1,i-1) - else - tco[x,y].Texte:=''; - delete(s,1,i); - inc(x); + // texte + j:=pos(')',s); + begin + if j>1 then // le , est avant le ) donc il y a un peut-etre un texte + tco[x,y].Texte:=copy(s,1,j-1) + else + tco[x,y].Texte:=''; + delete(s,1,j); + end; + + { affiche('TCO'+intToSTR(x)+','+intToSTR(y)+'='+IntToSTR(tco[x,y].BType)+','+intToSTR(tco[x,y].Adresse)+',' + +intToSTR(tco[x,y].Bimage)+','+','+intToSTR(tco[x,y].PiedFeu)+','+tco[x,y].Texte,clyellow); + } + inc(x); until s=''; end; inc(y);x:=1; @@ -386,15 +475,18 @@ var fichier : textfile; begin AssignFile(fichier,'tco.cfg'); rewrite(fichier); - writeln(fichier,'/type(0=rien 1=voie/détecteur 2=aig 3=aigBis , adresse , image=1 à 10 ,orientation'); + Writeln(fichier,'/ Couleurs : fond, voies, détecteur_activé, grille'); + Writeln(fichier,IntToHex(fond,6)); + Writeln(fichier,IntToHex(ClVoies,6)); + Writeln(fichier,IntToHex(ClAllume,6)); + Writeln(fichier,IntToHex(ClGrille,6)); + writeln(fichier,'/ Taille de la matrice x,y'); writeln(fichier,IntToSTR(NbreCellX)+','+intToSTR(NbreCellY)); writeln(fichier,'/ Largeur et hauteur des cellules en pixels'); - writeln(fichier,'/ type,adresse,image,Orientation du feu, pied du feu'); - writeln(fichier,IntToSTR(LargeurCell)+','+intToSTR(HauteurCell)); - writeln(fichier,'/Dalle TCO'); + writeln(fichier,'/ type,adresse,image,inversion aiguillage,Orientation du feu, pied du feu , [texte]'); for y:=1 to NbreCellY do begin s:=''; @@ -402,6 +494,8 @@ begin begin s:=s+'('+IntToSTR(TCO[x,y].BType)+','+Format('%.*d',[3,TCO[x,y].Adresse])+','+ IntToSTR(TCO[x,y].BImage)+','; + if TCO[x,y].inverse then s:=s+'1,' else s:=s+'0,'; + if TCO[x,y].BImage=30 then begin i:=TCO[x,y].IndexFeu; @@ -414,6 +508,7 @@ begin writeln(fichier,s); end; closefile(fichier); + TCO_modifie:=false; Affiche('TCO sauvegardé',clyellow); end; @@ -443,9 +538,10 @@ begin end; // élément de voie horizontale Element 1 -procedure TFormTCO.dessin_voie(Canvas : Tcanvas;x,y : integer;couleur : TColor;Mode : TPenMode); +procedure TFormTCO.dessin_voie(Canvas : Tcanvas;x,y,mode : integer); var Adr, x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; r : Trect; + couleur : Tcolor; s : string; begin x0:=(x-1)*LargeurCell; @@ -457,122 +553,442 @@ begin r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - // bande blanche - if (x<=NbreCellX) and (y<=NbreCellY) then + // détecteur à 1 + Adr:=TCO[x,y].adresse; + if Adr<>0 then begin - Adr:=TCO[x,y].Adresse; - if Detecteur[Adr] then + if detecteur[Adr] then begin - Brush.Color:=clWhite; - pen.color:=couleur; - Pen.Mode:=Mode; + Brush.Color:=clAllume; + pen.color:=clAllume; + Pen.Mode:=pmCopy; jy1:=y0+(HauteurCell div 2)-round(6*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(6*frYGlob); // pos Y de la bande inf - r:=Rect(x0,jy1,x0+LargeurCell,jy2); + r:=Rect(x0+1,jy1,x0+LargeurCell-1,jy2); FillRect(r); - couleur:=clblue; - end; - end; - + end; + end; + + // voie + if (mode=1) then couleur:=clAllume else couleur:=clVoies; Brush.Color:=couleur; pen.color:=couleur; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf r:=Rect(x0,jy1,x0+LargeurCell,jy2); FillRect(r); - - end; end; -// élément 10 -procedure TformTCO.dessin_Diag1(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); -var Adr, x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; +// element 2 +procedure TformTCO.dessin_AigG_PD(canvas : Tcanvas;x,y : integer; Mode,position : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; r : Trect; s : string; + + procedure horz; + begin + // bande horizontale + r:=Rect(x0,jy1,x0+LargeurCell,jy2); + canvas.FillRect(r); + end; + + procedure deviation; + begin + x1:=x0+(largeurCell div 2); y1:=jy1+round(1*frYGlob); + x2:=x0-round(1*FrXGlob);y2:=y0+HauteurCell-round(2*FrYGlob); + x3:=x0+round(2*FrXGlob);y3:=y0+HauteurCell; + x4:=x1+round(1*FrXGlob);y4:=jy2; + canvas.Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; - + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + with canvas do begin Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - x1:=x0;y1:=y0+hauteurCell-round(3*FryGlob); - x2:=x0+largeurCell-round(3*FrXGlob);y2:=y0; - x3:=x0+largeurCell;y3:=y0+round(4*FrYGlob); - x4:=x0+round(4*FrXGlob); y4:=y0+hauteurCell; - - Brush.Color:=couleur; - pen.color:=couleur; - - PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - end; -end; + Brush.COlor:=clVoies; + Pen.Mode:=pmCopy; + pen.color:=clVoies; -// élément 11 -procedure TformTCO.dessin_Diag2(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); -var Adr, x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + horz; + if (mode=1) and (position=const_devie) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + deviation; + r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); + canvas.FillRect(r); + + // effacement du morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x1;y1:=jy1; + x2:=x1-6;y2:=jy2; + x3:=x2-6;y3:=y2; + x4:=x1-6;y4:=jy1; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; + + // aiguillage droit (sans inversion) dévié (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + deviation; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + // effacement du morceau + x1:=x1+3;y1:=jy2; + x2:=x1-10;y2:=y1; + x3:=x2-5;y3:=y2+3; + x4:=x1-5;y4:=y3; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + +// aiguillage pointe à gauche, aiguillage gauche Element 3 +procedure TFormTCO.dessin_AigPG_AG(Canvas : Tcanvas;x,y : integer;Mode ,position : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; r : Trect; s : string; + + procedure horz; + begin + r:=Rect(x0,jy1,x0+LargeurCell,jy2); + canvas.FillRect(r); + end; + + procedure devie; + begin + //brush.color:=clblue; + x1:=x0+(largeurCell div 2)+round(1*frXGlob); y1:=jy1; + x2:=x0+largeurCell-round(3*frXGlob); y2:=y0; + x3:=x0+largeurCell; y3:=y0+round(3*frYGlob); + x4:=x0+(largeurCell div 2)+round(1*frXGlob);y4:=jy2-round(1*frYGlob); + canvas.Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; - + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + with canvas do begin Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - x1:=x0+round(3*FrXGlob);y1:=y0; - x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*FrYGlob); - x3:=x0+largeurCell-round(4*FrXGlob);y3:=y0+HauteurCell; - x4:=x0;y4:=y0+round(4*frYGlob); + Brush.Color:=clVoies; + pen.color:=clVoies; + Pen.Mode:=pmCopy; - Brush.Color:=couleur; - pen.color:=couleur; - - PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - end; -end; + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + horz; + if (mode=1) and (position=const_Devie) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + devie; + r:=Rect(x0,jy1,x0+1+(LargeurCell div 2),jy2); + canvas.FillRect(r); + + // effacement du morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x4+round(2*frXGlob);y1:=jy2-round(1*frYGlob); + x2:=x1+round(5*frXGlob);y2:=jy1; + x3:=x2+round(5*frXGlob);y3:=y2; + x4:=x1+round(5*frXGlob);y4:=y1; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; -// courbe bas gauche vers droit Elément 9 -procedure TFormTCO.dessin_infG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); -var jy1,jy2,x0,y0,i,x1,y1,x2,y2,x3,y3,x4,y4 : integer; + // aiguillage droit (sans inversion) dévié (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + devie; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) + then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clYellow;Brush.Color:=clVoies;end; + horz; + // aiguillage droit + x1:=x1-1;y1:=jy1-1; + x2:=x1+10;y2:=y1; + x3:=x2;y3:=y2-3; + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + +// Element 4 +procedure TformTCO.dessin_AigD_PG(Canvas : Tcanvas;x,y,Mode,position : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; + r : Trect; + s : string; + + procedure bande_horz; + begin + // bande horizontale + r:=Rect(x0,jy1,x0+LargeurCell,jy2); + Canvas.FillRect(r); + end; + + procedure deviation; + begin + // déviation + x1:=x0+(largeurCell div 2)+round(1*frXGlob); y1:=jy1+round(1*frYGlob); + x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*frYGlob); + x3:=x0+largeurCell-round(3*frXGlob);y3:=y0+HauteurCell; + x4:=x0+(largeurCell div 2)-round(1*frXGlob);y4:=jy2-round(1*frYGlob); + Canvas.Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + + with canvas do + begin + // efface la cellule + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + Pen.Mode:=pmCopy; + pen.color:=clVoies; + Brush.color:=clVoies; + + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + bande_horz; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + // demi bande droite + r:=Rect(x0,jy1,x0+(LargeurCell div 2),jy2); + Canvas.FillRect(r); + deviation; + // effacement du morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x1;y1:=jy1; + x2:=x1+5;y2:=jy2-1; + x3:=x2+6;y3:=y2; + x4:=x1+6;y4:=y1; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; + + // aiguillage droit (sans inversion) dévié (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + deviation; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then Brush.color:=clAllume else Brush.Color:=couleur; + bande_horz; + + // efface le morceau + x1:=x4;y1:=jy2; + x2:=x1+10;y2:=y1; + x3:=x2;y3:=y2+3; + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + + +// aiguillage pointe à droite, aiguillage droit Element 5 +procedure TFormTCO.dessin_AigPD_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; + r : Trect; + s : string; + + procedure horz; + begin + // bande horizontale + r:=Rect(x0,jy1,x0+LargeurCell,jy2); + Canvas.FillRect(r); + end; + + procedure deviation; + begin + x1:=x0+(largeurCell div 2); y1:=jy1; + x2:=x0+round(3*FrXGlob); y2:=y0; + x3:=x0; y3:=y0+round(3*FrYGlob); + x4:=x0+(largeurCell div 2)-round(1*FrXGlob); y4:=jy2-round(1*FrYGlob); + canvas.Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + jy1:=y0+(HauteurCell div 2)-round(3*FrXGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*FrYGlob); // pos Y de la bande inf + + //Affiche('Position='+IntToSTR(position),clyellow); + inverse:=tco[x,y].inverse; + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + Brush.COlor:=clVoies; + Pen.Mode:=pmCopy; + pen.color:=clVoies; + + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + horz; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + // demi bande droite + r:=Rect(x0+(largeurCell div 2),jy1,x0+LargeurCell,jy2); + Canvas.FillRect(r); + deviation; + + // efface le morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x1-12;y1:=jy1; + x2:=x1+5;y2:=jy2-1; + x3:=x2+6;y3:=y2; + x4:=x1+6;y4:=y1; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; + + // aiguillage droit (sans inversion) ou dévie (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + deviation; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + // efface le morceau + x1:=x4-10;y1:=jy1-1; + x2:=x1+10;y2:=y1; + x3:=x2;y3:=y2-3; + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + + +// coin supérieur gauche (Element 6) +procedure TformTCO.dessin_SupG(Canvas : Tcanvas;x,y : integer;Mode : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; r : Trect; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; - with canvas do begin Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); + if mode=1 then couleur:=clAllume else couleur:=clVoies; Brush.COlor:=Couleur; pen.color:=Couleur; - Pen.Mode:=Mode; + Pen.Mode:=pmCopy; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0+(largeurCell div 2),jy1,x0+LargeurCell,jy2); + r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); FillRect(r); // brush.color:=clblue; - x1:=x0; y1:=y0+HauteurCell-round(4*frYGlob); - x2:=x0+(LargeurCell div 2) ; y2:=jy1; - x3:=x0+(LargeurCell div 2) +round(2*frXGlob); y3:=jy2; - x4:=x0+round(4*frXGlob); y4:=y0+HauteurCell; + x1:=x0+(LargeurCell div 2)-round(1*frXGlob); y1:=jy2-round(2*frYGlob); + x2:=x0;y2:=y0+round(2*frYGlob); + x3:=x0+round(3*frXGlob);y3:=y0; + x4:=x0+(LargeurCell div 2);y4:=jy1; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; +end; + +// Element 7 +procedure TformTCO.dessin_SupD(Canvas : Tcanvas;x,y : integer;Mode : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + if Mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=couleur; + Pen.Mode:=pmCopy; + + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + r:=Rect(x0,jy1,x0+(LargeurCell div 2)+4,jy2); + FillRect(r); + + x1:=x0+(LargeurCell div 2)+round(2*frXGlob);y1:=jy1; + x2:=x0+LargeurCell-round(2*frXGlob);y2:=y0; + x3:=x0+LargeurCell;y3:=y0+round(4*frYGlob); + x4:=x0+(LargeurCell div 2)+round(4*frXGlob);y4:=jy2-round(2*frYGlob); Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); end; end; // courbe: droit vers bas -\ Element 8 -procedure TFormTCO.dessin_infD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode); +procedure TFormTCO.dessin_infD(Canvas : Tcanvas;x,y : integer;Mode : integer); var jy1,jy2,x0,y0,i,x1,y1,x2,y2,x3,y3,x4,y4 : integer; r : Trect; begin @@ -585,8 +1001,9 @@ begin r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); + if Mode=1 then couleur:=clAllume else couleur:=clVoies; Brush.COlor:=Couleur; - Pen.Mode:=Mode; + Pen.Mode:=pmCopy; pen.color:=Couleur; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup @@ -604,271 +1021,178 @@ begin end; end; - -// Element 7 -procedure TformTCO.dessin_SupD(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; - r : Trect; -begin - x0:=(x-1)*LargeurCell; - y0:=(y-1)*HauteurCell; - with canvas do - begin - Brush.Color:=Fond; - r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); - FillRect(r); - - Brush.COlor:=Couleur; - pen.color:=couleur; - Pen.Mode:=Mode; - - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0,jy1,x0+(LargeurCell div 2)+4,jy2); - FillRect(r); - - // brush.color:=clblue; - x1:=x0+(LargeurCell div 2)+round(2*frXGlob);y1:=jy1; - x2:=x0+LargeurCell-round(2*frXGlob);y2:=y0; - x3:=x0+LargeurCell;y3:=y0+round(4*frYGlob); - x4:=x0+(LargeurCell div 2)+round(4*frXGlob);y4:=jy2-round(2*frYGlob); - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; -end; - -// coin supérieur gauche (Element 6) -procedure TformTCO.dessin_SupG(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; +// courbe bas gauche vers droit Elément 9 +procedure TFormTCO.dessin_infG(Canvas : Tcanvas;x,y : integer;Mode : integer); +var jy1,jy2,x0,y0,i,x1,y1,x2,y2,x3,y3,x4,y4 : integer; r : Trect; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + with canvas do begin Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); + if Mode=1 then couleur:=clAllume else couleur:=clVoies; Brush.COlor:=Couleur; pen.color:=Couleur; - Pen.Mode:=Mode; + Pen.Mode:=pmCopy; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); + r:=Rect(x0+(largeurCell div 2),jy1,x0+LargeurCell,jy2); FillRect(r); // brush.color:=clblue; - x1:=x0+(LargeurCell div 2)-round(1*frXGlob); y1:=jy2-round(2*frYGlob); - x2:=x0;y2:=y0+round(2*frYGlob); - x3:=x0+round(3*frXGlob);y3:=y0; - x4:=x0+(LargeurCell div 2);y4:=jy1; + x1:=x0; y1:=y0+HauteurCell-round(4*frYGlob); + x2:=x0+(LargeurCell div 2) ; y2:=jy1; + x3:=x0+(LargeurCell div 2) +round(2*frXGlob); y3:=jy2; + x4:=x0+round(4*frXGlob); y4:=y0+HauteurCell; Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); end; end; -// Element 15 -procedure TFormTCO.dessin_Aig45PG_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; +// élément 10 +procedure TformTCO.dessin_Diag1(Canvas : Tcanvas;x,y : integer;Mode : integer); +var Adr, x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; r : Trect; + s : string; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + with canvas do begin Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - x1:=x0;y1:=y0+hauteurCell-round(3*frYGlob); - x2:=x0+largeurCell-round(3*frXGlob);y2:=y0; - x3:=x0+largeurCell;y3:=y0+round(4*frYGlob); - x4:=x0+round(3*frYGlob);y4:=y0+hauteurCell; - + x1:=x0;y1:=y0+hauteurCell-round(3*FryGlob); + x2:=x0+largeurCell-round(3*FrXGlob);y2:=y0; + x3:=x0+largeurCell;y3:=y0+round(4*FrYGlob); + x4:=x0+round(4*FrXGlob); y4:=y0+hauteurCell; + + if Mode=1 then couleur:=clAllume else couleur:=clVoies; Brush.Color:=couleur; pen.color:=couleur; + PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); - FillRect(r); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x0+round(20*frXGlob);y1:=jy1-round(1*frYGlob); - x2:=x1+round(23*frxGlob);y2:=y1; - x3:=x2;y3:=y2-round(3*frYGlob); - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - - // aiguillage droit - if position=const_Droit then - begin - x1:=x0+round(34*frXGlob);y1:=jy1; - x2:=x1+round(6*frxGlob);y2:=y1; - x3:=x2-round(12*FrxGlob);y3:=y2+round(12*fryGlob); - x4:=x3-round(6*frxGlob);y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; end; end; - -// Element 14 -procedure TFormTCO.dessin_Aig45PD_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; +// élément 11 +procedure TformTCO.dessin_Diag2(Canvas : Tcanvas;x,y : integer;Mode : integer); +var Adr, x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; r : Trect; + s : string; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + with canvas do begin Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - x1:=x0+round(3*frXGlob); y1:=y0; - x2:=x0+largeurCell; y2:=y0+HauteurCell-round(3*fryGlob); - x3:=x0+largeurCell-round(4*frXGlob);y3:=y0+HauteurCell; - x4:=x0; y4:=y0+round(4*frYGlob); + x1:=x0+round(3*FrXGlob);y1:=y0; + x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*FrYGlob); + x3:=x0+largeurCell-round(4*FrXGlob);y3:=y0+HauteurCell; + x4:=x0;y4:=y0+round(4*frYGlob); + if mode=1 then couleur:=clAllume else couleur:=clVoies; Brush.Color:=couleur; pen.color:=couleur; + PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0,jy1,x0+(LargeurCell div 2),jy2); - FillRect(r); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x0+round(2*frXGlob);y1:=jy1-round(1*fryGlob); - x2:=x1+round(23*frxGlob);y2:=y1; - x3:=x2;y3:=y2-round(3*fryGlob); - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - - // aiguillage droit - if position=const_Droit then - begin - x1:=x0+round(10*frXGlob);y1:=jy1; - x2:=x1+round(6*frxGlob);y2:=y1; - x3:=x2+round(12*FrxGlob);y3:=y2+round(12*fryGlob); - x4:=x3-round(5*frxGlob);y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; end; end; -// Elément 13 -procedure TFormTCO.dessin_Aig45PD_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; - r : Trect; -begin - x0:=(x-1)*LargeurCell; - y0:=(y-1)*HauteurCell; - with canvas do - begin - Brush.Color:=Fond; - r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); - FillRect(r); - - x1:=x0;y1:=y0+hauteurCell-round(3*frYGlob); - x2:=x0+largeurCell-round(3*frXGlob);y2:=y0; - x3:=x0+largeurCell;y3:=y0+round(4*FryGlob); - x4:=x0+round(4*frXGlob);y4:=y0+hauteurCell; - - Brush.Color:=couleur; - pen.color:=couleur; - PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0,jy1,x0+(LargeurCell div 2),jy2); - FillRect(r); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x0+round(12*frXGlob);y1:=jy2; - x2:=x1+round(20*frxGlob);y2:=y1; - x3:=x2;y3:=y2+round(3*frYGlob); - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - - // aiguillage droit - if position=const_Droit then - begin - x1:=x0+round(18*frXGlob);y1:=jy1; - x2:=x1+round(5*frxGlob);y2:=y1; - x3:=x2-round(12*FrxGlob);y3:=y2+round(12*fryGlob); - x4:=x3-round(8*frxGlob);y4:=y3; - pen.color:=fond; - Brush.Color:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - end; -end; - // Element 12 aiguillage pointe 45°G vers droit -procedure TFormTCO.dessin_Aig45PG_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); +procedure TFormTCO.dessin_Aig45PG_AG(Canvas : Tcanvas;x,y : integer;Mode,position : integer); var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; r : Trect; + procedure horz; + begin + // bande horizontale + //r:=Rect(x0,jy1,x0+LargeurCell,jy2); + //Canvas.FillRect(r); + + r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); + canvas.FillRect(r); + end; + + procedure diagonale; + begin + x1:=x0+round(3*frXGlob);y1:=y0; + x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*frYGlob); + x3:=x0+largeurCell-round(4*frXGlob); y3:=y0+HauteurCell; + x4:=x0; y4:=y0+round(4*frYGlob); + + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + with canvas do begin + // efface cellule Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - x1:=x0+round(3*frXGlob);y1:=y0; - x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*frYGlob); - x3:=x0+largeurCell-round(4*frXGlob); y3:=y0+HauteurCell; - x4:=x0; y4:=y0+round(4*frYGlob); + Brush.Color:=clVoies; + pen.color:=clVoies; - Brush.Color:=couleur; - pen.color:=couleur; - PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); - - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - r:=Rect(x0+(LargeurCell div 2),jy1,x0+LargeurCell,jy2); - FillRect(r); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x0+round(22*frxGlob);y1:=jy2; //+round(FrYGlob*1); - x2:=x1+round(12*frxGlob);y2:=y1; - x3:=x2;y3:=y2+3; - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + diagonale; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + // morceau de diag à tracer en clAllume + if mode=1 then + begin + x1:=x0+round(3*frXGlob);y1:=y0; + x2:=x0+(largeurCell div 2)+round(7*frXGlob);y2:=jy2;//y2:=y0+(HauteurCell div 2); + x3:=x2-round(9*frXGlob); y3:=y2; + x4:=x0; y4:=y0+round(4*frYGlob); + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + + // efface le morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x0+round(22*frxGlob);y1:=jy2; //+round(FrYGlob*1); + x2:=x1+round(12*frxGlob);y2:=y1; + x3:=x2;y3:=y2+3; + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.COlor:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; end; - // aiguillage droit - if position=const_Droit then + // aiguillage droit (sans inversion) ou dévie (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then begin + horz; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + diagonale; + + // efface le morceau x1:=x0+round(26*frXGlob);y1:=jy1; x2:=x1+round(10*frxGlob);y2:=y1; x3:=x2+round(12*FrxGlob);y3:=y2+round(12*fryGlob); @@ -880,71 +1204,283 @@ begin end; end; -// aiguillage pointe à gauche, aiguillage gauche Element 3 -procedure TFormTCO.dessin_AigPG_AG(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); +// Elément 13 +procedure TFormTCO.dessin_Aig45PD_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; r : Trect; - s : string; + procedure horz; + begin + // bande horizontale + r:=Rect(x0,jy1,x0+(LargeurCell div 2),jy2); + canvas.FillRect(r); + end; + + procedure diagonale; + begin + x1:=x0;y1:=y0+hauteurCell-round(3*frYGlob); + x2:=x0+largeurCell-round(3*frXGlob);y2:=y0; + x3:=x0+largeurCell;y3:=y0+round(4*FryGlob); + x4:=x0+round(4*frXGlob);y4:=y0+hauteurCell; + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; - + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + with canvas do begin + //efface Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - - Brush.Color:=couleur; - pen.color:=couleur; - Pen.Mode:=Mode; - jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf - - r:=Rect(x0,jy1,x0+LargeurCell,jy2); - FillRect(r); - - //brush.color:=clblue; - x1:=x0+(largeurCell div 2)+round(1*frXGlob); y1:=jy1; - x2:=x0+largeurCell-round(3*frXGlob); y2:=y0; - x3:=x0+largeurCell; y3:=y0+round(3*frYGlob); - x4:=x0+(largeurCell div 2)+round(1*frXGlob);y4:=jy2-round(1*frYGlob); - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - - // aiguillage dévié - if position=const_Devie then + + Brush.Color:=clVoies; + pen.color:=clVoies; + + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then begin - x1:=x4+round(2*frXGlob);y1:=jy2-round(1*frYGlob); - x2:=x1+round(5*frXGlob);y2:=jy1; - x3:=x2+round(5*frXGlob);y3:=y2; - x4:=x1+round(5*frXGlob);y4:=y1; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - if position=const_Droit then + diagonale; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + if mode=1 then + begin + // morceau de diag à tracer en clAllume + x1:=x0+largeurCell-round(3*frXGlob);y1:=y0; + x2:=x0+largeurCell;y2:=y0+round(4*FryGlob); + x3:=x0+(largeurCell div 2)+round(4*frXGlob);y3:=jy2; + x4:=x0+(largeurCell div 2)-round(7*frXGlob);y4:=jy2; + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + + // efface le morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + // efface le morceau + x1:=x0+round(12*frXGlob);y1:=jy2; + x2:=x1+round(20*frxGlob);y2:=y1; + x3:=x2;y3:=y2+round(3*frYGlob); + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.Color:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + + // aiguillage droit (sans inversion) ou dévie (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then begin - // aiguillage droit - x1:=x1-1;y1:=jy1-1; - x2:=x1+10;y2:=y1; - x3:=x2;y3:=y2-3; - x4:=x1;y4:=y3; + horz; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + diagonale; + + // efface le morceau + if (position=const_Droit) then + x1:=x0+round(19*frXGlob);y1:=jy1; + x2:=x1+round(6*frxGlob);y2:=y1; + x3:=x2-round(12*FrxGlob);y3:=y2+round(12*fryGlob); + x4:=x3-round(8*frxGlob);y4:=y3; pen.color:=fond; - Brush.COlor:=fond; + Brush.Color:=fond; Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); end; - end; + end; end; - -// aiguillage pointe à droite, aiguillage droit Element 5 -procedure TFormTCO.dessin_AigPD_AD(Canvas : Tcanvas;x,y : integer;couleur : Tcolor;Mode : TPenMode;position : integer); +// Element 14 +procedure TFormTCO.dessin_Aig45PD_AG(Canvas : Tcanvas;x,y : integer;Mode,position : integer); var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; r : Trect; - s : string; + + procedure horz; + begin + r:=Rect(x0,jy1,x0+(LargeurCell div 2),jy2); + canvas.FillRect(r); + end; + + procedure diagonale; + begin + x1:=x0+round(3*frXGlob); y1:=y0; + x2:=x0+largeurCell; y2:=y0+HauteurCell-round(3*fryGlob); + x3:=x0+largeurCell-round(4*frXGlob);y3:=y0+HauteurCell; + x4:=x0; y4:=y0+round(4*frYGlob); + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + Brush.Color:=clVoies; + pen.color:=clVoies; + + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + diagonale; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + + if mode=1 then + begin + // morceau de diagonale à tracer en clAllume + x1:=x0+(largeurCell div 2)-round(8*frXGlob); y1:=jy1; + x2:=x1+round(8*frXGlob); y2:=y1; + x3:=x0+largeurCell; y3:=y0+HauteurCell-round(3*fryGlob); + x4:=x0+largeurCell-round(4*frXGlob);y4:=y0+HauteurCell; + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + // efface le morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + // efface le morceau + x1:=x0+round(2*frXGlob);y1:=jy1-round(1*fryGlob); + x2:=x1+round(23*frxGlob);y2:=y1; + x3:=x2;y3:=y2-round(3*fryGlob); + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.Color:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; + + // aiguillage droit (sans inversion) ou dévie (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + horz; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + diagonale; + // efface le morceau + x1:=x0+round(10*frXGlob);y1:=jy1; + x2:=x1+round(6*frxGlob);y2:=y1; + x3:=x2+round(12*FrxGlob);y3:=y2+round(12*fryGlob); + x4:=x3-round(5*frxGlob);y4:=y3; + pen.color:=fond; + Brush.Color:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + + +// Element 15 +procedure TFormTCO.dessin_Aig45PG_AD(Canvas : Tcanvas;x,y : integer;Mode,position : integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + inverse : boolean; + r : Trect; + + procedure horz; + begin + r:=Rect(x0+(LargeurCell div 2)+1,jy1,x0+LargeurCell,jy2); + canvas.FillRect(r); + end; + + procedure diagonale; + begin + x1:=x0;y1:=y0+hauteurCell-round(3*frYGlob); + x2:=x0+largeurCell-round(3*frXGlob);y2:=y0; + x3:=x0+largeurCell;y3:=y0+round(4*frYGlob); + x4:=x0+round(3*frYGlob);y4:=y0+hauteurCell; + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup + jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf + inverse:=tco[x,y].inverse; + + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + Brush.Color:=clVoies; + pen.color:=clVoies; + + // aiguillage dévié (sans inversion) + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) or + (position=9) then + begin + diagonale; + if (mode=1) and ( ((inverse=false) and (position=const_Devie)) or ((inverse=true) and (position=const_Droit)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + horz; + if mode=1 then + begin + // morceau de diag à tracer en clAllume + x1:=x0;y1:=y0+hauteurCell-round(3*frYGlob); + x2:=x0+(largeurCell div 2);y2:=jy1; + x3:=x2+round(9*frXglob);y3:=y2; + x4:=x0+round(3*frYGlob);y4:=y0+hauteurCell; + canvas.PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + end; + + // efface le morceau + if ((inverse=false) and (position=const_Devie)) or + ((inverse=true) and (position=const_Droit)) then + begin + x1:=x0+round(20*frXGlob);y1:=jy1-round(1*frYGlob); + x2:=x1+round(23*frxGlob);y2:=y1; + x3:=x2;y3:=y2-round(3*frYGlob); + x4:=x1;y4:=y3; + pen.color:=fond; + Brush.Color:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; + + // aiguillage droit (sans inversion) ou dévie (avec inversion) + if ((inverse=false) and (position=const_Droit)) or + ((inverse=true) and (position=const_Devie)) then + begin + horz; + if (mode=1) and ( ((inverse=false) and (position=const_droit)) or ((inverse=true) and (position=const_devie)) ) then begin Pen.color:=clAllume;Brush.color:=ClAllume end else begin Pen.color:=clVoies;Brush.Color:=clVoies;end; + diagonale; + + // efface morceau + x1:=x0+round(34*frXGlob);y1:=jy1; + x2:=x1+round(6*frxGlob);y2:=y1; + x3:=x2-round(12*FrxGlob);y3:=y2+round(12*fryGlob); + x4:=x3-round(6*frxGlob);y4:=y3; + pen.color:=fond; + Brush.Color:=fond; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + end; + end; +end; + +// Element 16 +procedure TFormTCO.dessin_16(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,xbv1,xbv2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + xbv1:=x0+(LargeurCell div 2)-round(3*frXGlob); // pos x de la bande verticale + xbv2:=x0+(LargeurCell div 2)+round(3*frXGlob); // pos x de la bande verticale with canvas do begin @@ -952,57 +1488,32 @@ begin r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - Brush.COlor:=couleur; - Pen.Mode:=Mode; - pen.color:=couleur; + if mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=Couleur; + Pen.Mode:=pmCopy; - jy1:=y0+(HauteurCell div 2)-round(3*FrXGlob); // pos Y de la bande sup - jy2:=y0+(HauteurCell div 2)+round(3*FrYGlob); // pos Y de la bande inf - - r:=Rect(x0,jy1,x0+LargeurCell,jy2); - //FillRect(r); - Rectangle(r); - //brush.color:=clblue; - x1:=x0+(largeurCell div 2); y1:=jy1; - x2:=x0+round(3*FrXGlob); y2:=y0; - x3:=x0; y3:=y0+round(3*FrYGlob); - x4:=x0+(largeurCell div 2)-round(1*FrXGlob); y4:=jy2-round(1*FrYGlob); + // brush.color:=clblue; + x1:=x0; y1:=y0+round(3*frYGlob); + x2:=x0+round(2*frXGlob);y2:=y0; + x3:=x0+(LargeurCell div 2)+round(2*frXGlob);y3:=y0+(HauteurCell div 2); + x4:=x0+(LargeurCell div 2)-round(3*frXGlob);y4:=y3; Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - // aiguillage dévié - if position=const_Devie then - begin - x1:=x1-12;y1:=jy1; - x2:=x1+5;y2:=jy2-1; - x3:=x2+6;y3:=y2; - x4:=x1+6;y4:=y1; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - - // aiguillage droit - if position=const_Droit then - begin - x1:=x4-10;y1:=jy1-1; - x2:=x1+10;y2:=y1; - x3:=x2;y3:=y2-3; - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; + r:=Rect(xbv1,y0+HauteurCell div 2,xbv2,y0+HauteurCell); + FillRect(r); end; end; -// element 2 -procedure TformTCO.dessin_AigG_PD(canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode; position : integer); -var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; +// Element 17 +procedure TFormTCO.dessin_17(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,xbv1,xbv2 : integer; r : Trect; - s : string; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; + xbv1:=x0+(LargeurCell div 2)-round(3*frXGlob); // pos x de la bande verticale + xbv2:=x0+(LargeurCell div 2)+round(3*frXGlob); // pos x de la bande verticale with canvas do begin @@ -1010,103 +1521,184 @@ begin r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - Brush.COlor:=couleur; - Pen.Mode:=Mode; - pen.color:=couleur; + if mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=Couleur; + Pen.Mode:=pmCopy; - // bande horizontale + // brush.color:=clblue; + x1:=x0+largeurCell-round(3*frxGlob); y1:=y0; + x2:=x0+LargeurCell;y2:=y0+round(2*frYGlob); + x3:=x0+(LargeurCell div 2)+round(2*frXGlob);y3:=y0+(HauteurCell div 2); + x4:=x0+(LargeurCell div 2)-round(3*frXGlob);y4:=y3; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + + r:=Rect(xbv1,y0+HauteurCell div 2,xbv2,y0+HauteurCell); + FillRect(r); + end; +end; + +// Elément 18 +procedure TFormTCO.dessin_18(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,xbv1,xbv2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + xbv1:=x0+(LargeurCell div 2)-round(3*frXGlob); // pos x de la bande verticale + xbv2:=x0+(LargeurCell div 2)+round(3*frXGlob); // pos x de la bande verticale + + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + if mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=Couleur; + Pen.Mode:=pmCopy; + + // brush.color:=clblue; + x1:=x0+(largeurCell div 2)-round(3*frxGlob); y1:=y0+(HauteurCell div 2); + x2:=x0+(largeurCell div 2)+round(2*frxGlob); y2:=y1; + x3:=x0+round(2*frXGlob);y3:=y0+HauteurCell; + x4:=x0;y4:=y0+HauteurCell-round(3*frYGlob); + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + + r:=Rect(xbv1,y0+HauteurCell div 2,xbv2,y0); + FillRect(r); + end; +end; + +// Element 19 +procedure TFormTCO.dessin_19(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,xbv1,xbv2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + xbv1:=x0+(LargeurCell div 2)-round(3*frXGlob); // pos x de la bande verticale + xbv2:=x0+(LargeurCell div 2)+round(3*frXGlob); // pos x de la bande verticale + + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + if mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=Couleur; + Pen.Mode:=pmCopy; + + // brush.color:=clblue; + x1:=x0+(largeurCell div 2)-round(3*frxGlob); y1:=y0+(HauteurCell div 2); + x2:=x0+(largeurCell div 2)+round(2*frxGlob); y2:=y1; + x3:=x0+largeurCell;y3:=y0+HauteurCell-round(2*frYGlob); + x4:=x0+largeurCell-round(3*frXGlob);y4:=y0+HauteurCell; + Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); + + r:=Rect(xbv1,y0+HauteurCell div 2,xbv2,y0); + FillRect(r); + end; +end; + +// Element 20 +procedure TFormTCO.dessin_20(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,xbv1,xbv2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + xbv1:=x0+(LargeurCell div 2)-round(3*frXGlob); // pos x de la bande verticale + xbv2:=x0+(LargeurCell div 2)+round(3*frXGlob); // pos x de la bande verticale + + with canvas do + begin + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + if mode=1 then couleur:=clAllume else couleur:=clVoies; + Brush.COlor:=Couleur; + pen.color:=Couleur; + Pen.Mode:=pmCopy; + + r:=Rect(xbv1,y0,xbv2,y0+HauteurCell); + FillRect(r); + end; +end; + +// Element 21 +procedure TFormTCO.dessin_21(Canvas : Tcanvas;x,y,mode: integer); +var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; + r : Trect; +begin + x0:=(x-1)*LargeurCell; + y0:=(y-1)*HauteurCell; + + with canvas do + begin + + Brush.Color:=Fond; + r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); + FillRect(r); + + Brush.Color:=clvoies; + pen.color:=clvoies; + + // diagonale + x1:=x0;y1:=y0+hauteurCell-round(3*FryGlob); + x2:=x0+largeurCell-round(3*FrXGlob);y2:=y0; + x3:=x0+largeurCell;y3:=y0+round(4*FrYGlob); + x4:=x0+round(4*FrXGlob); y4:=y0+hauteurCell; + PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + + // horizontale + Brush.Color:=clvoies; + pen.color:=clvoies; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf r:=Rect(x0,jy1,x0+LargeurCell,jy2); FillRect(r); - - // déviation - x1:=x0+(largeurCell div 2); y1:=jy1+round(1*frYGlob); - x2:=x0-round(1*FrXGlob);y2:=y0+HauteurCell-round(2*FrYGlob); - x3:=x0+round(2*FrXGlob);y3:=y0+HauteurCell; - x4:=x1+round(1*FrXGlob);y4:=jy2; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x1;y1:=jy1; - x2:=x1-6;y2:=jy2; - x3:=x2-6;y3:=y2; - x4:=x1-6;y4:=jy1; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - if position=const_Droit then - begin - // aiguillage droit - x1:=x1+3;y1:=jy2; - x2:=x1-10;y2:=y1; - x3:=x2-5;y3:=y2+3; - x4:=x1-5;y4:=y3; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; + end; end; -// Element 4 -procedure TformTCO.dessin_AigD_PG(Canvas : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode;position : integer); +// Element 22 +procedure TFormTCO.dessin_22(Canvas : Tcanvas;x,y,mode: integer); var x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,jy1,jy2 : integer; r : Trect; - s : string; begin x0:=(x-1)*LargeurCell; y0:=(y-1)*HauteurCell; with canvas do begin + Brush.Color:=Fond; r:=Rect(x0,y0,x0+LargeurCell,y0+HauteurCell); FillRect(r); - Brush.Color:=couleur; - Pen.Mode:=Mode; - pen.color:=couleur; + Brush.Color:=clvoies; + pen.color:=clvoies; - // bande horizontale + // diagonale + x1:=x0+round(3*FrXGlob);y1:=y0; + x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*FrYGlob); + x3:=x0+largeurCell-round(4*FrXGlob);y3:=y0+HauteurCell; + x4:=x0;y4:=y0+round(4*frYGlob); + PolyGon([point(x1,y1),point(x2,y2),point(x3,y3),point(x4,y4)]); + + // horizontale + Brush.Color:=clvoies; + pen.color:=clvoies; jy1:=y0+(HauteurCell div 2)-round(3*frYGlob); // pos Y de la bande sup jy2:=y0+(HauteurCell div 2)+round(3*frYGlob); // pos Y de la bande inf r:=Rect(x0,jy1,x0+LargeurCell,jy2); FillRect(r); - - // déviation - x1:=x0+(largeurCell div 2)+round(1*frXGlob); y1:=jy1+round(1*frYGlob); - x2:=x0+largeurCell;y2:=y0+HauteurCell-round(3*frYGlob); - x3:=x0+largeurCell-round(3*frXGlob);y3:=y0+HauteurCell; - x4:=x0+(largeurCell div 2)-round(1*frXGlob);y4:=jy2-round(1*frYGlob); - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - - // aiguillage dévié - if position=const_Devie then - begin - x1:=x1;y1:=jy1; - x2:=x1+5;y2:=jy2-1; - x3:=x2+6;y3:=y2; - x4:=x1+6;y4:=y1; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; - - if position=const_Droit then - begin - // aiguillage droit - x1:=x4;y1:=jy2; - x2:=x1+10;y2:=y1; - x3:=x2;y3:=y2+3; - x4:=x1;y4:=y3; - pen.color:=fond; - Brush.COlor:=fond; - Polygon([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4)]); - end; + end; end; @@ -1240,6 +1832,23 @@ begin end; end; +procedure affiche_pied_Vertical2G(x,y : integer;FrX,frY : real); +var x1,y1 : integer; +begin + with PcanvasTCO do + begin + Pen.Color:=clOrange; + x1:=12;y1:=35; + moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+0)*frX),y+round((y1+6)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+6)*frY) ); + + moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+1)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+7)*frY) ); + end; +end; + procedure affiche_pied3G_90D(x,y : integer;FrX,frY : real); var x1,y1 : integer; ech : real; @@ -1278,6 +1887,23 @@ begin end; end; +procedure affiche_pied_Vertical3G(x,y : integer;FrX,frY : real); +var x1,y1 : integer; +begin + with PcanvasTCO do + begin + Pen.Color:=clOrange; + x1:=12;y1:=42; + moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+0)*frX),y+round((y1+6)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+6)*frY) ); + + moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+1)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+7)*frY) ); + end; +end; + procedure affiche_pied4G_90G(x,y : integer;FrX,frY : real); var x1,y1 : integer; begin @@ -1314,6 +1940,43 @@ begin end; end; +procedure affiche_pied_Vertical4G(x,y : integer;FrX,frY : real); +var x1,y1 : integer; +begin + with PcanvasTCO do + begin + Pen.Color:=clOrange; + x1:=12;y1:=55; + moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+0)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+7)*frY) ); + + moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+1)*frX),y+round((y1+8)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+8)*frY) ); + end; +end; + +procedure affiche_pied9G_90D(x,y : integer;FrX,frY : real); +var x1,y1 : integer; + var ech : real; +begin + ech:=frY;frY:=frX;FrX:=ech; + with PcanvasTCO do + begin + Pen.Color:=clOrange; + x1:=90;y1:=38; + moveTo( x+round((x1)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+7)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+7)*frX),y+round((y1-60)*fry)); + + moveTo( x+round((x1)*frX),y+round((y1+1)*frY) ); + LineTo( x+round((x1+6)*frX),y+round((y1+1)*frY) ); + LineTo( x+round((x1+6)*frX),y+round((y1-60)*fry) ); + end; +end; + + procedure affiche_pied5G_90D(x,y : integer;FrX,frY : real); var x1,y1 : integer; ech : real; @@ -1352,6 +2015,23 @@ begin end; end; +procedure affiche_pied_Vertical5G(x,y : integer;FrX,frY : real); +var x1,y1 : integer; +begin + with PcanvasTCO do + begin + Pen.Color:=clOrange; + x1:=12;y1:=65; + moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+0)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+7)*frY) ); + + moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+1)*frX),y+round((y1+8)*frY) ); + LineTo( x+round((x1+38)*frX),y+round((y1+8)*frY) ); + end; +end; + procedure affiche_pied7G_90D(x,y : integer;FrX,frY : real); var x1,y1 : integer; ech : real; @@ -1390,22 +2070,20 @@ begin end; end; -procedure affiche_pied9G_90D(x,y : integer;FrX,frY : real); +procedure affiche_pied_Vertical7G(x,y : integer;FrX,frY : real); var x1,y1 : integer; - var ech : real; begin - ech:=frY;frY:=frX;FrX:=ech; with PcanvasTCO do begin Pen.Color:=clOrange; - x1:=90;y1:=38; - moveTo( x+round((x1)*frX),y+round(y1*frY) ); - LineTo( x+round((x1+7)*frX),y+round((y1+0)*frY) ); - LineTo( x+round((x1+7)*frX),y+round((y1-60)*fry)); - - moveTo( x+round((x1)*frX),y+round((y1+1)*frY) ); - LineTo( x+round((x1+6)*frX),y+round((y1+1)*frY) ); - LineTo( x+round((x1+6)*frX),y+round((y1-60)*fry) ); + x1:=12;y1:=75; + moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); + LineTo( x+round((x1+0)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+60)*frX),y+round((y1+7)*frY) ); + + moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); + LineTo( x+round((x1+1)*frX),y+round((y1+8)*frY) ); + LineTo( x+round((x1+60)*frX),y+round((y1+8)*frY) ); end; end; @@ -1428,7 +2106,7 @@ begin end; end; -procedure affiche_pied_VerticalG(x,y : integer;FrX,frY : real); +procedure affiche_pied_Vertical9G(x,y : integer;FrX,frY : real); var x1,y1 : integer; begin with PcanvasTCO do @@ -1437,17 +2115,17 @@ begin x1:=12;y1:=90; moveTo( x+round((x1+0)*frX),y+round(y1*frY) ); LineTo( x+round((x1+0)*frX),y+round((y1+7)*frY) ); - LineTo( x+round((x1+50-12)*frX),y+round((y1+7)*frY) ); + LineTo( x+round((x1+60)*frX),y+round((y1+7)*frY) ); moveTo( x+round((x1+1)*frX),y+round((y1+0)*frY) ); LineTo( x+round((x1+1)*frX),y+round((y1+8)*frY) ); - LineTo( x+round((x1+50-12)*frX),y+round((y1+8)*frY) ); + LineTo( x+round((x1+60)*frX),y+round((y1+8)*frY) ); end; end; // Dessine un feu dans le canvas en x,y , dont l'adresse se trouve à la cellule x,y -procedure dessin_feu(CanvasDest : Tcanvas;x,y : integer; couleur : Tcolor;Mode : TPenMode); +procedure dessin_feu(CanvasDest : Tcanvas;x,y : integer ); var OffsetX,x0,y0,orientation,adresse,i,aspect,TailleX,TailleY,NbCellDest : integer; ImageFeu : Timage; frX,frY : real; @@ -1456,14 +2134,13 @@ begin y0:=(y-1)*HauteurCell; Adresse:=TCO[x,y].Adresse; - //if adresse=0 then exit; - i:=TCO[x,y].indexfeu; + i:=TCO[x,y].indexfeu; // index du feu dans le tableau feuTCO Orientation:=feuTCO[i].FeuOriente; if Orientation=0 then Orientation:=1; // cas d'un feu non encore renseigné - aspect:=feuTCO[i].aspect; - //Affiche(IntToSTR(i)+' '+intToSTR(aspect),clred); + aspect:=feuTCO[i].aspect; + // Affiche(IntToSTR(i)+' '+intToSTR(aspect),clred); offsetX:=0; case aspect of @@ -1492,15 +2169,29 @@ begin if aspect=3 then begin x0:=x0+round(10*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; if aspect=2 then begin x0:=x0+round(10*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; end; + + // décalage en X pour mettre rapprocher le feu du le bord droit de la cellule pour les feux verticaux + if orientation=1 then + begin + if aspect=5 then begin x0:=x0+round(25*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=4 then begin x0:=x0+round(25*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=3 then begin x0:=x0+round(25*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; + if aspect=2 then begin x0:=x0+round(25*frX); y0:=y0+HauteurCell-round(tailleX*frY); end; + end; // orientation verticale if (Orientation=1) then begin - // copie avec mise à l'échelle + // copie avec mise à l'échelle de l'image du feu TransparentBlt(canvasDest.Handle,x0,y0,round(TailleX*frX),round(TailleY*frY), ImageFeu.Canvas.Handle,0,0,TailleX,TailleY,clBlue); PImageTCO.Picture.Bitmap.Modified:=True; // rafraichit l'affichage sinon le stretchblt n'apparaît pas. - if aspect=9 then affiche_pied_VerticalG(x0,y0,frX,frY); + if aspect=9 then affiche_pied_Vertical9G(x0,y0,frX,frY); + if aspect=7 then affiche_pied_Vertical7G(x0,y0,frX,frY); + if aspect=5 then affiche_pied_Vertical5G(x0,y0,frX,frY); + if aspect=4 then affiche_pied_Vertical4G(x0,y0,frX,frY); + if aspect=3 then affiche_pied_Vertical3G(x0,y0,frX,frY); + if aspect=2 then affiche_pied_Vertical2G(x0,y0,frX,frY); end; // orientation 90°G @@ -1603,44 +2294,56 @@ end; // affiche la cellule. x et y en cases -procedure TformTCO.affiche_cellule(x,y : integer;mode : TPenMode); -var i,Xorg,Yorg,adresse,btype,Bimage,aspect,oriente,pos : integer; +procedure TformTCO.affiche_cellule(x,y : integer); +var i,Xorg,Yorg,mode,adresse,btype,Bimage,aspect,oriente,pos : integer; s : string; begin PcanvasTCO.pen.Mode:=PmCopy; adresse:=tco[x,y].Adresse; btype:=tco[x,y].Btype; BImage:=tco[x,y].BImage; - if (bImage>=2) and (btype<=14) then pos:=Aiguillage[adresse].position; + mode:=tco[x,y].mode; + + // récupérer la position de l'aiguillage + if (bImage>=2) and (btype<=14) then + begin + if Adresse<>0 then pos:=Aiguillage[adresse].position + else pos:=9; + end; Xorg:=(x-1)*LargeurCell; Yorg:=(y-1)*HauteurCell; s:=IntToSTR(adresse); - if Btype=2 then s:='A'+s; - if Btype=3 then s:='A'+s+'B'; - i:=Tco[x,y].IndexFeu; if y>1 then if (tco[x,y-1].Bimage=30) and (FeuTCO[i].FeuOriente=1) then exit; case Bimage of // 0 : efface_cellule(PCanvasTCO,x,y,Clyellow,Mode); &&&&&&&&& - 1 : dessin_voie(PCanvasTCO,X,Y,Clyellow,Mode); - 2 : dessin_AigG_PD(PCanvasTCO,X,Y,Clyellow,mode,pos); - 3 : dessin_AigPG_AG(PCanvasTCO,X,Y,Clyellow,mode,pos); - 4 : dessin_AigD_PG(PCanvasTCO,X,Y,Clyellow,Mode,pos); - 5 : dessin_AigPD_AD(PCanvasTCO,X,Y,Clyellow,Mode,pos); - 6 : dessin_SupG(PCanvasTCO,X,Y,Clyellow,Mode); - 7 : dessin_SupD(PCanvasTCO,X,Y,Clyellow,Mode); - 8 : dessin_infD(PCanvasTCO,X,Y,Clyellow,Mode); - 9 : dessin_infG(PCanvasTCO,X,Y,Clyellow,mode); - 10 : dessin_Diag1(PCanvasTCO,X,Y,Clyellow,mode); - 11 : dessin_Diag2(PCanvasTCO,X,Y,Clyellow,mode); - 12 : dessin_Aig45PG_AG(PCanvasTCO,X,Y,Clyellow,mode,pos); - 13 : dessin_Aig45PD_AD(PCanvasTCO,X,Y,Clyellow,mode,pos); - 14 : dessin_Aig45PD_AG(PCanvasTCO,X,Y,Clyellow,mode,pos); - 15 : dessin_Aig45PG_AD(PCanvasTCO,X,Y,Clyellow,mode,pos); - 30 : dessin_feu(PCanvasTCO,X,Y,Clyellow,mode); + 1 : dessin_voie(PCanvasTCO,X,Y,mode); + 2 : dessin_AigG_PD(PCanvasTCO,X,Y,mode,pos); + 3 : dessin_AigPG_AG(PCanvasTCO,X,Y,mode,pos); + 4 : dessin_AigD_PG(PCanvasTCO,X,Y,Mode,pos); + 5 : dessin_AigPD_AD(PCanvasTCO,X,Y,Mode,pos); + 6 : dessin_SupG(PCanvasTCO,X,Y,Mode); + 7 : dessin_SupD(PCanvasTCO,X,Y,Mode); + 8 : dessin_infD(PCanvasTCO,X,Y,Mode); + 9 : dessin_infG(PCanvasTCO,X,Y,mode); + 10 : dessin_Diag1(PCanvasTCO,X,Y,mode); + 11 : dessin_Diag2(PCanvasTCO,X,Y,mode); + 12 : dessin_Aig45PG_AG(PCanvasTCO,X,Y,mode,pos); + 13 : dessin_Aig45PD_AD(PCanvasTCO,X,Y,mode,pos); + 14 : dessin_Aig45PD_AG(PCanvasTCO,X,Y,mode,pos); + 15 : dessin_Aig45PG_AD(PCanvasTCO,X,Y,mode,pos); + 16 : dessin_16(PCanvasTCO,X,Y,mode); + 17 : dessin_17(PCanvasTCO,X,Y,mode); + 18 : dessin_18(PCanvasTCO,X,Y,mode); + 19 : dessin_19(PCanvasTCO,X,Y,mode); + 20 : dessin_20(PCanvasTCO,X,Y,mode); + 21 : dessin_21(PCanvasTCO,X,Y,mode); + 22 : dessin_22(PCanvasTCO,X,Y,mode); + + 30 : dessin_feu(PCanvasTCO,X,Y); end; PCanvasTCO.font.Size:=(LargeurCell div 10)+4 ; @@ -1648,15 +2351,17 @@ begin // affiche le texte des aiguillages if (BImage>=2) and (BImage<29) and (adresse<>0) then - begin // Adresse de l'élément + begin + if Btype<>3 then s:='A'+s else s:='A'+s+'B'; with PCanvasTCO do begin Brush.Color:=fond; Font.Color:=clYellow; x:=0;y:=0; - if Bimage=4 then begin x:=1;y:=0;end; - if Bimage=5 then begin x:=1;y:=HauteurCell-12;end; - if Bimage=12 then begin x:=1;y:=HauteurCell-12;end; + if Bimage=4 then begin x:=1;y:=1;end; + if Bimage=5 then begin x:=1;y:=HauteurCell-round(20*fryGlob);end; + if Bimage=12 then begin x:=1;y:=HauteurCell-round(20*frYGlob);end; + if Bimage=22 then begin x:=LargeurCell-round(30*frxGlob);y:=1;end; TextOut(xOrg+x,yOrg+y,s); exit; end; @@ -1669,7 +2374,7 @@ begin begin Brush.Color:=fond; Font.Color:=clWhite; - TextOut(xOrg+1,yOrg+1,s); + TextOut(xOrg+round(15*frXGlob),yOrg+round(2*fryGlob),s); exit; end; end; @@ -1682,10 +2387,10 @@ begin aspect:=feuTCO[i].aspect; oriente:=Feutco[i].FeuOriente; x:=0;y:=0; - if (aspect=9) and (Oriente=1) then begin x:=LargeurCell-round(18*frXGlob);y:=2*HauteurCell-round(18*fryGlob);end; + if (aspect=9) and (Oriente=1) then begin x:=LargeurCell-round(25*frXGlob);y:=2*HauteurCell-round(25*fryGlob);end; if (aspect=9) and (Oriente=2) then begin x:=round(10*frXGlob);y:=HauteurCell-round(17*frYGlob);end; // orientation G if (aspect=9) and (Oriente=3) then begin x:=LargeurCell+2;y:=1;end; - if (aspect=7) and (Oriente=1) then begin x:=LargeurCell-round(18*frXGlob);y:=HauteurCell+1;end; + if (aspect=7) and (Oriente=1) then begin x:=LargeurCell-round(25*frXGlob);y:=2*HauteurCell-round(25*fryGlob);;end; if (aspect=7) and (Oriente=2) then begin x:=round(10*frXGlob);y:=HauteurCell-round(15*frYGlob);end; if (aspect=7) and (Oriente=3) then begin x:=LargeurCell+2;y:=1;end; if (aspect=5) and (Oriente=1) then begin x:=round(24*frXGlob);y:=1;end; @@ -1711,6 +2416,50 @@ begin //canvasTCO.TextOut(xOrg+1,yOrg+1,IntToSTR(x)); end; +procedure Entoure_cell(x,y : integer); +var r : Trect; + x0,y0 : integer; +begin + x0:=(x-1)*LargeurCell+1; + y0:=(y-1)*HauteurCell+1; + with PcanvasTCO do + begin + Pen.width:=3; + Pen.Color:=clyellow; + Brush.Color:=clBlack; + Brush.Style:=bsSolid; + Pen.Mode:=PmXor; + r:=Rect(x0,y0,x0+largeurCell,y0+LargeurCell); + Rectangle(r); + Pen.width:=1; +// FillRect(r); + end; +end; + +procedure efface_entoure; +begin + if (entoure) then + begin + Entoure_cell(Xentoure,Yentoure); + entoure:=false; + end +end; + +procedure _entoure_cell_clic; +begin + if not(entoure) then + begin + Entoure_cell(XclicCell,YclicCell); + Xentoure:=XClicCell;Yentoure:=YclicCell;entoure:=true; + end + else + begin + Entoure_cell(Xentoure,Yentoure); // efface l'ancien + Entoure_cell(XclicCell,YclicCell); + Xentoure:=XClicCell;Yentoure:=YclicCell; + end; +end; + // affiche le tco suivant le tableau TCO procedure TformTCO.Affiche_TCO ; var x,y,x0,y0,DimX,DimY : integer; @@ -1732,7 +2481,7 @@ begin calcul_reduction(frxGlob,fryGlob,LargeurCell,HauteurCell,ZoomMax,ZoomMax); //Affiche(formatfloat('0.000000',frxGlob),clyellow); - + //effacer tout with PcanvasTCO do begin @@ -1751,7 +2500,7 @@ begin for y:=1 to NbreCellY do for x:=1 to NbreCellX do begin - if TCO[x,y].BImage<>30 then affiche_cellule(x,y,PmCopy); + if TCO[x,y].BImage<>30 then affiche_cellule(x,y); end; PCanvasTCO.Font.Size:=8; @@ -1759,7 +2508,7 @@ begin for y:=1 to NbreCellY do for x:=1 to NbreCellX do begin - if TCO[x,y].BImage=30 then affiche_cellule(x,y,PmCopy); + if TCO[x,y].BImage=30 then affiche_cellule(x,y); s:=Tco[x,y].Texte; if s<>'' then begin @@ -1795,6 +2544,12 @@ begin xMaxiSel:=0;yMaxiSel:=0; SelectionAffichee:=false; ImageTCO.Canvas.font.Name:='Arial'; + clAllume:=clYellow; + clVoies:=clOrange; + clGrille:=$404040; + // évite le clignotement pendant les affichages + DoubleBuffered:=true; + controlStyle:=controlStyle+[csOpaque]; end; // clic gauche sur image @@ -1802,8 +2557,15 @@ procedure TFormTCO.ImageTCOClick(Sender: TObject); var Position: TPoint; i ,adresse,Bimage : integer; s : string; + menuItem: TmenuItem; begin GetCursorPos(Position); + { + Menuitem:=TmenuItem.Create(popupMenu1); + MenuItem.caption:='Element'; + // MenuItem.onclick:= + MenuItem.Tag:=GetTickCount; + popupMenu1.Items.Add(MenuItem); } Position:=ImageTCO.screenToCLient(Position); //Affiche(IntToSTR(position.x),clyellow); @@ -1814,37 +2576,28 @@ begin if YclicCell>NbreCellY then exit; Bimage:=tco[XClicCell,YClicCell].Bimage; - - if not(SelectionAffichee) then // si la sélection bleue n'est pas affichée + if (bimage=2) or (bimage=3) or (bimage=4) or (bimage=5) or (bimage=12) or (bimage=13) + or (bimage=14) or (bimage=15) then begin - if not(entoure) then // si la cellule n'avait pas été entourée - begin - Entoure_cell(XclicCell,YclicCell); - entoure:=true; - Xentoure:=XClicCell;Yentoure:=YclicCell; - end - else - begin - Entoure_cell(Xentoure,Yentoure); // efface l'ancien - Entoure_cell(XclicCell,YclicCell); - Xentoure:=XClicCell;Yentoure:=YclicCell; - end; + CheckPinv.enabled:=true ; + CheckPinv.checked:=TCO[XClicCell,YClicCell].inverse; + end + else CheckPinv.enabled:=false; - if (Bimage=1) or (Bimage=0) then - begin - s:=Tco[XClicCell,YClicCell].Texte; - EditTexte.Text:=s; - EditTexte.Visible:=true - end - else EditTexte.Visible:=false; - - end; + if not(selectionaffichee) then _entoure_cell_clic; + + if (Bimage=1) or (Bimage=0) then + begin + s:=Tco[XClicCell,YClicCell].Texte; + EditTexte.Text:=s; + EditTexte.Visible:=true + end + else EditTexte.Visible:=false; LabelX.caption:=IntToSTR(XclicCell); LabelY.caption:=IntToSTR(YclicCell); XclicCellInserer:=XClicCell; YclicCellInserer:=YClicCell; - //Entoure_cell(XclicCellInserer,YclicCellInserer); EditAdrElement.Text:=IntToSTR(tco[XClicCellInserer,YClicCellInserer].Adresse); EdittypeElement.Text:=IntToSTR(tco[XClicCellInserer,YClicCellInserer].BType); @@ -1861,57 +2614,293 @@ begin //Affiche('Evt ImageTCOclick',clYellow); end; -procedure TformTCO.Entoure_cell(x,y : integer); -var r : Trect; - x0,y0 : integer; -begin - x0:=(x-1)*LargeurCell+1; - y0:=(y-1)*HauteurCell+1; - with ImageTCO.canvas do - begin - Pen.width:=3; - Pen.Color:=clyellow; - Brush.Color:=clBlack; - Brush.Style:=bsSolid; - Pen.Mode:=PmXor; - r:=Rect(x0,y0,x0+largeurCell,y0+LargeurCell); - Rectangle(r); - Pen.width:=1; -// FillRect(r); - end; + + + +// trouve le détecteur det dans le TCO et renvoie X et Y +procedure trouve_det(det : integer;var x,y : integer); +var xc,yc : integer; + trouve : boolean; +begin + yc:=1; + repeat + xc:=0; + repeat + inc(xc); + trouve:=tco[xc,yc].Adresse=det; + until (xc=NbreCellX+1) or trouve; + inc(yc); + until (yc=NbreCellY+1) or trouve; + dec(yc); + if trouve then + begin + x:=xc; + y:=yc; + end + else + begin + x:=0; + y:=0; + end; end; +// allume ou éteint (mode) la zone de det1 à det2 sur le TCO +procedure zone_TCO(det1,det2,mode : integer); +var i,x,y,ancienY,ancien2Y,ancienX,ancien2X,Xdet1,Ydet1,Xdet2,Ydet2,Bimage,adresse, + pos,pos2 : integer; + trouve : boolean; + s : string; +begin + // trouver le détecteur det1 + trouve_det(det1,Xdet1,Ydet1); + if (Xdet1=0) or (Ydet1=0) then exit; + + //Affiche('trouvé '+intToSTR(det1)+' en '+IntToSTR(xDet1)+'/'+intToSTR(ydet1),clyellow); + trouve_det(det2,Xdet2,Ydet2); + if (Xdet2=0) or (Ydet2=0) then exit; + + // inverser coordonnées et détecteurs si à l'envers + if xDet2NbreCellX then exit; if YclicCell>NbreCellY then exit; - + + //Affiche('MouseMove',clyellow); //Affiche('X='+IntToSTR(XClicCell)+' Y='+intToSTR(YclicCell),clyellow); x0:=(XclicCell-1)*LargeurCell; @@ -2606,7 +3734,8 @@ begin if yMaxiSelNbreCellX) or (yClicCell=0) or (yClicCell>NbreCelly) then exit; + Bimage:=Tco[xClicCell,yClicCell].Bimage; + if (bimage=2) or (bimage=3) or (bimage=4) or (bimage=5) or (bimage=12) or (bimage=13) + or (bimage=14) or (bimage=15) then + begin + TCO[xClicCell,yClicCell].inverse:=CheckPinv.checked; + TCO_modifie:=true; + end; +end; + +procedure TFormTCO.ButtonMasquerClick(Sender: TObject); +begin + Panel1.Hide; + ButtonAfficheBandeau.visible:=true; + ScrollBox.Height:=ClientHeight-40; +end; + +procedure TFormTCO.ButtonAfficheBandeauClick(Sender: TObject); +begin + Panel1.Show; + ButtonAfficheBandeau.visible:=false; + ScrollBox.Height:=ClientHeight-Panel1.Height-40; +end; + +procedure TFormTCO.FormResize(Sender: TObject); +begin + ScrollBox.Height:=ClientHeight-Panel1.Height-40; +end; + + begin + + end. diff --git a/tco.cfg b/tco.cfg index 0333397..2fd2536 100644 --- a/tco.cfg +++ b/tco.cfg @@ -1,12 +1,32 @@ -/type(0=rien 1=voie/détecteur 2=aig 3=aigBis , adresse , image=1 à 10 +/ Couleurs : fond, voies, détecteur_activé, grille +000040 +0077FF +00FFFF +404040 +/ Taille de la matrice x,y +43,21 +/ Largeur et hauteur des cellules en pixels +32,32 /Dalle TCO -(2,123,1)(2,100,1)(1,513,5)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(2,124,2)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,8)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,9)(1,000,5)(2,000,1)(1,000,5)(0,000,8)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(2,007,0)(1,520,0)(2,020,0)(2,021,0)(2,028,0)(2,026,0)(0,000,10)(2,027,0)(2,025,0)(2,031,0)(1,534,0)(2,023,0)(0,000,11)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(1,000,5)(2,000,3)(1,000,5)(1,000,5)(1,000,5)(1,000,5)(1,000,5)(1,000,5)(1,000,5)(2,000,1)(1,000,5)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) -(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0)(0,000,0) +/ type,adresse,image,inversion aiguillage,Orientation du feu, pied du feu , [texte] +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,177,30,0,2,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,Voie 1)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,161,30,0,2,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,569,1,0,0,0,)(1,000,1,0,0,0,)(2,023,4,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,538,1,0,0,0,)(1,000,1,0,0,0,)(2,032,2,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,11,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,Voie 2)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,10,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(2,021,5,1,0,0,)(2,025,4,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,570,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(2,028,2,0,0,0,)(2,030,3,1,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,539,1,0,0,0,)(1,000,1,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,225,30,0,2,0,)(0,000,0,0,0,0,)(0,000,11,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,185,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,Voie 3)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,193,30,0,2,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,10,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,169,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(2,020,4,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,547,1,0,0,0,)(1,000,1,0,0,0,)(1,561,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(2,022,5,0,0,0,)(1,000,1,0,0,0,)(2,024,4,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,513,1,0,0,0,)(1,513,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,516,1,0,0,0,)(1,000,1,0,0,0,)(2,029,2,0,0,0,)(0,000,7,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,11,0,0,0,)(0,233,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,11,0,0,0,)(0,209,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,Voie 4)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,201,30,0,2,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,10,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,6,0,0,0,)(1,000,1,0,0,0,)(1,548,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(0,000,8,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,026,12,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,514,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,517,1,0,0,0,)(1,000,1,0,0,0,)(2,031,2,0,0,0,)(2,027,2,0,0,0,)(0,000,7,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,241,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,16,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,11,0,0,0,)(0,217,30,0,3,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,Voie 5)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,10,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,20,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,6,0,0,0,)(1,515,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,000,1,0,0,0,)(1,510,1,0,0,0,)(0,000,7,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,20,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,209,30,0,1,0,)(0,000,20,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,20,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,20,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,) +(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)(0,000,0,0,0,0,)