diff --git a/Notice d'utilisation des signaux_complexes_GL_V4.3.pdf b/Notice d'utilisation des signaux_complexes_GL_V4.4.pdf similarity index 73% rename from Notice d'utilisation des signaux_complexes_GL_V4.3.pdf rename to Notice d'utilisation des signaux_complexes_GL_V4.4.pdf index 118dbd2..319a96e 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V4.3.pdf and b/Notice d'utilisation des signaux_complexes_GL_V4.4.pdf differ diff --git a/UnitConfig.dcu b/UnitConfig.dcu index fc378c2..7f8ed78 100644 Binary files a/UnitConfig.dcu and b/UnitConfig.dcu differ diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 0e1e336..6316367 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1554,10 +1554,11 @@ object FormConfig: TFormConfig WordWrap = True end object ButtonAppliquerEtFermer: TButton - Left = 384 + Left = 240 Top = 512 Width = 201 Height = 25 + Hint = 'Enregistre la configuration et ferme la fen'#234'tre' Caption = 'Enregistre la configuration et Fermer' ParentShowHint = False ShowHint = True @@ -1565,11 +1566,14 @@ object FormConfig: TFormConfig OnClick = ButtonAppliquerEtFermerClick end object Button2: TButton - Left = 24 + Left = 8 Top = 512 Width = 201 Height = 25 + Hint = 'Ferme la fen'#234'tre sans enregistrer la configuration' Caption = 'Fermer sans enregistrer la configuration' + ParentShowHint = False + ShowHint = True TabOrder = 1 OnClick = Button2Click end @@ -1578,7 +1582,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 497 - ActivePage = TabSheetAutonome + ActivePage = TabSheetSig Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -1956,7 +1960,6 @@ object FormConfig: TFormConfig Width = 25 Height = 21 ParentShowHint = False - ReadOnly = True ShowHint = False TabOrder = 1 end @@ -3195,8 +3198,8 @@ object FormConfig: TFormConfig 'ur afficher la description de l'#39'action' end object GroupBox13: TGroupBox - Left = 360 - Top = 32 + Left = 352 + Top = 40 Width = 257 Height = 433 Caption = 'Description de l'#39'actionneur ' @@ -3215,8 +3218,11 @@ object FormConfig: TFormConfig Left = 8 Top = 16 Width = 225 - Height = 321 + Height = 345 + Hint = 'D'#233'tecteur 1 zone de fermeture' Caption = 'Actionneurs gestion passage '#224' niveau' + ParentShowHint = False + ShowHint = True TabOrder = 2 object Label21: TLabel Left = 8 @@ -3266,6 +3272,54 @@ object FormConfig: TFormConfig Height = 13 Caption = 'Voie 4' end + object Label45: TLabel + Left = 64 + Top = 216 + Width = 54 + Height = 13 + Caption = 'Zone ferme' + end + object Label46: TLabel + Left = 152 + Top = 216 + Width = 55 + Height = 13 + Caption = 'Zone ouvre' + end + object Label47: TLabel + Left = 8 + Top = 244 + Width = 30 + Height = 13 + Caption = 'Voie 1' + end + object Label48: TLabel + Left = 8 + Top = 268 + Width = 30 + Height = 13 + Caption = 'Voie 2' + end + object Label49: TLabel + Left = 8 + Top = 292 + Width = 30 + Height = 13 + Caption = 'Voie 3' + end + object Label50: TLabel + Left = 8 + Top = 316 + Width = 30 + Height = 13 + Caption = 'Voie 4' + end + object Shape2: TShape + Left = 64 + Top = 233 + Width = 150 + Height = 2 + end object EditAdrFerme: TEdit Left = 120 Top = 24 @@ -3378,10 +3432,150 @@ object FormConfig: TFormConfig TabOrder = 13 OnChange = EditV4OChange end + object EditZdet1V1F: TEdit + Left = 64 + Top = 240 + Width = 33 + Height = 21 + TabOrder = 14 + OnChange = EditZdet1V1FChange + end + object EditZdet1V1O: TEdit + Left = 152 + Top = 240 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' + TabOrder = 15 + OnChange = EditZdet1V1OChange + end + object EditZdet2V1F: TEdit + Left = 96 + Top = 240 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone de fermeture' + TabOrder = 16 + OnChange = EditZdet2V1FChange + end + object EditZdet2V1O: TEdit + Left = 184 + Top = 240 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' + TabOrder = 17 + OnChange = EditZdet2V1OChange + end + object EditZdet1V2F: TEdit + Left = 64 + Top = 264 + Width = 33 + Height = 21 + TabOrder = 18 + OnChange = EditZdet1V2FChange + end + object EditZdet2V2F: TEdit + Left = 96 + Top = 264 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone de fermeture' + TabOrder = 19 + OnChange = EditZdet2V2FChange + end + object EditZdet1V2O: TEdit + Left = 152 + Top = 264 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' + TabOrder = 20 + OnChange = EditZdet1V2OChange + end + object EditZdet2V2O: TEdit + Left = 184 + Top = 264 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' + TabOrder = 21 + OnChange = EditZdet2V2OChange + end + object EditZdet1V3F: TEdit + Left = 64 + Top = 288 + Width = 33 + Height = 21 + TabOrder = 22 + OnChange = EditZdet1V3FChange + end + object EditZdet2V3F: TEdit + Left = 96 + Top = 288 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone de fermeture' + TabOrder = 23 + OnChange = EditZdet2V3FChange + end + object EditZdet1V3O: TEdit + Left = 152 + Top = 288 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' + TabOrder = 24 + OnChange = EditZdet1V3OChange + end + object EditZdet2V3O: TEdit + Left = 184 + Top = 288 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' + TabOrder = 25 + OnChange = EditZdet2V3OChange + end + object EditZdet1V4F: TEdit + Left = 64 + Top = 312 + Width = 33 + Height = 21 + TabOrder = 26 + OnChange = EditZdet1V4FChange + end + object EditZdet2V4F: TEdit + Left = 96 + Top = 312 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone de fermeture' + TabOrder = 27 + OnChange = EditZdet2V4FChange + end + object EditZdet1V4O: TEdit + Left = 152 + Top = 312 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' + TabOrder = 28 + OnChange = EditZdet1V4OChange + end + object EditZdet2V4O: TEdit + Left = 184 + Top = 312 + Width = 33 + Height = 21 + Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' + TabOrder = 29 + OnChange = EditZdet2V4OChange + end end object GroupBoxRadio: TGroupBox - Left = 16 - Top = 16 + Left = 168 + Top = 24 Width = 225 Height = 73 Caption = 'Type d'#39'actionneur ' @@ -3415,8 +3609,8 @@ object FormConfig: TFormConfig end end object GroupBoxAct: TGroupBox - Left = 16 - Top = 92 + Left = 112 + Top = 12 Width = 225 Height = 293 Caption = 'Actionneur fonction de locomotive ' @@ -3816,8 +4010,20 @@ object FormConfig: TFormConfig end end end + object ButtonEnregistre: TButton + Left = 472 + Top = 512 + Width = 169 + Height = 25 + Hint = 'Enregistre la configuration sans fermer la fen'#234'tre' + Caption = 'Enregistre la configuration' + ParentShowHint = False + ShowHint = True + TabOrder = 3 + OnClick = ButtonEnregistreClick + end object OpenDialogSon: TOpenDialog - Left = 604 - Top = 508 + Left = 668 + Top = 468 end end diff --git a/UnitConfig.pas b/UnitConfig.pas index 9ea6e2a..7337887 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -256,6 +256,30 @@ type EditNbCantons: TEdit; Label44: TLabel; CheckPosAig: TCheckBox; + ButtonEnregistre: TButton; + Label45: TLabel; + Label46: TLabel; + Label47: TLabel; + Label48: TLabel; + Label49: TLabel; + Label50: TLabel; + Shape2: TShape; + EditZdet1V1F: TEdit; + EditZdet1V1O: TEdit; + EditZdet2V1F: TEdit; + EditZdet2V1O: TEdit; + EditZdet1V2F: TEdit; + EditZdet2V2F: TEdit; + EditZdet1V2O: TEdit; + EditZdet2V2O: TEdit; + EditZdet1V3F: TEdit; + EditZdet2V3F: TEdit; + EditZdet1V3O: TEdit; + EditZdet2V3O: TEdit; + EditZdet1V4F: TEdit; + EditZdet2V4F: TEdit; + EditZdet1V4O: TEdit; + EditZdet2V4O: TEdit; procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); @@ -361,6 +385,23 @@ type Shift: TShiftState); procedure RichSigKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure ButtonEnregistreClick(Sender: TObject); + procedure EditZdet1V1FChange(Sender: TObject); + procedure EditZdet2V1FChange(Sender: TObject); + procedure EditZdet1V1OChange(Sender: TObject); + procedure EditZdet2V1OChange(Sender: TObject); + procedure EditZdet1V2FChange(Sender: TObject); + procedure EditZdet2V2FChange(Sender: TObject); + procedure EditZdet1V2OChange(Sender: TObject); + procedure EditZdet2V2OChange(Sender: TObject); + procedure EditZdet1V3FChange(Sender: TObject); + procedure EditZdet2V3FChange(Sender: TObject); + procedure EditZdet1V3OChange(Sender: TObject); + procedure EditZdet2V3OChange(Sender: TObject); + procedure EditZdet1V4FChange(Sender: TObject); + procedure EditZdet2V4FChange(Sender: TObject); + procedure EditZdet1V4OChange(Sender: TObject); + procedure EditZdet2V4OChange(Sender: TObject); private { Déclarations privées } public @@ -408,7 +449,8 @@ var LigneCliqueePN,AncLigneCliqueePN,clicMemo,Nb_cantons_Sig, ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig, ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,Adressefeuclic,NumTrameCDM : integer; - ack_cdm,clicliste,entreeTCO,affevt,config_modifie,clicproprietes,confasauver : boolean; + ack_cdm,clicliste,entreeTCO,affevt,config_modifie,clicproprietes,confasauver, + modif_branches : boolean; fichier : text; function config_com(s : string) : boolean; @@ -890,7 +932,8 @@ begin if s[1]<>'A' then begin Affiche('Erreur 674 ligne '+chaine_signal,clred);exit;end; delete(s,1,1); val(s,adr,erreur); // adresse - c:=s[erreur]; // type + c:=#0; + if erreur<>0 then c:=s[erreur]; // type setlength(feux[i].AigDirection[k],j+1); // augmenter le tableau dynamique feux[i].AigDirection[k][j].PosAig:=c; feux[i].AigDirection[k][j].Adresse:=adr; @@ -1125,11 +1168,29 @@ begin begin NbVoies:=Tablo_PN[i].NbVoies; s:=''; - for voie:=1 to NbVoies do + + // par actionneur + if tablo_PN[i].Voie[1].ActFerme<>0 then begin - s:=s+'('+intToSTR(tablo_PN[i].Voie[voie].ActFerme)+','+intToSTR(tablo_PN[i].Voie[voie].ActOuvre)+')'; - if voie0 then Tablo_actionneur[maxTablo_act].det:=sa[erreur]='Z' + else Affiche('Erreur actionneur '+sOrigine,clred); delete(sa,1,erreur); s:=sa; end; @@ -1561,18 +1623,41 @@ begin NbreVoies:=0; repeat inc(NbreVoies); - //Affiche('NbreVoies='+intToSTR(NbreVoies),clyellow); - //SetLength(Tablo_PN[1].Voie,1); Delete(s,1,1); // supprime ( - val(s,j,erreur); + // déterminer si il y a un - avant le ) + j:=pos(')',s); + i:=pos('-',s); + if (i0) then + begin + // zone de détection + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].detZ1F:=j; + delete(s,1,erreur); - Tablo_PN[NbrePN].voie[NbreVoies].ActFerme:=j; + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].detZ2F:=j; + delete(s,1,erreur); - // Affiche('Ferme='+intToSTR(j),clyellow); - i:=pos(',',s);Delete(S,1,i); - val(s,j,erreur); - Tablo_PN[NbrePN].voie[NbreVoies].ActOuvre:=j; - // Affiche('Ouvre='+intToSTR(j),clyellow); + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].detZ1O:=j; + delete(s,1,erreur); + + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].detZ2O:=j; + end + else + begin + // actionneurs + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].ActFerme:=j; + // Affiche('Ferme='+intToSTR(j),clyellow); + i:=pos(',',s); + Delete(S,1,i); + val(s,j,erreur); + Tablo_PN[NbrePN].voie[NbreVoies].ActOuvre:=j; + // Affiche('Ouvre='+intToSTR(j),clyellow); + end; + i:=pos(')',s);Delete(S,1,i); i:=pos(',',s);Delete(S,1,i); Tablo_PN[NbrePN].voie[NbreVoies].PresTrain:=false; @@ -1802,7 +1887,8 @@ begin delete(enregistrement,1,1); Val(enregistrement,adr,erreur); aiguillage[maxaiguillage].tjsInt:=adr; - c:=enregistrement[erreur]; + c:=#0; + if erreur<>0 then c:=enregistrement[erreur]; if ((c<>'S') and (c<>'D')) then begin c:=' ';Affiche('Erreur paramètre L '+sOrigine,clred); @@ -3454,25 +3540,60 @@ begin EditCmdFerme.text:=s; if Tablo_PN[i].CommandeOuvre=2 then s:='+' else s:='-'; EditCdeOuvre.text:=s; - EditV1F.text:=intToSTR(Tablo_PN[i].voie[1].ActFerme); - EditV1O.text:=intToSTR(Tablo_PN[i].voie[1].ActOuvre); - v:=Tablo_PN[i].nbvoies; - if v>=2 then + + // par actionneur + if Tablo_PN[i].voie[1].ActFerme<>0 then begin - EditV2F.text:=intToSTR(Tablo_PN[i].voie[2].ActFerme); - EditV2O.text:=intToSTR(Tablo_PN[i].voie[2].ActOuvre); - end; - if v>=3 then + EditV1F.text:=intToSTR(Tablo_PN[i].voie[1].ActFerme); + EditV1O.text:=intToSTR(Tablo_PN[i].voie[1].ActOuvre); + v:=Tablo_PN[i].nbvoies; + if v>=2 then + begin + EditV2F.text:=intToSTR(Tablo_PN[i].voie[2].ActFerme); + EditV2O.text:=intToSTR(Tablo_PN[i].voie[2].ActOuvre); + end; + if v>=3 then + begin + EditV3F.text:=intToSTR(Tablo_PN[i].voie[3].ActFerme); + EditV3O.text:=intToSTR(Tablo_PN[i].voie[3].ActOuvre); + end; + if v>=4 then + begin + EditV4F.text:=intToSTR(Tablo_PN[i].voie[4].ActFerme); + EditV4O.text:=intToSTR(Tablo_PN[i].voie[4].ActOuvre); + end; + end + else begin - EditV3F.text:=intToSTR(Tablo_PN[i].voie[3].ActFerme); - EditV3O.text:=intToSTR(Tablo_PN[i].voie[3].ActOuvre); + // par zone de détecteurs + v:=Tablo_PN[i].nbvoies; + EditZdet1V1F.text:=intToSTR(Tablo_PN[i].voie[1].detZ1F); + EditZdet2V1F.text:=intToSTR(Tablo_PN[i].voie[1].detZ2F); + EditZdet1V1O.text:=intToSTR(Tablo_PN[i].voie[1].detZ1O); + EditZdet2V1O.text:=intToSTR(Tablo_PN[i].voie[1].detZ2O); + if v>=2 then + begin + EditZdet1V2F.text:=intToSTR(Tablo_PN[i].voie[2].detZ1F); + EditZdet2V2F.text:=intToSTR(Tablo_PN[i].voie[2].detZ2F); + EditZdet1V2O.text:=intToSTR(Tablo_PN[i].voie[2].detZ1O); + EditZdet2V2O.text:=intToSTR(Tablo_PN[i].voie[2].detZ2O); + end; + if v>=3 then + begin + EditZdet1V3F.text:=intToSTR(Tablo_PN[i].voie[3].detZ1F); + EditZdet2V3F.text:=intToSTR(Tablo_PN[i].voie[3].detZ2F); + EditZdet1V3O.text:=intToSTR(Tablo_PN[i].voie[3].detZ1O); + EditZdet2V3O.text:=intToSTR(Tablo_PN[i].voie[3].detZ2O); + end; + if v>=4 then + begin + EditZdet1V4F.text:=intToSTR(Tablo_PN[i].voie[4].detZ1F); + EditZdet2V4F.text:=intToSTR(Tablo_PN[i].voie[4].detZ2F); + EditZdet1V4O.text:=intToSTR(Tablo_PN[i].voie[4].detZ1O); + EditZdet2V4O.text:=intToSTR(Tablo_PN[i].voie[4].detZ2O); + end; end; - if v>=4 then - begin - EditV4F.text:=intToSTR(Tablo_PN[i].voie[4].ActFerme); - EditV4O.text:=intToSTR(Tablo_PN[i].voie[4].ActOuvre); - end; - end; + end; end end; @@ -3532,10 +3653,11 @@ begin raz_champs_aig; ComboBoxAig.ItemIndex:=-1; formconfig.ComboBoxDD.ItemIndex:=-1; - + with Formconfig.RichAig do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée //Affiche('numéro de la ligne cliquée '+intToStr(lc),clyellow); s:=Uppercase(Lines[lc]); // ligne cliquée if s='' then @@ -4024,21 +4146,22 @@ end; // cliqué sur liste feux procedure TFormConfig.RichSigMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var lc : integer; +var lc,i : integer; begin clicliste:=true; raz_champs_sig; with Formconfig.RichSig do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée //Affiche('numéro de la ligne cliquée '+intToStr(lc),clyellow); clicListeFeu(feux[lc+1].adresse); end; end; -procedure Det1; +procedure TFormConfig.EditDet1Change(Sender: TObject); var s : string; i,erreur : integer; begin @@ -4060,11 +4183,6 @@ begin end; end; -procedure TFormConfig.EditDet1Change(Sender: TObject); -begin - Det1; -end; - procedure TFormConfig.EditTempoFeuChange(Sender: TObject); var i,erreur : integer; s : string; @@ -4441,14 +4559,15 @@ end; procedure TFormConfig.RichActMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var ligne : integer; +var ligne,i : integer; begin clicliste:=true; LabelInfo.caption:=''; raz_champs_act; with RichAct do begin - ligne:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + ligne:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée if ligne-1 then RE_ColorLine(RichAct,AncligneClicAct,ClAqua); @@ -4953,7 +5072,7 @@ end; procedure TFormConfig.RichPNMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var ligne : integer; +var i,ligne : integer; begin clicliste:=true; LabelInfo.caption:=''; @@ -4961,11 +5080,21 @@ begin editV2F.Text:='';editV2O.Text:=''; editV3F.Text:='';editV3O.Text:=''; editV4F.Text:='';editV4O.Text:=''; + EditZdet1V1F.text:='';EditZdet2V1F.text:=''; + EditZdet1V1O.text:='';EditZdet2V1O.text:=''; + EditZdet1V2F.text:='';EditZdet2V2F.text:=''; + EditZdet1V2O.text:='';EditZdet2V2O.text:=''; + EditZdet1V3F.text:='';EditZdet2V3F.text:=''; + EditZdet1V3O.text:='';EditZdet2V3O.text:=''; + EditZdet1V4F.text:='';EditZdet2V4F.text:=''; + EditZdet1V4O.text:='';EditZdet2V4O.text:=''; + editAdrFerme.Text:='';EditCmdFerme.text:=''; editAdrOuvre.Text:='';EditCdeOuvre.text:=''; with RichPN do begin - ligne:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + ligne:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée if ligne-1 then RE_ColorLine(RichPN,AncligneCliqueePN,ClAqua); @@ -6954,6 +7083,7 @@ begin begin labelResult.Caption:='Syntaxe correcte'; config_modifie:=true; + modif_branches:=false; end else labelResult.Caption:='Erreur de syntaxe'; end; @@ -7084,14 +7214,15 @@ end; procedure TFormConfig.RichBrancheMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var curseur,lc : integer; +var i,curseur,lc : integer; begin if clicListe then exit; clicListe:=true; if affevt then affiche('Evt RichBranche clic',clyellow); with Formconfig.RichBranche do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée if lines[lc]<>'' then LabelNumBranche.Caption:='Branche n°'+intToSTR(lc+1) else LabelNumBranche.Caption:=''; AncligneClicBr:=ligneClicBr; ligneClicBr:=lc; @@ -7131,7 +7262,8 @@ begin if (ligneClicSig<0) or clicListe then exit; if affevt then affiche('Evt MemoCarre change',clyellow); - clicMemo:=MemoCarre.Perform(EM_LINEFROMCHAR,-1,0); // numéro de la ligne du curseur + j:=MemoCarre.Selstart; + clicMemo:=MemoCarre.Perform(EM_LINEFROMCHAR,j,0); // numéro de la ligne du curseur aspect:=feux[ligneClicSig+1].aspect; dir:=aspect>10; @@ -7169,7 +7301,8 @@ begin delete(s,1,1); val(s,adr,erreur); // adresse if adr=0 then exit; - c:=s[erreur]; // S ou D + c:=#0; + if erreur<>0 then c:=s[erreur]; // S ou D if (c<>'D') and (c<>'S') then begin LabelInfo.Caption:='Erreur manque D ou S : '+sO;exit;end; setlength(feux[ligneClicSig+1].AigDirection[ligne],j+1); // augmenter le tableau dynamique feux[ligneClicSig+1].AigDirection[ligne][j].PosAig:=c; @@ -7200,7 +7333,8 @@ begin delete(s,1,1); val(s,adr,erreur); // adresse if adr=0 then exit; - c:=s[erreur]; // S ou D + c:=#0; + if erreur<>0 then c:=s[erreur]; // S ou D if (c<>'D') and (c<>'S') then begin LabelInfo.Caption:='Erreur manque D ou S : '+sO;exit;end; setlength(feux[ligneClicSig+1].condCarre[ligne],j+1); feux[ligneClicSig+1].condCarre[ligne][j].PosAig:=c; @@ -7381,6 +7515,7 @@ begin s:=EditL.Text; if s='' then exit; val(s,i,erreur); + if erreur<>0 then if (s[erreur]<>'S') and (s[erreur]<>'D') then begin LabelInfo.caption:='Erreur Champ L manque D ou S';exit @@ -7402,6 +7537,16 @@ procedure TFormConfig.FormClose(Sender: TObject; var Action: TCloseAction); var index : integer; ok : boolean; begin + if modif_branches then + begin + if MessageDlg('Les branches ont été modifiées mais non validées. Voulez fermer la fenêtre ?',mtConfirmation,[mbYes,mbNo],0)=mrNo then + begin + action:=tCloseAction(caNone); + exit; + end; + end; + modif_branches:=false; + for index:=1 to NbreFeux do begin // créer les nouveau checkBox de feux blancs si de nouveaux ont été cochés @@ -7560,8 +7705,9 @@ end; procedure TFormConfig.RichBrancheKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); -var lc,curseur : integer; +var lc,curseur,i : integer; begin + modif_branches:=true; if ord(Key)=VK_UP then begin if clicListe then exit; @@ -7569,7 +7715,8 @@ begin if affevt then affiche('Evt RichBranche keydown',clyellow); with Formconfig.RichBranche do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée if lc>0 then begin dec(lc); @@ -7597,7 +7744,8 @@ begin if affevt then affiche('Evt RichBranche keydown',clyellow); with Formconfig.RichBranche do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée if lc0) then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 1 ferme';exit + end else LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].voie[1].DetZ1F:=det; + s:=encode_act_PN(lignecliqueePN+1); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V1FChange(Sender: TObject); +var s : string; + det,erreur : integer; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V1F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V1F.Text; + Val(s,det,erreur); + if (erreur<>0) then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 1 ferme';exit + end else LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].voie[1].DetZ2F:=det; + s:=encode_act_PN(lignecliqueePN+1); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet1V1OChange(Sender: TObject); +var s : string; + det,erreur : integer; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V1O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V1O.Text; + Val(s,det,erreur); + if (erreur<>0) then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 1 ouvre';exit + end else LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].voie[1].DetZ1O:=det; + s:=encode_act_PN(lignecliqueePN+1); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V1OChange(Sender: TObject); +var s : string; + det,erreur : integer; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V1O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V1O.Text; + Val(s,det,erreur); + if (erreur<>0) then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 1 ouvre';exit + end else LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].voie[1].DetZ2O:=det; + s:=encode_act_PN(lignecliqueePN+1); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet1V2FChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V2F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V2F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 2 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[2].detZ1F:=act; + V2valide:=(EditZdet1V2F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V2FChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V2F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V2F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 2 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[2].detZ2F:=act; + V2valide:=(EditZdet2V2F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet1V2OChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V2O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V2O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 2 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[2].detZ1O:=act; + V2valide:=(EditZdet1V2O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V2OChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V2F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V2O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 2 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[2].detZ2O:=act; + V2valide:=(EditZdet2V2O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; + +end; + +procedure TFormConfig.EditZdet1V3FChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V3F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V3F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 3 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[3].detZ1F:=act; + V2valide:=(EditZdet1V3F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V2Valide) then tablo_PN[i].NbVoies:=2; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V3FChange(Sender: TObject); + var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V3F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V3F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 3 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[3].detZ2F:=act; + V2valide:=(EditZdet2V3F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V2Valide) then tablo_PN[i].NbVoies:=2; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet1V3OChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V3O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V3O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 3 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[3].detZ1O:=act; + V2valide:=(EditZdet1V3O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V2Valide) then tablo_PN[i].NbVoies:=2; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; + +end; + +procedure TFormConfig.EditZdet2V3OChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V3O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V3O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 3 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[3].detZ2O:=act; + V2valide:=(EditZdet2V3O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V2Valide) then tablo_PN[i].NbVoies:=2; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; + +end; + +procedure TFormConfig.EditZdet1V4FChange(Sender: TObject); + var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V4F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V4F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 4 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[4].detZ1F:=act; + V2valide:=(EditZdet1V4F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V2Valide) then tablo_PN[i].NbVoies:=3; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet2V4FChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V4F Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V4F.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 4 ferme';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[4].detZ2F:=act; + V2valide:=(EditZdet2V4F.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V2Valide) then tablo_PN[i].NbVoies:=3; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +procedure TFormConfig.EditZdet1V4OChange(Sender: TObject); +var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet1V4O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet1V4O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 4 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[4].detZ1O:=act; + V2valide:=(EditZdet1V4O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V2Valide) then tablo_PN[i].NbVoies:=3; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; + +end; + +procedure TFormConfig.EditZdet2V4OChange(Sender: TObject); + var s : string; + act,erreur,NbVoies,i : integer; + V2valide : boolean; +begin + if clicliste then exit; + if affevt then affiche('Evt EditZdet2V4O Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=EditZdet2V4O.Text; + Val(s,act,erreur); + if (erreur<>0) and (s<>'') then + begin + LabelInfo.caption:='Erreur adresse détecteur voie 3 ouvre';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + tablo_PN[i].voie[4].detZ2O:=act; + V2valide:=(EditZdet2V4O.text<>''); + NbVoies:=tablo_PN[i].NbVoies; + if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V2Valide) then tablo_PN[i].NbVoies:=3; + s:=encode_act_PN(i); + RichPN.Lines[lignecliqueePN]:=s; + end; +end; + +begin end. diff --git a/UnitDebug.dcu b/UnitDebug.dcu index dae9934..111ed16 100644 Binary files a/UnitDebug.dcu and b/UnitDebug.dcu differ diff --git a/UnitDebug.dfm b/UnitDebug.dfm index 1d6edde..054f59a 100644 --- a/UnitDebug.dfm +++ b/UnitDebug.dfm @@ -1,8 +1,8 @@ object FormDebug: TFormDebug - Left = 346 - Top = 166 - Width = 712 - Height = 425 + Left = 324 + Top = 102 + Width = 732 + Height = 653 Caption = 'Fen'#234'tre de d'#233'bug' Color = clWindow TransparentColorValue = clTeal @@ -15,12 +15,12 @@ object FormDebug: TFormDebug Position = poMainFormCenter OnCreate = FormCreate DesignSize = ( - 687 - 394) + 699 + 615) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel - Left = 521 + Left = 558 Top = 4 Width = 108 Height = 13 @@ -36,7 +36,7 @@ object FormDebug: TFormDebug ParentFont = False end object Label2: TLabel - Left = 353 + Left = 390 Top = 2 Width = 131 Height = 18 @@ -50,7 +50,7 @@ object FormDebug: TFormDebug ParentFont = False end object EditNivDebug: TEdit - Left = 633 + Left = 670 Top = 2 Width = 49 Height = 21 @@ -66,9 +66,9 @@ object FormDebug: TFormDebug OnKeyPress = EditNivDebugKeyPress end object MemoEvtDet: TMemo - Left = 449 + Left = 456 Top = 336 - Width = 239 + Width = 229 Height = 201 Anchors = [akTop, akRight] Color = clBlack @@ -87,7 +87,7 @@ object FormDebug: TFormDebug OnChange = MemoEvtDetChange end object ButtonEcrLog: TButton - Left = 345 + Left = 350 Top = 328 Width = 97 Height = 29 @@ -97,7 +97,7 @@ object FormDebug: TFormDebug OnClick = ButtonEcrLogClick end object ButtonRazTampon: TButton - Left = 345 + Left = 350 Top = 360 Width = 97 Height = 33 @@ -108,7 +108,7 @@ object FormDebug: TFormDebug OnClick = ButtonRazTamponClick end object ButtonCherche: TButton - Left = 345 + Left = 350 Top = 296 Width = 97 Height = 25 @@ -118,7 +118,7 @@ object FormDebug: TFormDebug OnClick = ButtonChercheClick end object ButtonAffEvtChrono: TButton - Left = 345 + Left = 350 Top = 256 Width = 97 Height = 33 @@ -129,7 +129,7 @@ object FormDebug: TFormDebug OnClick = ButtonAffEvtChronoClick end object ButtonCop: TButton - Left = 345 + Left = 350 Top = 208 Width = 97 Height = 41 @@ -146,9 +146,9 @@ object FormDebug: TFormDebug OnClick = ButtonCopClick end object RichEdit: TRichEdit - Left = 449 + Left = 456 Top = 176 - Width = 239 + Width = 229 Height = 153 Anchors = [akTop, akRight] Font.Charset = DEFAULT_CHARSET @@ -165,7 +165,7 @@ object FormDebug: TFormDebug OnChange = RichEditChange end object ButtonRazLog: TButton - Left = 345 + Left = 350 Top = 400 Width = 97 Height = 33 @@ -176,7 +176,7 @@ object FormDebug: TFormDebug OnClick = ButtonRazLogClick end object GroupBox1: TGroupBox - Left = 343 + Left = 348 Top = 608 Width = 345 Height = 177 @@ -324,9 +324,9 @@ object FormDebug: TFormDebug end end object GroupBox2: TGroupBox - Left = 343 + Left = 356 Top = 20 - Width = 345 + Width = 333 Height = 149 Anchors = [akTop, akRight] Caption = 'S'#233'lections d'#39'affichage' @@ -496,10 +496,10 @@ object FormDebug: TFormDebug end end object RichDebug: TRichEdit - Left = 0 - Top = 0 + Left = 8 + Top = 8 Width = 329 - Height = 590 + Height = 582 Anchors = [akLeft, akTop, akRight, akBottom] Lines.Strings = ( 'RichDebug') @@ -510,7 +510,7 @@ object FormDebug: TFormDebug OnChange = RichDebugChange end object GroupBox5: TGroupBox - Left = 343 + Left = 348 Top = 544 Width = 345 Height = 57 @@ -577,7 +577,7 @@ object FormDebug: TFormDebug end end object ButtonRazTout: TButton - Left = 346 + Left = 351 Top = 176 Width = 97 Height = 25 diff --git a/UnitDebug.pas b/UnitDebug.pas index 8a30df8..4291829 100644 --- a/UnitDebug.pas +++ b/UnitDebug.pas @@ -215,6 +215,7 @@ var ligne,l,position : integer; s : string; trouve : boolean; begin + // faire avec with RichDebug do begin ligne:=0; diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index 2089733..b5e2a58 100644 Binary files a/UnitPrinc.dcu and b/UnitPrinc.dcu differ diff --git a/UnitPrinc.pas b/UnitPrinc.pas index fc632b8..944dea6 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -3,7 +3,7 @@ Unit UnitPrinc; programme signaux complexes Graphique Lenz delphi 7 + activeX Tmscomm + clientSocket ******************************************** - 15/6/2022 15h + 19/6/2022 21h note sur le pilotage des accessoires: raquette octet sortie + 2 = aiguillage droit = sortie 2 de l'adresse d'accessoire @@ -325,7 +325,7 @@ var ack,portCommOuvert,traceTrames,AffMem,CDM_connecte,dupliqueEvt, Raz_Acc_signaux,AvecInit,AvecTCO,terminal,Srvc_Aig,Srvc_Det,Srvc_Act,MasqueBandeauTCO, - Srvc_PosTrain,Srvc_Sig,debugtrames, + Srvc_PosTrain,Srvc_Sig,debugtrames,LayParParam, Hors_tension2,traceSign,TraceZone,Ferme,parSocketLenz,ackCdm,PremierFD,doubleclic, NackCDM,MsgSim,succes,recu_cv,AffAigDet,Option_demarrage,AffTiers,AvecDemandeAiguillages, TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM,AvecInitAiguillages : boolean; @@ -406,6 +406,7 @@ var NbVoies : integer; // Nombre de voies du PN Voie : array [1..10] of record ActFerme,ActOuvre : integer ; // actionneurs provoquant la fermeture et l'ouverture + detZ1F,detZ2F,detZ1O,detZ2O : integer; // Zones de détection PresTrain : boolean; // mémoire de présence de train sur la voie end; end; @@ -6018,8 +6019,10 @@ begin end; // mettre à jour le feu de det3 pour le passer au rouge de suite j:=signal_detecteur(det3); - Maj_Feu(j); + if j<>0 then Maj_Feu(j); + // Maj des autres feux (pour l'avertissement) Maj_feux; + // pour le jaune cli Maj_feux; exit; // sortir absolument end; @@ -6142,7 +6145,6 @@ begin AfficheDebug(intToSTR(event_det_train[N_Trains].det[1]),clyellow); AfficheDebug(intToSTR(event_det_train[N_Trains].det[2]),clyellow); end; - end else begin @@ -6207,15 +6209,15 @@ begin end; -// traitement des évènements actionneurs +// traitement des évènements actionneurs (detecteurs aussi) procedure Event_act(adr,adr2,etat : integer;trainDecl : string); -var i,v,va,etatAct,Af,Ao,Access,sortie : integer; +var i,v,va,etatAct,Af,Ao,Access,sortie,dZ1F,dZ2F,dZ1O,dZ2O : integer; s,st,trainDest : string; presTrain_PN,adresseOk : boolean; Ts : TAccessoire; begin // vérifier si l'actionneur en évènement a été déclaré pour réagir - if AffAigDet then AfficheDebug('Act/Det '+intToSTR(Adr)+'='+intToSTR(etat),clyellow); + if AffAigDet then AfficheDebug('Tick='+IntToSTR(tick)+' Evt Act '+intToSTR(Adr)+' '+intToSTR(Adr2)+'='+intToSTR(etat),clyellow); //Affiche(intToSTR(adr)+'/'+intToSTR(adr2)+' '+intToSTR(etat),clyellow); for i:=1 to maxTablo_act do begin @@ -6276,33 +6278,76 @@ begin // dans le tableau des PN for i:=1 to NbrePN do begin - for v:=1 to Tablo_PN[i].nbvoies do + if Tablo_PN[i].voie[1].actOuvre<>0 then begin - aO:=Tablo_PN[i].voie[v].actOuvre; - aF:=Tablo_PN[i].voie[v].actFerme; - - if (aO=adr) and (etat=0) then // actionneur d'ouverture + // PN par actionneur + for v:=1 to Tablo_PN[i].nbvoies do begin - Tablo_PN[i].voie[v].PresTrain:=false; - // vérifier les présences train sur les autres voies du PN - presTrain_PN:=false; - for va:=1 to Tablo_PN[i].nbvoies do - begin - presTrain_PN:=presTrain_PN or Tablo_PN[i].voie[va].PresTrain; - end; - if not(presTrain_PN) then - begin - Affiche('Ouverture PN'+intToSTR(i),clOrange); - pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,AigP); - end; - end; + + aF:=Tablo_PN[i].voie[v].actFerme; - if (aF=adr) and (etat=1) then // actionneur de fermeture + if (aO=adr) and (etat=0) then // actionneur d'ouverture + begin + Tablo_PN[i].voie[v].PresTrain:=false; + // vérifier les présences train sur les autres voies du PN + presTrain_PN:=false; + for va:=1 to Tablo_PN[i].nbvoies do + begin + presTrain_PN:=presTrain_PN or Tablo_PN[i].voie[va].PresTrain; + end; + if not(presTrain_PN) then + begin + Affiche('Ouverture PN'+intToSTR(i)+' par act '+intToSTr(adr)+' (train voie '+IntToSTR(v)+')',clOrange); + pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,AigP); + end; + end; + + if (aF=adr) and (etat=1) then // actionneur de fermeture + begin + Tablo_PN[i].voie[v].PresTrain:=true; + s:='Fermeture PN'+IntToSTR(i)+' par act '+intToSTr(adr)+' (train voie '+IntToSTR(v)+')'; + Affiche(s,clOrange); + pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,AigP); + end; + end + end + else + begin + // PN par zone de détection + //Affiche(intToSTR(adr)+'/'+intToSTR(adr2)+' '+intToSTR(etat),clyellow); + for v:=1 to Tablo_PN[i].nbvoies do begin - Tablo_PN[i].voie[v].PresTrain:=true; - Affiche('Fermeture PN'+IntToSTR(i)+' (train voie '+IntToSTR(v)+')',clOrange); - pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,AigP); - end; + dZ1F:=Tablo_PN[i].voie[v].detZ1F; + dZ2F:=Tablo_PN[i].voie[v].detZ2F; + dZ1O:=Tablo_PN[i].voie[v].detZ1O; + dZ2O:=Tablo_PN[i].voie[v].detZ2O; + if (dZ1O=adr) and (dZ2O=adr2) and (etat=0) then // zone d'ouverture + begin + Tablo_PN[i].voie[v].PresTrain:=false; + // vérifier les présences train sur les autres voies du PN + presTrain_PN:=false; + for va:=1 to Tablo_PN[i].nbvoies do + begin + presTrain_PN:=presTrain_PN or Tablo_PN[i].voie[va].PresTrain; + end; + if not(presTrain_PN) then + begin + s:='Ouverture PN'+intToSTR(i)+' par zone '+intToSTr(adr)+' '+intToSTR(adr2); + Affiche(s,clorange); + //if AffAigDet then AfficheDebug(s,clorange); + pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,AigP); + end; + end; + + if (dZ1F=adr) and (dZ2F=adr2) and (etat=1) then // zone de fermeture + begin + Tablo_PN[i].voie[v].PresTrain:=true; + s:='Fermeture PN'+IntToSTR(i)+' par zone '+intToSTr(adr)+' '+intToSTR(adr2)+' (train voie '+IntToSTR(v)+')'; + affiche(s,clorange); + //if AffAigDet then AfficheDebug(s,clorange); + pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,AigP); + end; + end; end; end; end; @@ -7270,12 +7315,14 @@ begin deconnecte_USB; connecte_CDM; exit; - end; + end; + if lay<>'' then s:='-f '+lay else s:=''; + cdm_lanceLoc:=false; // lancement depuis le répertoire 32 bits d'un OS64 if ShellExecute(Formprinc.Handle,'open',PChar('C:\Program Files (x86)\CDM-Rail\cdr.exe'), - Pchar('-f '+lay), // paramètre + Pchar(s), // paramètre PChar('C:\Program Files (x86)\CDM-Rail\') // répertoire ,SW_SHOWNORMAL)>32 then begin @@ -7288,7 +7335,7 @@ begin // si çà marche pas essayer depuis le répertoire de base sur un OS32 if ShellExecute(Formprinc.Handle, 'open',PChar('C:\Program Files\CDM-Rail\cdr.exe'), - Pchar('-f '+lay), // paramètre + Pchar(s), // paramètre PChar('C:\Program Files\CDM-Rail\') // répertoire ,SW_SHOWNORMAL)<=32 then begin @@ -7330,6 +7377,7 @@ begin KeybdInput(VK_RETURN,0); KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); + SendInput(Length(KeyInputs),KeyInputs[0],SizeOf(KeyInputs[0]));SetLength(KeyInputs,0); //fermer la fenetre Sleep(500); @@ -7564,6 +7612,7 @@ begin Affiche('Fin des initialisations',clyellow); LabelEtat.Caption:=' '; Affiche_memoire; + DoubleBuffered:=true; { aiguillage[index_aig(1)].position:=const_droit; @@ -8961,12 +9010,25 @@ begin s:=s+' Commande ouverture='+intToSTR(Tablo_PN[i].commandeOuvre); s:=s+' Nbre de voies='+intToSTR(Tablo_PN[i].nbVoies); Affiche(s,clyellow); - for v:=1 to Tablo_PN[i].nbvoies do + + if tablo_PN[i].Voie[1].ActFerme<>0 then + // par actionneur begin - s:=' Voie '+IntToSTR(v)+': Actionneur de fermeture='+intToSTR(Tablo_PN[i].voie[v].ActFerme); - s:=s+' Actionneur d''ouverture='+intToSTR(Tablo_PN[i].voie[v].ActOuvre); - Affiche(s,clyellow); - end; + for v:=1 to Tablo_PN[i].nbvoies do + begin + s:=' Voie '+IntToSTR(v)+': Actionneur de fermeture='+intToSTR(Tablo_PN[i].voie[v].ActFerme); + s:=s+' Actionneur d''ouverture='+intToSTR(Tablo_PN[i].voie[v].ActOuvre); + Affiche(s,clyellow); + end; + end + else + // par zone de détection + for v:=1 to Tablo_PN[i].nbvoies do + begin + s:=' Voie '+IntToSTR(v)+': Zones de fermeture='+intToSTR(tablo_PN[i].Voie[v].detZ1F)+'-'+intToSTR(tablo_PN[i].Voie[v].detZ2F); + s:=s+' Zones d''ouverture='+intToSTR(tablo_PN[i].Voie[v].detZ1O)+'-'+intToSTR(tablo_PN[i].Voie[v].detZ2O); + Affiche(s,clyellow); + end; end; end; @@ -9145,7 +9207,7 @@ end; // cliqué gauche dans la fenetre Fenrich procedure TFormPrinc.FenRichMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var lc : integer; +var lc,i : integer; s : string; begin if Tdoubleclic=0 then doubleclic:=false; @@ -9162,7 +9224,8 @@ begin TdoubleClic:=0; with FenRich do begin - lc:=Perform(EM_LINEFROMCHAR,-1,0); + i:=Selstart; + lc:=Perform(EM_LINEFROMCHAR,i,0); s:=lines[lc]; end; if pos('http',s)<>0 then diff --git a/UnitSR.dcu b/UnitSR.dcu index 7cca3b3..7604ab1 100644 Binary files a/UnitSR.dcu and b/UnitSR.dcu differ diff --git a/UnitTCO.dcu b/UnitTCO.dcu index 20a4c40..866a415 100644 Binary files a/UnitTCO.dcu and b/UnitTCO.dcu differ diff --git a/UnitTCO.pas b/UnitTCO.pas index 096dfcc..749768f 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -3590,7 +3590,7 @@ begin dessin_18(ImagePalette18.canvas,1,1,0); dessin_19(ImagePalette19.canvas,1,1,0); dessin_20(ImagePalette20.canvas,1,1,0); - dessin_21(ImagePalette21.canvas,1,1,0,); + dessin_21(ImagePalette21.canvas,1,1,0); dessin_22(ImagePalette22.canvas,1,1,0); dessin_23(ImagePalette23.canvas,1,1,0); diff --git a/verif_version.dcu b/verif_version.dcu index 4009fba..f61a5d8 100644 Binary files a/verif_version.dcu and b/verif_version.dcu differ diff --git a/verif_version.pas b/verif_version.pas index 3325237..8b6c17b 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -23,7 +23,7 @@ var Lance_verif : integer; verifVersion,notificationVersion : boolean; -Const Version='4.3'; // sert à la comparaison de la version publiée +Const Version='4.4'; // sert à la comparaison de la version publiée SousVersion=' '; // en cas d'absence de sous version mettre un espace implementation diff --git a/versions.txt b/versions.txt index 8b23632..79eb27b 100644 --- a/versions.txt +++ b/versions.txt @@ -111,6 +111,10 @@ version 4.2 : Am version 4.3 : Détection automatique du port COM de l'interface XpressNet par COMX. Suppression du transitoire d'affichage du vert sur les signaux qui passent à l'avertissement. Information sur la compatibilité windows 11 ajoutée à la documentation. +version 4.4 : Possibilité d'avoir un champ vide dans le LAY, ce qui ouvre CDM avec le dernier LAY pour les + problèmes d'ouverture avec W10 et W11. + Les passages à niveaux peut être commandés par des zones de détection. + Code source modifié pour être compilable avec Rad Studio 11.