diff --git a/Notice d'utilisation des signaux_complexes_GL_V3.0.pdf b/Notice d'utilisation des signaux_complexes_GL_V3.1.pdf similarity index 54% rename from Notice d'utilisation des signaux_complexes_GL_V3.0.pdf rename to Notice d'utilisation des signaux_complexes_GL_V3.1.pdf index 9d14842..da768b6 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V3.0.pdf and b/Notice d'utilisation des signaux_complexes_GL_V3.1.pdf differ diff --git a/README.adoc b/README.adoc index 50b29e9..038c1b5 100644 --- a/README.adoc +++ b/README.adoc @@ -10,5 +10,5 @@ Fichiers sources. :lien: http://cdmrail.free.fr/ForumCDR/viewtopic.php?f=77&t=3906#p50499 :cdm: http://cdmrail.free.fr/SiteCDR/index.html -* {lien} [Lien vers le fil] -- Forum de CDM rail -* {cdm} [Lin vers CDM rail] -- Site de CDM rail +* {lien}[Lien vers le fil] -- Forum de CDM rail +* {cdm}[Lien vers CDM rail] -- Site de CDM rail diff --git a/UnitConfig.dcu b/UnitConfig.dcu index 9cb58ce..a0a83a9 100644 Binary files a/UnitConfig.dcu and b/UnitConfig.dcu differ diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 5e847ba..00ef2e9 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1,6 +1,6 @@ object FormConfig: TFormConfig - Left = 285 - Top = 127 + Left = 277 + Top = 203 Hint = 'Modifie les fichiers de configuration selon les s'#233'lections chois' + 'ies' @@ -17,6 +17,7 @@ object FormConfig: TFormConfig OldCreateOrder = False Position = poScreenCenter OnActivate = FormActivate + OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 @@ -1528,13 +1529,6 @@ object FormConfig: TFormConfig Height = 13 Caption = 'Element suivant' end - object Label20: TLabel - Left = 24 - Top = 160 - Width = 50 - Height = 13 - Caption = 'LabelTrain' - end object Label10: TLabel Left = 80 Top = 120 @@ -1769,13 +1763,14 @@ object FormConfig: TFormConfig Height = 25 Caption = 'Fermer sans enregistrer la configuration' TabOrder = 1 + OnClick = Button2Click end object PageControl: TPageControl Left = 8 Top = 8 Width = 633 Height = 457 - ActivePage = TabSheetCDM + ActivePage = TabSheetAutonome Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -1783,7 +1778,6 @@ object FormConfig: TFormConfig Font.Style = [] ParentFont = False TabOrder = 2 - OnChange = PageControlChange object TabSheetCDM: TTabSheet Caption = 'CDM Rail' object GroupBox1: TGroupBox @@ -2104,6 +2098,13 @@ object FormConfig: TFormConfig Height = 13 Caption = 'Seuil du nombre de d'#233'tecteurs trop distants' end + object Label41: TLabel + Left = 8 + Top = 36 + Width = 188 + Height = 13 + Caption = 'Taille de la fonte de la fen'#234'tre principale' + end object EditNbDetDist: TEdit Left = 232 Top = 12 @@ -2112,6 +2113,14 @@ object FormConfig: TFormConfig TabOrder = 0 Text = 'EditNbDetDist' end + object EditFonte: TEdit + Left = 232 + Top = 32 + Width = 25 + Height = 21 + ReadOnly = True + TabOrder = 1 + end end end object TabSheetAutonome: TTabSheet @@ -2358,10 +2367,8 @@ object FormConfig: TFormConfig Left = 8 Top = 32 Width = 281 - Height = 33 - Caption = - 'Initialisation des aiguillages suivant liste dans fichier client' + - '-gl.cfg [section init]' + Height = 25 + Caption = 'Initialisation des aiguillages ' ParentShowHint = False ShowHint = False TabOrder = 1 @@ -2396,20 +2403,6 @@ object FormConfig: TFormConfig Height = 13 Caption = 'LabelTJD1' end - object Label35: TLabel - Left = 0 - Top = 56 - Width = 134 - Height = 13 - Caption = 'Configuration des aiguillages' - end - object Label36: TLabel - Left = 232 - Top = 56 - Width = 86 - Height = 13 - Caption = 'Liste d'#39'initialisation' - end object GroupBox11: TGroupBox Left = 328 Top = 32 @@ -2430,20 +2423,6 @@ object FormConfig: TFormConfig Font.Style = [fsBold] ParentFont = False end - object LabelLigne: TLabel - Left = 16 - Top = 42 - Width = 104 - Height = 16 - Alignment = taCenter - Caption = ' - ' - Font.Charset = ANSI_CHARSET - Font.Color = clBlack - Font.Height = -13 - Font.Name = 'Arial' - Font.Style = [] - ParentFont = False - end object GroupBox10: TGroupBox Left = 8 Top = 88 @@ -2484,7 +2463,10 @@ object FormConfig: TFormConfig Top = 269 Width = 137 Height = 17 + Hint = 'Cocher si l'#39'aiguillage est invers'#233' dans CDM rail' Caption = 'Inversion de l'#39#233'tat CDM' + ParentShowHint = False + ShowHint = True TabOrder = 1 OnClick = CheckInverseClick end @@ -2494,7 +2476,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 2 - OnChange = EditAdrAigChange + OnKeyPress = EditAdrAigKeyPress end object ComboBoxAig: TComboBox Left = 8 @@ -2520,7 +2502,7 @@ object FormConfig: TFormConfig TabOrder = 4 object LabelHG: TLabel Left = 10 - Top = 17 + Top = 21 Width = 9 Height = 16 Caption = 'D' @@ -2590,27 +2572,40 @@ object FormConfig: TFormConfig ParentFont = False end object LabelTJD1: TLabel - Left = 96 + Left = 80 Top = 76 Width = 52 Height = 13 Caption = 'LabelTJD1' end object LabelTJD2: TLabel - Left = 168 + Left = 176 Top = 76 Width = 52 Height = 13 Caption = 'LabelTJD1' end + object LabelL: TLabel + Left = 10 + Top = 69 + Width = 8 + Height = 16 + Caption = 'L' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + Visible = False + end object Edit_HG: TEdit Left = 24 Top = 20 Width = 41 Height = 21 TabOrder = 0 - Text = 'EditPointe' - OnChange = Edit_HGChange + OnKeyPress = Edit_HGKeyPress end object EditPointe_BG: TEdit Left = 24 @@ -2618,8 +2613,7 @@ object FormConfig: TFormConfig Width = 41 Height = 21 TabOrder = 1 - Text = 'EditPointe_BG' - OnChange = EditPointe_BGChange + OnKeyPress = EditPointe_BGKeyPress end object EditP1: TEdit Left = 88 @@ -2627,8 +2621,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 2 - Text = 'EditDDroit' - OnChange = EditP1Change + OnKeyPress = EditP1KeyPress end object EditP2: TEdit Left = 88 @@ -2636,8 +2629,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 3 - Text = 'EditDdevie' - OnChange = EditP2Change + OnKeyPress = EditP2KeyPress end object EditP3: TEdit Left = 160 @@ -2645,8 +2637,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 4 - Text = 'EditDDroit' - OnChange = EditP3Change + OnKeyPress = EditP3KeyPress end object EditP4: TEdit Left = 160 @@ -2654,8 +2645,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 5 - Text = 'EditDDroit' - OnChange = EditP4Change + OnKeyPress = EditP4KeyPress end object EditDevie_HD: TEdit Left = 232 @@ -2663,8 +2653,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 6 - Text = 'EditDevie_HD' - OnChange = EditDevie_HDChange + OnKeyPress = EditDevie_HDKeyPress end object EditDroit_BD: TEdit Left = 232 @@ -2672,8 +2661,7 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 7 - Text = 'EditDroit_BD' - OnChange = EditDroit_BDChange + OnKeyPress = EditDroit_BDKeyPress end object EditDevieS2: TEdit Left = 232 @@ -2681,8 +2669,16 @@ object FormConfig: TFormConfig Width = 33 Height = 21 TabOrder = 8 - Text = 'EditDevie_HD' - OnChange = EditDevieS2Change + OnKeyPress = EditDevieS2KeyPress + end + object EditL: TEdit + Left = 40 + Top = 68 + Width = 25 + Height = 21 + TabOrder = 9 + Visible = False + OnChange = EditLChange end end object ButtonRestaureAig: TButton @@ -2706,7 +2702,7 @@ object FormConfig: TFormConfig Height = 21 TabOrder = 6 Visible = False - OnChange = EditAigTripleChange + OnKeyPress = EditAigTripleKeyPress end object GroupBox21: TGroupBox Left = 8 @@ -2717,7 +2713,7 @@ object FormConfig: TFormConfig TabOrder = 7 object Label37: TLabel Left = 8 - Top = 26 + Top = 18 Width = 66 Height = 13 Caption = 'D'#233'vi'#233' ou droit' @@ -2729,44 +2725,46 @@ object FormConfig: TFormConfig Height = 13 Caption = 'Temporisation (1/10'#232'me s)' end - object LabelDevie: TLabel - Left = 200 - Top = 24 - Width = 3 - Height = 13 - end - object EditDevDroit: TEdit - Left = 152 - Top = 18 - Width = 41 - Height = 21 - TabOrder = 0 - OnChange = EditDevDroitChange - end object EditTempo10: TEdit - Left = 152 + Left = 160 Top = 40 Width = 41 Height = 21 - TabOrder = 1 - OnChange = EditTempo10Change + TabOrder = 0 + OnKeyPress = EditTempo10KeyPress end object CheckInvInit: TCheckBox Left = 8 Top = 64 Width = 153 Height = 17 + Hint = 'Inverse le pilotage de l'#39'aiguillage' Caption = 'Pilotage invers'#233 - TabOrder = 2 + ParentShowHint = False + ShowHint = True + TabOrder = 1 OnClick = CheckInvInitClick end + object ComboBoxDD: TComboBox + Left = 160 + Top = 16 + Width = 97 + Height = 21 + ItemHeight = 13 + TabOrder = 2 + OnChange = ComboBoxDDChange + Items.Strings = ( + 'D'#233'vi'#233 + 'Droit' + 'Non positionn'#233) + end end end object RichAig: TRichEdit Left = 0 - Top = 72 - Width = 233 - Height = 353 + Top = 56 + Width = 321 + Height = 369 Color = clBlack Font.Charset = DEFAULT_CHARSET Font.Color = clYellow @@ -2807,23 +2805,6 @@ object FormConfig: TFormConfig TabOrder = 4 OnClick = ButtonAjSupClick end - object RichInitAig: TRichEdit - Left = 232 - Top = 72 - Width = 89 - Height = 353 - Color = clBlack - Font.Charset = DEFAULT_CHARSET - Font.Color = clYellow - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 5 - WordWrap = False - end end object TabSheetBranches: TTabSheet Caption = 'Branches' @@ -2922,9 +2903,9 @@ object FormConfig: TFormConfig end object GroupBox12: TGroupBox Left = 336 - Top = 40 + Top = 32 Width = 281 - Height = 385 + Height = 393 Caption = 'Description du signal' TabOrder = 0 object ImageSignal: TImage @@ -2969,7 +2950,7 @@ object FormConfig: TFormConfig end object Label17: TLabel Left = 8 - Top = 248 + Top = 264 Width = 228 Height = 26 Caption = @@ -3046,11 +3027,11 @@ object FormConfig: TFormConfig end object MemoCarre: TMemo Left = 8 - Top = 280 + Top = 296 Width = 265 Height = 89 ScrollBars = ssBoth - TabOrder = 0 + TabOrder = 12 WordWrap = False OnChange = MemoCarreChange end @@ -3068,80 +3049,77 @@ object FormConfig: TFormConfig Top = 120 Width = 41 Height = 21 - TabOrder = 2 - Text = 'EditDet1' - OnChange = EditDet1Change + TabOrder = 3 + OnKeyPress = EditDet1KeyPress end object EditSuiv1: TEdit Left = 184 Top = 120 Width = 41 Height = 21 - TabOrder = 3 - Text = 'EditSuiv1' - OnChange = EditSuiv1Change + TabOrder = 4 + OnKeyPress = EditSuiv1KeyPress end object EditDet2: TEdit Left = 120 Top = 144 Width = 41 Height = 21 - TabOrder = 4 - Text = 'Edit1' - OnChange = EditDet2Change + TabOrder = 5 + OnKeyPress = EditDet2KeyPress end object EditSuiv2: TEdit Left = 184 Top = 144 Width = 41 Height = 21 - TabOrder = 5 - Text = 'Edit2' - OnChange = EditSuiv2Change + TabOrder = 6 + OnKeyPress = EditSuiv2KeyPress end object EditDet3: TEdit Left = 120 Top = 168 Width = 41 Height = 21 - TabOrder = 6 - Text = 'Edit1' - OnChange = EditDet3Change + TabOrder = 7 + OnKeyPress = EditDet3KeyPress end object EditSuiv3: TEdit Left = 184 Top = 168 Width = 41 Height = 21 - TabOrder = 7 - Text = 'Edit2' - OnChange = EditSuiv3Change + TabOrder = 8 + OnKeyPress = EditSuiv3KeyPress end object EditDet4: TEdit Left = 120 Top = 192 Width = 41 Height = 21 - TabOrder = 8 - Text = 'Edit1' - OnChange = EditDet4Change + TabOrder = 9 + OnKeyPress = EditDet4KeyPress end object EditSuiv4: TEdit Left = 184 Top = 192 Width = 41 Height = 21 - TabOrder = 9 - Text = 'Edit2' - OnChange = EditSuiv4Change + TabOrder = 10 + OnKeyPress = EditSuiv4KeyPress end object CheckVerrouCarre: TCheckBox Left = 120 Top = 224 Width = 145 Height = 17 + Hint = + 'Passe le feu au carr'#233' ci aucun train n'#39'est pr'#233'sent 3 cantons ava' + + 'nt le signal' Caption = 'Verrouillable au carr'#233 - TabOrder = 10 + ParentShowHint = False + ShowHint = True + TabOrder = 11 OnClick = CheckVerrouCarreClick end object EditAdrSig: TEdit @@ -3149,9 +3127,9 @@ object FormConfig: TFormConfig Top = 18 Width = 33 Height = 21 - TabOrder = 11 + TabOrder = 0 Text = ' ' - OnChange = EditAdrSigChange + OnKeyPress = EditAdrSigKeyPress end object ComboBoxAsp: TComboBox Left = 144 @@ -3159,7 +3137,7 @@ object FormConfig: TFormConfig Width = 129 Height = 21 ItemHeight = 13 - TabOrder = 12 + TabOrder = 2 OnChange = ComboBoxAspChange Items.Strings = ( '2 feux' @@ -3179,9 +3157,9 @@ object FormConfig: TFormConfig Top = 176 Width = 33 Height = 21 - TabOrder = 13 + TabOrder = 14 Visible = False - OnChange = EditSpecUniChange + OnKeyPress = EditSpecUniKeyPress end object Buttonrestaure: TButton Left = 8 @@ -3192,9 +3170,18 @@ object FormConfig: TFormConfig Caption = 'Restaurer' ParentShowHint = False ShowHint = True - TabOrder = 14 + TabOrder = 13 OnClick = ButtonrestaureClick end + object CheckBoxFB: TCheckBox + Left = 120 + Top = 240 + Width = 153 + Height = 17 + Caption = 'Avec demande feu blanc' + TabOrder = 15 + OnClick = CheckBoxFBClick + end end object RichSig: TRichEdit Left = 0 @@ -3237,7 +3224,7 @@ object FormConfig: TFormConfig object ButtonInsFeu: TButton Left = 144 Top = 32 - Width = 113 + Width = 145 Height = 17 Caption = 'Ajouter le feu supprim'#233 TabOrder = 4 @@ -3274,8 +3261,8 @@ object FormConfig: TFormConfig WordWrap = True end object GroupBoxPN: TGroupBox - Left = -32 - Top = 24 + Left = 16 + Top = 16 Width = 225 Height = 289 Caption = 'Actionneurs gestion passage '#224' niveau' @@ -3468,8 +3455,8 @@ object FormConfig: TFormConfig end end object GroupBoxAct: TGroupBox - Left = 16 - Top = 104 + Left = 48 + Top = 176 Width = 225 Height = 225 Caption = 'Actionneur fonction de locomotive ' diff --git a/UnitConfig.pas b/UnitConfig.pas index 7027ffe..97ab14b 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -88,7 +88,6 @@ type RadioButtonsans: TRadioButton; RadioButton30kmh: TRadioButton; RadioButton60kmh: TRadioButton; - LabelLigne: TLabel; ImageAig: TImage; ImageTJD: TImage; ImageTri: TImage; @@ -102,7 +101,6 @@ type Label19: TLabel; GroupBoxRadio: TGroupBox; RadioButtonLoc: TRadioButton; - Label20: TLabel; GroupBoxAct: TGroupBox; GroupBoxPN: TGroupBox; Label21: TLabel; @@ -220,42 +218,30 @@ type GroupBox21: TGroupBox; Label37: TLabel; Label38: TLabel; - EditDevDroit: TEdit; EditTempo10: TEdit; CheckInvInit: TCheckBox; - RichInitAig: TRichEdit; - Label35: TLabel; - Label36: TLabel; - LabelDevie: TLabel; Label39: TLabel; EditV4F: TEdit; EditV4O: TEdit; Label40: TLabel; + Label41: TLabel; + EditFonte: TEdit; + ComboBoxDD: TComboBox; + LabelL: TLabel; + EditL: TEdit; + CheckBoxFB: TCheckBox; procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); - procedure PageControlChange(Sender: TObject); procedure RichAigMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - procedure EditPointe_BGChange(Sender: TObject); - procedure EditDevie_HDChange(Sender: TObject); - procedure EditDroit_BDChange(Sender: TObject); - procedure EditDevieS2Change(Sender: TObject); procedure RadioButtonsansClick(Sender: TObject); procedure RadioButton30kmhClick(Sender: TObject); procedure RadioButton60kmhClick(Sender: TObject); procedure ComboBoxDecChange(Sender: TObject); procedure RichSigMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - procedure EditDet1Change(Sender: TObject); - procedure EditSuiv1Change(Sender: TObject); procedure CheckVerrouCarreClick(Sender: TObject); - procedure EditDet2Change(Sender: TObject); - procedure EditSuiv2Change(Sender: TObject); - procedure EditDet3Change(Sender: TObject); - procedure EditSuiv3Change(Sender: TObject); - procedure EditDet4Change(Sender: TObject); - procedure EditSuiv4Change(Sender: TObject); procedure EditActChange(Sender: TObject); procedure RichActMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); @@ -265,12 +251,8 @@ type procedure EditEtatFoncSortieChange(Sender: TObject); procedure EditTempoChange(Sender: TObject); procedure CheckRAZClick(Sender: TObject); - procedure Edit_HGChange(Sender: TObject); procedure CheckInverseClick(Sender: TObject); - procedure EditAdrSigChange(Sender: TObject); - procedure EditAdrAigChange(Sender: TObject); procedure ComboBoxAspChange(Sender: TObject); - procedure EditSpecUniChange(Sender: TObject); procedure ButtonrestaureClick(Sender: TObject); procedure RadioButtonLocClick(Sender: TObject); procedure RadioButtonAccessClick(Sender: TObject); @@ -294,11 +276,7 @@ type procedure ButtonSupFeuClick(Sender: TObject); procedure ButtonInsFeuClick(Sender: TObject); procedure ButtonNouvAigClick(Sender: TObject); - procedure EditP1Change(Sender: TObject); procedure BoutSupAigClick(Sender: TObject); - procedure EditP2Change(Sender: TObject); - procedure EditP3Change(Sender: TObject); - procedure EditP4Change(Sender: TObject); procedure ButtonAjSupClick(Sender: TObject); procedure ButtonRestaureAigClick(Sender: TObject); procedure ComboBoxAigChange(Sender: TObject); @@ -307,12 +285,36 @@ type Shift: TShiftState; X, Y: Integer); procedure ButtonVerifConfigClick(Sender: TObject); procedure MemoCarreChange(Sender: TObject); - procedure EditAigTripleChange(Sender: TObject); - procedure EditDevDroitChange(Sender: TObject); - procedure EditTempo10Change(Sender: TObject); procedure CheckInvInitClick(Sender: TObject); procedure EditV4FChange(Sender: TObject); procedure EditV4OChange(Sender: TObject); + procedure ComboBoxDDChange(Sender: TObject); + procedure EditLChange(Sender: TObject); + procedure CheckBoxFBClick(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure EditAdrAigKeyPress(Sender: TObject; var Key: Char); + procedure EditAdrSigKeyPress(Sender: TObject; var Key: Char); + procedure EditP3KeyPress(Sender: TObject; var Key: Char); + procedure EditP4KeyPress(Sender: TObject; var Key: Char); + procedure EditAigTripleKeyPress(Sender: TObject; var Key: Char); + procedure Edit_HGKeyPress(Sender: TObject; var Key: Char); + procedure EditPointe_BGKeyPress(Sender: TObject; var Key: Char); + procedure EditP1KeyPress(Sender: TObject; var Key: Char); + procedure EditP2KeyPress(Sender: TObject; var Key: Char); + procedure EditDevie_HDKeyPress(Sender: TObject; var Key: Char); + procedure EditDroit_BDKeyPress(Sender: TObject; var Key: Char); + procedure EditDevieS2KeyPress(Sender: TObject; var Key: Char); + procedure EditTempo10KeyPress(Sender: TObject; var Key: Char); + procedure EditDet1KeyPress(Sender: TObject; var Key: Char); + procedure EditSuiv1KeyPress(Sender: TObject; var Key: Char); + procedure EditDet2KeyPress(Sender: TObject; var Key: Char); + procedure EditSuiv2KeyPress(Sender: TObject; var Key: Char); + procedure EditDet3KeyPress(Sender: TObject; var Key: Char); + procedure EditSuiv3KeyPress(Sender: TObject; var Key: Char); + procedure EditDet4KeyPress(Sender: TObject; var Key: Char); + procedure EditSuiv4KeyPress(Sender: TObject; var Key: Char); + procedure EditSpecUniKeyPress(Sender: TObject; var Key: Char); private { Déclarations privées } public @@ -638,6 +640,12 @@ begin if aiguillage[index].vitesse=60 then s:=s+',V60'; if aiguillage[index].inversionCDM=1 then s:=s+',I1' else s:=s+',I0'; + // valeur d'initialisation + s:=s+',INIT('; + s:=s+IntToSTR(aiguillage[index].posInit)+','; + s:=s+IntToSTR(aiguillage[index].temps)+','; + s:=s+intToSTR(aiguillage[index].inversion)+')'; + encode_aig:=s; end; @@ -834,8 +842,6 @@ var s,chaine,sa : string; multiple,fini : boolean; begin s:=chaine_signal; - //Affiche(s,clYellow); - j:=pos(',',s); if j>1 then begin @@ -1070,7 +1076,6 @@ end; function encode_act_pn(i : integer) : string; var s : string; voie,NbVoies : integer; - begin with formconfig do begin @@ -1126,6 +1131,7 @@ begin copie_commentaire; // taille de la fonte writeln(fichierN,Fonte_ch+'=',TailleFonte); + FormPrinc.FenRich.Font.Size:=TailleFonte; copie_commentaire; // adresse ip et port de CDM @@ -1199,18 +1205,18 @@ begin // Serveur de rétrosignalisation Lenz de CDM writeln(fichierN,retro_ch+'=',intToSTR(ServeurRetroCDM)); - copie_commentaire; // [section init] est copié ici // valeurs des initialisations aiguillages - writeln(fichierN,section_init); + // n'est plus géré dans config-gl.cfg + {writeln(fichierN,section_init); for i:=1 to MaxAiguillage do begin s:=encode_init_aig(i); writeln(fichierN,s); end; writeln(fichierN,'0,0,0,0'); - + } closefile(fichierN); // config-gl.tmp closefile(fichier); // config-gl.cfg @@ -1265,7 +1271,7 @@ begin // supprime le graphisme des feux Feux[i].Img.free; Feux[i].Lbl.free; - if feux[i].feublanc then Feux[i].Check.free; + if feux[i].feublanc then begin Feux[i].Check.free;Feux[i].Check:=nil;end; // et le recréer cree_image(i); end; @@ -1320,6 +1326,11 @@ begin changeCDM:=(portCDM<>i) or ChangeCDM; portCDM:=i; + // taille fonte + val(EditFonte.text,i,erreur); + if (i<8) or (i>25) then i:=10; + TailleFonte:=i; + // contrôle adresse IP interface s:=EditIPLenz.text; if not(IpOk(s)) and (s<>'0') then begin labelInfo.Caption:='Adresse IP Lenz incorrecte';sauve_config:=false;exit;end; @@ -1435,7 +1446,7 @@ end; procedure TFormConfig.ButtonAppliquerEtFermerClick(Sender: TObject); begin - if sauve_config then formConfig.close; + if sauve_config then formConfig.close; // si la config est ok, on ferme la fenetre // TCO if avectco and not(entreeTCO) then begin @@ -1453,6 +1464,7 @@ begin if affevt then affiche('FormConfig activate',clLime); Aig_supprime.Adresse:=0; Feu_Supprime.Adresse:=0; + Feu_sauve.adresse:=0; clicListe:=false; Edit_HG.Visible:=false; @@ -1485,6 +1497,7 @@ begin EditportLenz.text:=IntToSTR(Port); EditTempoAig.Text:=IntToSTR(Tempo_Aig); EditComUSB.Text:=PortCom; + EditFonte.text:=IntToSTR(TailleFonte); EditTempoOctetUSB.text:=IntToSTR(TempoOctet); EditTempoReponse.Text:=IntToSTR(TimoutMaxInterface); RadioButton1.checked:=false; @@ -1532,33 +1545,33 @@ begin EditPointe_BG.Text:=''; EditDevie_HD.Text:=''; - ligneclicSig:=0; + ligneclicSig:=-1; AncLigneClicSig:=-1; - ligneclicAct:=0; + ligneclicAct:=-1; AncLigneClicAct:=-1; - ligneclicAig:=0; + ligneclicAig:=-1; AncLigneClicAig:=-1; - lignecliqueePN:=0; + lignecliqueePN:=-1; AncLigneCliqueePN:=-1; // remplit les 4 fenêtres de config des aiguillages branches signaux, actionneurs // aiguillages RichAig.Clear; - RichInitAig.Clear; for i:=1 to MaxAiguillage do begin s:=encode_aig(i); RichAig.Lines.Add(s); RE_ColorLine(RichAig,RichAig.lines.count-1,ClAqua); Aiguillage[i].modifie:=false; - // valeurs d'init - s:=encode_init_aig(i); - RichInitAig.Lines.Add(s); - RE_ColorLine(RichInitAig,RichInitAig.lines.count-1,ClAqua); end; + With RichAig do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; - // branches + // branches clicListe:=true; RichBranche.clear; for i:=1 to NbreBranches do @@ -1567,6 +1580,11 @@ begin RichBranche.Lines.Add(s); RE_ColorLine(RichBranche,RichBranche.lines.count-1,ClAqua); end; + With RichBranche do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; // signaux RichSig.clear; @@ -1574,8 +1592,7 @@ begin begin ComboBoxDec.items.add(decodeur[i-1]); end; - EditDet1.Text:='';EditDet2.Text:='';EditDet3.Text:='';EditDet4.Text:=''; - EditSuiv1.Text:='';EditSuiv2.Text:='';EditSuiv3.Text:='';EditSuiv4.Text:=''; + for i:=1 to NbreFeux do begin s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux @@ -1587,6 +1604,11 @@ begin Feux[i].modifie:=false; end; end; + With RichSig do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; // actionneurs Train ou accessoire RichAct.Clear; @@ -1599,6 +1621,11 @@ begin RE_ColorLine(RichAct,RichAct.lines.count-1,ClAqua); end; end; + With RichAct do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; // actionneurs PN RichPN.Clear; @@ -1611,6 +1638,11 @@ begin RE_ColorLine(RichPN,RichPN.lines.count-1,ClAqua); end; end; + With RichPN do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; //l'onglet affiché est sélectionné à l'appel de la fiche dans l'unité UnitPrinc clicListe:=false; @@ -1655,9 +1687,10 @@ end; // affiche le graphisme de l'aiguillage en fonction du tablo en index procedure Aff_champs_aig_tablo(index : integer); -var Adresse,Adr2,id2,erreur,position : integer; +var Adresse,Adr2,ind,id2,erreur,position : integer; tjd,tri,tjs : boolean; s,ss : string; + i : integer; B : char; begin s:=Uppercase(formConfig.RichAig.Lines[index-1]); @@ -1667,6 +1700,7 @@ begin Val(s,Adresse,erreur); // Récupérer l'adresse de l'aiguillage if adresse=0 then exit; + ind:=Index_aig(adresse); clicliste:=true; ss:=InttoSTr(Adresse); @@ -1677,15 +1711,27 @@ begin tjs:=pos('TJS',s)<>0 ; with formconfig do begin - LabelLigne.caption:=s; + EditAdrAig.Color:=clWindow; ImageAffiche.Picture.Bitmap.TransparentMode:=tmAuto; ImageAffiche.Picture.Bitmap.TransparentColor:=clblue; ImageAffiche.Transparent:=true; // tjd if tjd or tjs then begin - if tjd then ComboBoxAig.ItemIndex:=1; - if tjs then ComboBoxAig.ItemIndex:=2; + if tjd then + begin + ComboBoxAig.ItemIndex:=1; + EditL.Visible:=false; + LabelL.Visible:=false; + end; + if tjs then + begin + ComboBoxAig.ItemIndex:=2; + EditL.Visible:=true; + LabelL.Visible:=true; + LabelL.Caption:='L'+IntToSTR(aiguillage[ind].tjsint); + EditL.Text:=aiguillage[ind].tjsintB; + end; ImageAffiche.Picture.BitMap:=Imagetjd.Picture.Bitmap; labelBG.Caption:='S'; Edit_HG.Visible:=true; @@ -1747,6 +1793,8 @@ begin // aiguillage normal ou tri if not(tjd) and not(tjs) or tri then begin + EditL.Visible:=false; + LabelL.Visible:=false; ComboBoxAig.ItemIndex:=0; if not(tri) then begin @@ -1787,15 +1835,17 @@ begin Label18.Visible:=true; adr2:=aiguillage[index].AdrTriple; EditDevieS2.text:=intToSTR(aiguillage[index].Adevie2)+aiguillage[index].Adevie2B; - EditAigTriple.Text:=intToSTR(aiguillage[index].Adrtriple); + i:=aiguillage[index].Adrtriple; + EditAigTriple.Text:=intToSTR(i); + if i=0 then EditAigTriple.Color:=clred else EditAigTriple.Color:=clWindow; end; end; end; position:=aiguillage[index].posinit; - if position=const_inconnu then formconfig.EditDevDroit.text:='I'; - if position=const_droit then formconfig.EditDevDroit.text:='D'; - if position=const_devie then formconfig.EditDevDroit.text:='S'; + if position=const_inconnu then formconfig.ComboBoxDD.ItemIndex:=2; + if position=const_droit then formconfig.ComboBoxDD.ItemIndex:=1; + if position=const_devie then formconfig.ComboBoxDD.ItemIndex:=0; formconfig.EditTempo10.text:=InttoSTr(aiguillage[index].temps); formconfig.EditTempo10.text:=InttoSTr(aiguillage[index].temps); formconfig.CheckInvInit.Checked:=aiguillage[index].inversion=1; @@ -1900,13 +1950,15 @@ begin ComboBoxAsp.ItemIndex:=d-10+4; end; + if ((d=2) or (d>=5)) and (d<10) then checkBoxFB.Visible:=true else checkBoxFB.Visible:=false; // signal normal if d<10 then - begin + begin Label17.Caption:='Conditions supplémentaires d''affichage du carré par les aiguillages :'; Label17.Width:=228; LabelDetAss.visible:=true; LabelElSuiv.visible:=true; + EditDet1.Visible:=true;EditDet2.Visible:=true;EditDet3.Visible:=true;EditDet4.Visible:=true; EditSuiv1.Visible:=true;EditSuiv2.Visible:=true;EditSuiv3.Visible:=true;EditSuiv4.Visible:=true; Label24.Visible:=true; Label25.Visible:=true;Label26.Visible:=true;Label27.Visible:=true; @@ -1932,7 +1984,8 @@ begin else begin EditDet4.Text:='';EditSuiv4.Text:='';end; checkVerrouCarre.Checked:=feux[i].VerrouCarre; - + checkBoxFB.Checked:=feux[i].FeuBlanc; + // conditions supplémentaires du carré par aiguillages l:=1; repeat @@ -2094,10 +2147,51 @@ begin end end; - -procedure TFormConfig.PageControlChange(Sender: TObject); +procedure raz_champs_act; begin - + with formConfig do + begin + editAct.Text:=''; + EditEtatActionneur.Text:=''; + EditTrain.Text:=''; + EditFonctionAccess.Text:=''; + EditEtatFoncSortie.Text:=''; + EditTempo.Text:=''; + CheckRaz.Checked:=false; + end; +end; + +procedure raz_champs_aig; +begin + with formConfig do + begin + LabelInfo.caption:=''; + EditAdrAig.Text:='';EditAigTriple.Text:=''; + Edit_HG.text:=''; + editDevie_HD.Text:=''; + editDroit_BD.Text:=''; + editPointe_BG.Text:=''; + EditTempo10.text:=''; + end; +end; + +procedure raz_champs_sig; +begin + with formconfig do + begin + LabelInfo.caption:=''; + EditDet1.Text:='';EditSuiv1.Text:=''; + EditDet2.Text:='';EditSuiv2.Text:=''; + EditDet3.Text:='';EditSuiv3.Text:=''; + EditDet4.Text:='';EditSuiv4.Text:=''; + EditAdrSig.Text:=''; + MemoCarre.Clear; + ComboBoxAsp.ItemIndex:=-1; + ComboBoxDec.ItemIndex:=-1; + ImageSignal.Picture:=Nil; + checkVerrouCarre.Checked:=false; + checkBoxFB.Checked:=false; + end; end; // cliqué sur liste aiguillages @@ -2106,16 +2200,23 @@ var i,lc,adresse,erreur : integer; s : string; begin clicliste:=true; - LabelInfo.caption:=''; - + 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 //Affiche('numéro de la ligne cliquée '+intToStr(lc),clyellow); s:=Uppercase(Lines[lc]); // ligne cliquée - if s='' then exit; + if s='' then + begin + RE_ColorLine(Formconfig.RichAig,ligneclicAig,ClAqua); + ligneclicAig:=-1; + exit; + end; - Aig_supprime:=Aiguillage[lc+1]; // sauvegarde + Aig_sauve:=Aiguillage[lc+1]; // sauvegarde AncligneclicAig:=ligneclicAig; ligneclicAig:=lc; @@ -2123,7 +2224,6 @@ begin begin if aiguillage[ligneclicAig+1].modifie then RE_ColorLine(Formconfig.RichAig,AncligneclicAig,ClWhite) else RE_ColorLine(Formconfig.RichAig,AncligneclicAig,ClAqua); - RE_ColorLine(Formconfig.RichInitAig,AncligneclicAig,ClAqua); end; end; @@ -2132,19 +2232,18 @@ begin RE_ColorLine(Formconfig.RichAig,ligneclicAig,Clyellow); i:=index_aig(Adresse); - RE_ColorLine(Formconfig.RichInitAig,i-1,Clyellow); aff_champs_Aig_tablo(i); clicliste:=false; end; // on change la valeur de la description du champ HG pour les TJD -procedure change_HG ; +procedure TFormConfig.Edit_HGKeyPress(Sender: TObject; var Key: Char); var s : string; adr,adraig,erreur,index : integer; b : char; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change HG',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -2170,23 +2269,21 @@ begin // réencoder la ligne s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end else LabelInfo.caption:='Erreur pointe aiguillage '+intToSTR(AdrAig); end; - end; // on change la valeur de la description de la déviation de l'aiguillage -procedure change_Devie; +procedure TFormConfig.EditDevie_HDKeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,adr2,erreur,index,modele : integer; b : char; s : string; begin // cliqué sur le edit dévié aiguillage // ne pas traiter si on a cliqué sur la liste - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change dévié',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -2216,7 +2313,6 @@ begin // réencoder la ligne s:=encode_aig(Index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end else begin @@ -2241,14 +2337,14 @@ begin end; // on change la valeur de la description du droit de l'aiguillage -procedure change_Droit; +procedure TFormConfig.EditDroit_BDKeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,erreur,index,modele,adr2 : integer; b : char; s : string; begin // cliqué sur le edit droit aiguillage // ne pas traiter si on a cliqué sur la liste - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change droit',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -2276,7 +2372,6 @@ begin // réencoder la ligne s:=encode_aig(Index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end else begin @@ -2299,7 +2394,8 @@ begin end; end; -procedure TFormConfig.EditPointe_BGChange(Sender: TObject); +procedure TFormConfig.EditPointe_BGKeyPress(Sender: TObject; + var Key: Char); var AdrAig,adr,erreur,index : integer; b : char; normal,tjd,tjs,tri : boolean; @@ -2307,7 +2403,7 @@ var AdrAig,adr,erreur,index : integer; begin // cliqué sur le edit pointe aiguillage // ne pas traiter si on a cliqué sur la liste - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change pointe',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -2321,9 +2417,6 @@ begin decodeAig(s,adr,B); if ((B='S') or (B='P') or (B='D') or (B=#0) or (b='Z')) and (s<>'') then begin - // RichAig.SelStart:=Perform(EM_LINEINDEX,ligneclicAig,0); // début de la sélection - // RichAig.SelLength:=Length(s) ; // fin de la sélection - //SetFocus; RE_ColorLine(RichAig,ligneclicAig,ClWhite); Index:=Index_Aig(AdrAig); normal:=aiguillage[index].modele=1; @@ -2343,7 +2436,6 @@ begin // réencoder la ligne s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; if tjd or tjs then begin @@ -2351,7 +2443,6 @@ begin Aiguillage[index].ADevieB:=B; s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; end else @@ -2359,29 +2450,14 @@ begin end; end; -procedure TFormConfig.Edit_HGChange(Sender: TObject); -begin - change_HG; -end; - -procedure TFormConfig.EditDevie_HDChange(Sender: TObject); -begin - Change_devie; -end; - -procedure TFormConfig.EditDroit_BDChange(Sender: TObject); -begin - Change_droit; -end; - -procedure TFormConfig.EditDevieS2Change(Sender: TObject); +procedure TFormConfig.EditDevieS2KeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,erreur,index : integer; b : char; s : string; begin // cliqué sur le edit droit aiguillage // ne pas traiter si on a cliqué sur la liste - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change S2',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -2406,7 +2482,6 @@ begin // réencoder la ligne s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end else begin @@ -2429,7 +2504,6 @@ begin // réencoder la ligne s:=encode_aig(Index_Aig(AdrAig)); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; procedure TFormConfig.RadioButtonsansClick(Sender: TObject); @@ -2446,7 +2520,6 @@ begin aiguillage[index].modifie:=true; s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; procedure TFormConfig.RadioButton30kmhClick(Sender: TObject); @@ -2463,7 +2536,6 @@ begin aiguillage[index].modifie:=true; s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; procedure TFormConfig.RadioButton60kmhClick(Sender: TObject); @@ -2480,7 +2552,6 @@ begin aiguillage[Index].modifie:=true; s:=encode_aig(index); formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.Caption:=s; end; procedure TFormConfig.ComboBoxDecChange(Sender: TObject); @@ -2507,14 +2578,21 @@ var lc,AncAdresse,adresse,erreur : integer; s : string; begin clicliste:=true; - LabelInfo.caption:=''; + raz_champs_sig; + with Formconfig.RichSig do begin lc:=Perform(EM_LINEFROMCHAR,-1,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 exit; - Feu_supprime:=feux[lc+1]; // sauvegarde + if s='' then + begin + RE_ColorLine(Formconfig.RichSig,ligneclicSig,ClAqua); + ligneclicSig:=-1; + exit; + end; + + Feu_Sauve:=feux[lc+1]; // sauvegarde AncLigneClicSig:=ligneclicSig; ligneClicSig:=lc; @@ -2531,17 +2609,18 @@ begin Val(s,Adresse,erreur); // Adresse du signal if adresse=0 then exit; + EditAdrSig.Color:=clWindow; RE_ColorLine(Formconfig.RichSig,ligneClicSig,Clyellow); aff_champs_sig_feux(lc+1); clicliste:=false; end; -procedure TFormConfig.EditDet1Change(Sender: TObject); +procedure TFormConfig.EditDet1KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (ligneClicSig<0) then exit; + if clicliste or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; s:=RichSig.Lines[ligneClicSig]; if affevt then Affiche('Evt Détecteur 1',clOrange); @@ -2560,11 +2639,11 @@ begin end; end; -procedure TFormConfig.EditSuiv1Change(Sender: TObject); +procedure TFormConfig.EditSuiv1KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) then exit; + if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if affevt then Affiche('Evt suivant1',clOrange); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then with Formconfig do @@ -2592,11 +2671,11 @@ begin end; end; -procedure TFormConfig.EditDet2Change(Sender: TObject); +procedure TFormConfig.EditDet2KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (ligneClicSig<0) then exit; + if clicliste or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if affevt then Affiche('Evt detecteur 2',clOrange); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then @@ -2628,13 +2707,28 @@ begin RichSig.Lines[ligneClicSig]:=s; feux[ligneClicSig+1].modifie:=true; end; +end; + +procedure TFormConfig.CheckBoxFBClick(Sender: TObject); +var s : string; +begin + if clicliste or (ligneClicSig<0) then exit; + if affevt then Affiche('Evt FB',clOrange); + + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then + begin + feux[ligneClicSig+1].FeuBlanc:=checkBoxFB.Checked; + s:=encode_sig_feux(ligneClicSig+1); + RichSig.Lines[ligneClicSig]:=s; + feux[ligneClicSig+1].modifie:=true; + end; end; -procedure TFormConfig.EditSuiv2Change(Sender: TObject); +procedure TFormConfig.EditSuiv2KeyPress(Sender: TObject; var Key: Char); var s : string; erreur,i: integer; begin - if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) then exit; + if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if affevt then Affiche('Evt Element suivant2',clOrange); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then @@ -2663,11 +2757,11 @@ begin end; -procedure TFormConfig.EditDet3Change(Sender: TObject); +procedure TFormConfig.EditDet3KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (ligneClicSig<0) then exit; + if clicliste or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if affevt then Affiche('Evt Detecteur 3',clOrange); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then with Formconfig do @@ -2684,11 +2778,11 @@ begin end; end; -procedure TFormConfig.EditSuiv3Change(Sender: TObject); +procedure TFormConfig.EditSuiv3KeyPress(Sender: TObject; var Key: Char); var s : string; erreur,i : integer; begin - if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) then exit; + if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then with Formconfig do @@ -2715,11 +2809,11 @@ begin end; end; -procedure TFormConfig.EditDet4Change(Sender: TObject); +procedure TFormConfig.EditDet4KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (ligneClicSig<0) then exit; + if clicliste or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then with Formconfig do @@ -2736,11 +2830,11 @@ begin end; end; -procedure TFormConfig.EditSuiv4Change(Sender: TObject); +procedure TFormConfig.EditSuiv4KeyPress(Sender: TObject; var Key: Char); var s : string; erreur,i : integer; begin - if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) then exit; + if clicliste or (comboBoxAsp.Itemindex>=6) or (ligneClicSig<0) or (ord(Key)<>VK_RETURN) then exit; if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then with Formconfig do @@ -2798,7 +2892,7 @@ var ligne : 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 @@ -2809,6 +2903,12 @@ begin ligneClicAct:=ligne; RE_ColorLine(Formconfig.RichAct,ligneClicAct,ClYellow); Aff_champs_Act(ligneClicAct); + end + else + begin + RE_ColorLine(Formconfig.RichAct,ligneclicAct,ClAqua); + ligneclicAct:=-1; + exit; end; end; clicliste:=false; @@ -2912,7 +3012,6 @@ begin RichAct.Lines[ligneClicAct]:=s; end; end; - end; procedure TFormConfig.EditTempoChange(Sender: TObject); @@ -2957,11 +3056,11 @@ begin end; end; -procedure TFormConfig.EditAdrSigChange(Sender: TObject); +procedure TFormConfig.EditAdrSigKeyPress(Sender: TObject; var Key: Char); var s : string; i, erreur : integer; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then Affiche('Evt adresse signal',clOrange); // attention interférence avec clic droit propriétés sur un signal qui génère un evt sur ce contrôle if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then @@ -2969,7 +3068,18 @@ begin begin s:=EditAdrSig.Text; Val(s,i,erreur); - if erreur<>0 then begin LabelInfo.caption:='Erreur adresse signal ';exit;end; + if (erreur<>0) or (i<=0) or (i>MaxAcc) then + begin + EditAdrSig.Color:=clred; + LabelInfo.caption:='Erreur adresse signal ';exit; + end; + if (index_feu(i)<>0) then + begin + EditAdrSig.Color:=clred; + LabelInfo.caption:='Signal '+intToSTR(i)+' existe, il ne sera pas écrasé';exit; + end; + + EditAdrSig.Color:=clWindow; LabelInfo.caption:=' '; feux[ligneClicSig+1].adresse:=i; s:=encode_sig_feux(ligneClicSig+1); @@ -2978,40 +3088,45 @@ begin end; end; -procedure TFormConfig.EditAdrAigChange(Sender: TObject); +procedure TFormConfig.EditAdrAigKeyPress(Sender: TObject; var Key: Char); var s : string; i,vide,erreur,index,adr2,modele : integer; c : char; begin - if clicliste then exit; - + if clicliste or (ord(Key)<>VK_RETURN) then exit; if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then with Formconfig do begin s:=EditAdrAig.Text; Val(s,i,erreur); + if (erreur<>0) or (i<=0) or (i>MaxAcc) then + begin + EditAdrAig.Color:=clred; + LabelInfo.caption:='Erreur adresse Aiguillage ';exit; + end; + index:=ligneclicAig+1; if index=0 then exit; modele:=aiguillage[index].modele; + // si normal ou triple if (modele=1) or (modele=4) then begin if (erreur<>0) or (i>MaxAcc) then begin LabelInfo.caption:='Erreur adresse aiguillage ';exit;end; // vérifier si l'adresse de l'aiguillage existe déja if (aiguillage[Index_Aig(i)].modele<>0) then begin + EditAdrAig.Color:=clred; LabelInfo.caption:='aiguillage '+IntToSTR(i)+' existe déja - ne sera pas écrasé' ; exit; - end - else LabelInfo.caption:=''; - + end; + EditAdrAig.Color:=clWindow; LabelInfo.caption:=' '; s:=encode_aig_gfx; aiguillage[index].adresse:=i; aiguillage[index].modifie:=true; formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.caption:=s; end; if (modele=2) or (modele=3) then begin @@ -3029,7 +3144,6 @@ begin aiguillage[index].modifie:=true; s:=encode_aig(index); formconfig.RichAig.Lines[index-1]:=s; - labelLigne.caption:=s; // modif homologue adr2:=aiguillage[index].Ddroit; @@ -3040,9 +3154,6 @@ begin formconfig.RichAig.Lines[index-1]:=s; end; end; - s:=encode_init_aig(index); - formconfig.RichInitAig.Lines[index-1]:=s; - end; procedure TFormConfig.ComboBoxAspChange(Sender: TObject); @@ -3065,6 +3176,12 @@ begin index:=ligneClicSig+1; // index du feu if NbreFeux0) or (ligneClicSig>=0) then + if (Feu_sauve.adresse<>0) and (ligneClicSig>=0) then begin clicListe:=true; index:=ligneClicSig+1; - feux[index]:=Feu_supprime; + feux[index]:=Feu_sauve; RichSig.Lines[ligneClicSig]:=encode_sig_feux(index); aff_champs_sig_feux(index); // réaffiche les champs Maj_Hint_feu(index); @@ -3199,7 +3316,13 @@ begin ligneCliqueePN:=ligne; RE_ColorLine(RichPN,LigneCliqueePN,ClYellow); Aff_champs_PN(lignecliqueePN); - end; + end + else + begin + RE_ColorLine(Formconfig.RichPN,lignecliqueePN,ClAqua); + lignecliqueePN:=-1; + exit; + end; end; clicliste:=false; end; @@ -3622,7 +3745,8 @@ begin ligneClicSig:=i-1; AncligneClicSig:=ligneClicSig; Aff_champs_Sig_feux(i); - clicliste:=false; + clicliste:=false; + Feu_sauve.Adresse:=0; config_modifie:=true; end; @@ -3641,14 +3765,37 @@ begin clicliste:=true; Feu_supprime:=feux[index]; // sauvegarde le feu supprimé + Feu_sauve.adresse:=0; // dévalider sa définition // supprime le feu du tableau dec(NbreFeux); + ButtonInsFeu.Caption:='Ajouter le feu '+intToSTR(feux[index].adresse)+' supprimé'; + + feux[index].Img.free; // supprime l'image, ce qui efface le feu du tableau graphique + Feux[index].Lbl.Free; // supprime le label, ... + if Feux[index].check<>nil then begin Feux[index].check.Free;Feux[index].Check:=nil;end; // supprime le check du feu blanc s'il existait + // décale le tableau de feux et recalcule les positions des images for i:=index to NbreFeux do begin feux[i]:=feux[i+1]; + with feux[i].Img do + begin + Top:=(HtImg+espY+20)*((i-1) div NbreImagePLigne); // détermine les points d'origine + Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); + end; + with feux[i].Lbl do + begin + Top:=HtImg+((HtImg+EspY+20)*((i-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); + end; + if Feux[i].check<>nil then + with Feux[i].Check do + begin + Hint:=intToSTR(i); + Top:=HtImg+15+((HtImg+EspY+20)*((i-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((i-1) mod (NbreImagePLigne)); + end; end; - feux[NbreFeux+1].Img.Free; - + EditAdrSig.Text:=''; EditDet1.Text:='';EditDet2.Text:='';EditDet3.Text:='';EditDet4.Text:=''; EditSuiv1.Text:='';EditSuiv2.Text:='';EditSuiv3.Text:='';EditSuiv4.Text:=''; @@ -3667,8 +3814,9 @@ begin RE_ColorLine(RichSig,RichSig.lines.count-1,ClAqua); end; end; - ligneClicSig:=-1; + ligneClicSig:=-1; AncligneClicSig:=-1; + raz_champs_sig; clicliste:=false; end; @@ -3689,8 +3837,8 @@ begin begin with RichSig do begin + ButtonInsFeu.Caption:='Ajouter le feu supprimé'; Lines.Add(s); - Affiche(s,clyellow); RE_ColorLine(RichSig,RichSig.lines.count-1,ClYellow); ligneClicSig:=NbreFeux-1; AncligneClicSig:=-1; @@ -3747,19 +3895,19 @@ begin // et les tjd pour voir si pb de cohérence for aig:=1 to maxaiguillage do begin - // tjd - if aiguillage[aig].modele=2 then + // tjd ou tjs + if (aiguillage[aig].modele=2) or (aiguillage[aig].modele=3) then begin if aiguillage[aig].Ddroit<>aiguillage[aig].Ddevie then begin - Affiche('Erreur 7: la TJD '+IntToStr(aig)+' a des adresses de destination différentes ('+intToSTR(aiguillage[aig].Ddroit)+' et '+intToSTR(aiguillage[aig].Ddevie)+')',clred); + Affiche('Erreur 7: la TJD/S '+IntToStr(aig)+' a des adresses de destination différentes ('+intToSTR(aiguillage[aig].Ddroit)+' et '+intToSTR(aiguillage[aig].Ddevie)+')',clred); ok:=false; end; // vérifier si son homologue est une tjd adr2:=aiguillage[aig].Ddroit; - if aiguillage[Index_Aig(adr2)].modele<>2 then + if (aiguillage[Index_Aig(adr2)].modele<>2) and (aiguillage[Index_Aig(adr2)].modele<>3) then begin - Affiche('Erreur 8: l''aiguillage '+intToStr(Adr2)+' n''est pas une TJD, mais apparait dans la TJD '+IntToSTR(aiguillage[aig].Adresse),clred); + Affiche('Erreur 8: l''aiguillage '+intToStr(Adr2)+' n''est pas une TJD/S ou n''existe pas, mais apparait dans la TJD/S '+IntToSTR(aiguillage[aig].Adresse),clred); ok:=false; end; end; @@ -3775,9 +3923,8 @@ begin end; adr:=aiguillage[aig].Adroit; if (aiguillage[aig].AdroitB='Z') then - begin - trouve_detecteur(adr); // branche_trouve IndexBranche_trouve - if (IndexBranche_trouve=0) then + begin + if trouve_detecteur(adr)=0 then begin Affiche('Erreur 2: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[aig].adresse)+' mais absent dans la description des branches',clred); ok:=false; @@ -3786,8 +3933,7 @@ begin adr:=aiguillage[aig].Adevie; if (aiguillage[aig].AdevieB='Z') then begin - trouve_detecteur(adr); // branche_trouve IndexBranche_trouve - if (IndexBranche_trouve=0) then + if trouve_detecteur(adr)=0 then begin Affiche('Erreur 3: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[aig].adresse)+' mais absent dans la description des branches',clRed); ok:=false; @@ -3796,8 +3942,7 @@ begin adr:=aiguillage[aig].Apointe; if ((aiguillage[aig].ApointeB='Z') and (aiguillage[aig].modele=1)) then begin - trouve_detecteur(adr); // branche_trouve IndexBranche_trouve - if (IndexBranche_trouve=0) then + if trouve_detecteur(adr)=0 then begin Affiche('Erreur 4 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[aig].adresse)+' mais absent dans la description des branches',clRed); ok:=false; @@ -3808,8 +3953,7 @@ begin if (aiguillage[aig].Adevie2B='Z') then begin adr:=aiguillage[aig].Adevie2; - trouve_detecteur(adr); // branche_trouve IndexBranche_trouve - if (IndexBranche_trouve=0) then + if trouve_detecteur(adr)=0 then begin Affiche('Erreur 5 : détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[aig].adresse)+' mais absent dans la description des branches',clRed); ok:=false; @@ -3818,15 +3962,23 @@ begin end; end; - // cohérence 3 : vérifie si doublon aiguillage + // cohérence 3 : vérifie si aiguillage triple ok et si doublon aiguillage for aig:=1 to maxaiguillage do begin adr:=aiguillage[aig].Adresse; + if aiguillage[aig].modele=4 then + begin + if aiguillage[aig].AdrTriple=0 then + begin + Affiche('Erreur 6.1 : 2ème adresse de l''aiguillage triple '+intToSTR(adr)+' non définie',clred); + ok:=false; + end; + end; for i:=aig+1 to maxaiguillage do begin if adr=aiguillage[i].Adresse then begin - affiche('Erreur 6 : aiguillage '+intToSTR(adr)+' défini deux fois',clred); + affiche('Erreur 6.2 : aiguillage '+intToSTR(adr)+' défini deux fois',clred); ok:=false; end; end; @@ -3846,7 +3998,7 @@ begin end; end; - // cohérence 5 ; vérifie si les aiguillages définis en condition supplémentaires de carré existent + // cohérence 5 ; vérifie si aiguillages définis en condition supplémentaires de carré existent for j:=1 to NbreFeux do begin l:=1; @@ -4003,10 +4155,7 @@ begin end; end; end; - end; - - verif_coherence:=ok; end; @@ -4024,6 +4173,8 @@ begin aiguillage[i].DdroitB:='D'; aiguillage[i].DdevieB:='S'; // préparation pour TJD/S aiguillage[i].ApointeB:='Z'; aiguillage[i].Adevie2B:='Z'; + aiguillage[i].tjsintB:='D'; + aiguillage[i].posInit:=const_inconnu; aiguillage[i].Temps:=5; @@ -4038,44 +4189,32 @@ begin Perform(EM_SCROLLCARET,0,0); end; - s:=encode_init_aig(i); - with richInitAig do - begin - Lines.add(s); - SetFocus; - Selstart:=RichInitAig.GetTextLen-1; - Perform(EM_SCROLLCARET,0,0); - end; - LabelInfo.caption:='Aiguillage '+intToSTR(aiguillage[i].Adresse)+' créé'; ligneClicAig:=i-1; AncligneClicAig:=ligneClicAig; Aff_champs_aig_tablo(i); clicliste:=false; config_modifie:=true; + Aig_sauve.Adresse:=0; end; - procedure TFormConfig.BoutSupAigClick(Sender: TObject); var i,index,index2 : integer; s : string; begin i:=ligneClicAig; - if (i=-1) then exit; + if (i<0) then exit; index:=i+1; // passe en index tableau s:='Voulez-vous supprimer l''aiguillage '+IntToSTR(aiguillage[index].adresse)+'?'; if Application.MessageBox(pchar(s),pchar('confirm'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION)=idNo then exit; Affiche('Suppression de l''aiguillage='+IntToSTR(index)+' adresse='+IntToSTR(aiguillage[index].adresse),clOrange); - + ButtonAjSup.Caption:='Ajouter l''aig '+intToSTR(aiguillage[index].adresse)+' supprimé'; clicliste:=true; - Aig_supprime:=Aiguillage[index]; // sauvegarde le supprimé + raz_champs_aig; + Aig_supprime:=aiguillage[index]; // sauvegarde le supprimé + Aig_sauve.adresse:=0; // dévalider sa définition - // si le supprimé est une TJD/S supprimer sa définition dans son homologue - index2:=index_aig(aiguillage[index].Ddroit); // adresse de l'homologue - aiguillage[index2].Ddevie:=0; - aiguillage[index2].Ddroit:=0; - // efface les attributs de l'aiguillage supprimé aiguillage[index].Adresse:=0; aiguillage[index].Modele:=0; @@ -4094,9 +4233,7 @@ begin end; config_modifie:=true; - RichAig.Clear; - RichInitAig.Clear; // réafficher le richsig for i:=1 to MaxAiguillage do @@ -4106,9 +4243,6 @@ begin begin RichAig.Lines.Add(s); RE_ColorLine(RichAig,RichAig.lines.count-1,ClAqua); - s:=encode_Init_Aig(i); - RichInitAig.Lines.Add(s); - RE_ColorLine(RichInitAig,RichInitAig.lines.count-1,ClAqua); end; end; ligneClicAig:=-1; @@ -4116,12 +4250,12 @@ begin clicliste:=false; end; -procedure TFormConfig.EditP1Change(Sender: TObject); +procedure TFormConfig.EditP1KeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,adr2,erreur,index,id2 : integer; b,c : char; s : string; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change P1',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -4172,7 +4306,6 @@ begin clicListe:=false; s:=encode_aig(index); formconfig.RichAig.Lines[ligneClicAig]:=s; - labelLigne.Caption:=s; s:=encode_aig(index); formconfig.RichAig.Lines[ligneClicAig]:=s; // changer l'homologue @@ -4188,12 +4321,12 @@ begin end; end; -procedure TFormConfig.EditP2Change(Sender: TObject); +procedure TFormConfig.EditP2KeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,adr2,erreur,index,id2 : integer; b,c : char; s : string; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change P2',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -4245,7 +4378,6 @@ begin clicListe:=false; s:=encode_aig(index); formconfig.RichAig.Lines[ligneClicAig]:=s; - labelLigne.Caption:=s; // changer l'homologue adr2:=aiguillage[index].Ddroit; index:=index_aig(Adr2); @@ -4259,19 +4391,18 @@ begin end; end; -procedure TFormConfig.EditP3Change(Sender: TObject); +procedure TFormConfig.EditP3KeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,adr2,erreur,index,modele : integer; b,c : char; s : string; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change P3',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then with Formconfig do begin s:=formconfig.RichAig.Lines[ligneClicAig]; - Val(s,adrAig,erreur); + Val(s,adrAig,erreur); // adrAig est l'adresse de l'aiguillage modifié //vérifier la syntaxe s:=EditP3.text; @@ -4283,13 +4414,21 @@ begin clicListe:=false; end; - decodeAig(s,adr,B); + decodeAig(s,adr,B); // adr est le contenu du champ P3 if (B='S') and (adr<>0) then begin LabelInfo.caption:=''; RE_ColorLine(RichAig,ligneClicAig,ClWhite); Index:=Index_Aig(AdrAig); - + modele:=aiguillage[Index].modele; + + if modele=3 then // TJS + begin + LabelL.caption:=IntToSTR(adr); + aiguillage[index].tjsint:=adr; + end; + + Aiguillage[index].modifie:=true; LabelInfo.caption:=''; // modifier la base de données de l'aiguillage @@ -4311,18 +4450,19 @@ begin s:=encode_aig(index); formconfig.RichAig.Lines[ligneClicAig]:=s; - labelLigne.Caption:=s; // changer l'homologue index:=index_aig(Adr); - if index=0 then + if index=0 then // si elle n'existe pas la créer begin // créer homologue - labelInfo.Caption:='Création de la TJD homologue '+IntToSTR(adr); + if modele=2 then labelInfo.Caption:='Création de la TJD homologue '+IntToSTR(adr); + if modele=3 then labelInfo.Caption:='Création de la TJS homologue '+IntToSTR(adr); + inc(MaxAiguillage); index:=MaxAiguillage; aiguillage[index].Adresse:=Adr; - aiguillage[Index].modele:=2; + aiguillage[Index].modele:=modele; aiguillage[Index].Adroit:=0; aiguillage[Index].AdroitB:='D'; aiguillage[Index].Adevie:=0; @@ -4331,6 +4471,9 @@ begin aiguillage[Index].DdroitB:='D'; aiguillage[Index].Ddevie:=adrAig; aiguillage[Index].DdevieB:='S'; + aiguillage[Index].APointeB:='Z'; + aiguillage[Index].tjsINTB:='S'; + s:=encode_aig(index); formconfig.RichAig.Lines[index-1]:=s; // scroller à la fin @@ -4339,11 +4482,13 @@ begin SetFocus; Selstart:=RichAig.GetTextLen-1; Perform(EM_SCROLLCARET,0,0); - end; - end + RE_ColorLine(RichAig,index-1,ClAqua); + HideCaret(richAig.Handle); // éteint curseur + end; + end // fin de la création else begin - // existe, vérifier si c'est bien une TJD + // existe, vérifier si c'est bien une TJD/S modele:=aiguillage[Index].modele; if (modele=2) or (modele=3) then begin @@ -4361,12 +4506,12 @@ begin end; -procedure TFormConfig.EditP4Change(Sender: TObject); +procedure TFormConfig.EditP4KeyPress(Sender: TObject; var Key: Char); var AdrAig,adr,adr2,erreur,index : integer; b,c : char; s : string; begin - if clicliste then exit; + if clicliste or (ord(Key)<>VK_RETURN) then exit; if affevt then affiche('Evt change P4',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then @@ -4413,7 +4558,6 @@ begin s:=encode_aig(index); formconfig.RichAig.Lines[ligneClicAig]:=s; - labelLigne.Caption:=s; // changer l'homologue index:=index_aig(Adr2); @@ -4429,7 +4573,7 @@ end; procedure TFormConfig.ButtonAjSupClick(Sender: TObject); var s : string; begin - if Aig_supprime.adresse<>0 then + if Aig_supprime.adresse<>0 then begin inc(MaxAiguillage); aiguillage[MaxAiguillage]:=Aig_supprime; @@ -4443,24 +4587,15 @@ begin if s<>'' then with RichAig do begin + ButtonAjSup.Caption:='Ajouter l''aig supprimé'; + ligneClicAig:=MaxAiguillage-1; + AncligneClicAig:=-1; RichAig.Lines.Add(s); RE_ColorLine(RichAig,RichAig.lines.count-1,clYellow); SetFocus; Selstart:=RichAig.GetTextLen-1; Perform(EM_SCROLLCARET,0,0); end; - s:=encode_Init_Aig(MaxAiguillage); // ligne de l'initialisation - if s<>'' then - with RichInitAig do - begin - Lines.Add(s); - RE_ColorLine(RichInitAig,RichInitAig.lines.count-1,ClYellow); - SetFocus; - Selstart:=RichInitAig.GetTextLen-1; - Perform(EM_SCROLLCARET,0,0); - ligneClicAig:=MaxAiguillage-1; - AncligneClicAig:=-1; - end; Aff_champs_aig_tablo(MaxAiguillage); end; clicListe:=false; @@ -4469,11 +4604,11 @@ end; procedure TFormConfig.ButtonRestaureAigClick(Sender: TObject); var index : integer; begin - if (Aig_supprime.adresse<>0) or (ligneclicAig>=0) then + if (Aig_sauve.adresse<>0) and (ligneclicAig>=0) then begin clicListe:=true; index:=ligneclicAig+1; - Aiguillage[index]:=Aig_supprime; + Aiguillage[index]:=Aig_sauve; RichAig.Lines[ligneclicAig]:=encode_Aig(index); aff_champs_Aig_tablo(index); // réaffiche les champs clicListe:=false; @@ -4549,7 +4684,6 @@ begin result:=0; end; - // trouve l'enregistrement suivant après l'offset dans une branche // en sortie : trouve_enregistrement= nouvel offset, enregistrement // si 0 en sortie: fin de ligne @@ -4562,7 +4696,6 @@ begin else ss:=copy(branche[Num_Branche],offset,length(branche[Num_Branche])-offset+1); // si j=0 c'est la fin de la chaîne enregistrement:=ss; if j=0 then result:=0 else result:=j+1; - end; // compile une branche de réseau sous forme de texte, et la stocke dans le tableau des branches @@ -4640,8 +4773,7 @@ end; procedure TFormConfig.RichBrancheMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -var curseur,lc : integer; - +var curseur,lc : integer; begin if clicListe then exit; clicListe:=true; @@ -4775,7 +4907,7 @@ begin LabelInfo.Caption:=''; end; -procedure TFormConfig.EditAigTripleChange(Sender: TObject); +procedure TFormConfig.EditAigTripleKeyPress(Sender: TObject; var Key: Char); var s : string; i,modele,erreur,index : integer; begin @@ -4797,77 +4929,64 @@ begin if (aiguillage[Index_Aig(i)].modele<>0) then begin LabelInfo.caption:='aiguillage '+IntToSTR(i)+' existe déja - ne sera pas écrasé' ; + EditAigTriple.Color:=clred; exit; end ; + if i=0 then EditAigTriple.Color:=clred else EditAigTriple.Color:=clWindow; LabelInfo.caption:=''; s:=encode_aig_gfx; aiguillage[index].AdrTriple:=i; - aiguillage[index].modifie:=true; + aiguillage[index].modifie:=true; formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.caption:=s; end; end; end; -procedure TFormConfig.EditDevDroitChange(Sender: TObject); -var s : string; - i : integer; +procedure TFormConfig.ComboBoxDDChange(Sender: TObject); +var s: string; + i,pos: integer; begin if clicliste or (ligneclicAig<0) then exit; - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then with Formconfig do begin - s:=EditDevDroit.Text; - i:=0; - if s<>'' then - begin - case s[1] of - 'D' : begin i:=const_droit;labelDevie.Caption:='Droit';end; - 'S' : begin i:=const_devie;labelDevie.Caption:='Dévié';end; - 'I' : begin i:=const_inconnu;labelDevie.Caption:='Non définie';end; - else begin i:=0;labelDevie.Caption:='Erreur';end; - end; - end; - if i=0 then - begin - LabelInfo.caption:='Erreur position d''initialisation : D, S ou I'; - exit; - end; - - LabelInfo.caption:=''; s:=encode_aig_gfx; - aiguillage[ligneclicAig+1].PosInit:=i; + i:=ComboBoxDD.ItemIndex; + case i of + 0 : pos:=const_devie; + 1 : pos:=const_droit; + 2 : pos:=const_inconnu; + end; + + aiguillage[ligneclicAig+1].PosInit:=pos; aiguillage[ligneclicAig+1].modifie:=true; formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.caption:=s; - - s:=encode_init_aig(ligneclicAig+1); - RichInitAig.lines[ligneclicAig]:=s; - end; + s:=encode_aig(ligneclicAig+1); + RichAig.lines[ligneclicAig]:=s; + end; end; -procedure TFormConfig.EditTempo10Change(Sender: TObject); +procedure TFormConfig.EditTempo10KeyPress(Sender: TObject; var Key: Char); var s : string; i,erreur : integer; begin - if clicliste or (ligneclicAig<0) then exit; + if clicliste or (ord(Key)<>VK_RETURN) or (ligneclicAig<0) then exit; if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then with Formconfig do begin s:=EditTempo10.Text; Val(s,i,erreur); - - LabelInfo.caption:=''; - s:=encode_aig_gfx; - aiguillage[ligneclicAig+1].temps:=i; - aiguillage[ligneclicAig+1].modifie:=true; - formconfig.RichAig.Lines[ligneclicAig]:=s; - labelLigne.caption:=s; - - s:=encode_init_aig(ligneclicAig+1); - RichInitAig.lines[ligneclicAig]:=s; + if (i>0) and (i<50) then + begin + LabelInfo.caption:=''; + s:=encode_aig_gfx; + aiguillage[ligneclicAig+1].temps:=i; + aiguillage[ligneclicAig+1].modifie:=true; + formconfig.RichAig.Lines[ligneclicAig]:=s; + s:=encode_aig(ligneclicAig+1); + RichAig.lines[ligneclicAig]:=s; + end ; end; end; @@ -4882,8 +5001,8 @@ begin Val(s,adrAig,erreur); if checkInvInit.Checked then aiguillage[Index_Aig(adraig)].Inversion:=1 else aiguillage[Index_Aig(adraig)].Inversion:=0; // réencoder la ligne - s:=encode_init_aig(Index_Aig(AdrAig)); - formconfig.RichInitAig.Lines[ligneclicAig]:=s; + s:=encode_aig(Index_Aig(AdrAig)); + formconfig.RichAig.Lines[ligneclicAig]:=s; end; procedure TFormConfig.EditV4FChange(Sender: TObject); @@ -4918,7 +5037,7 @@ var s : string; i,act,erreur,NbVoies : integer; V4valide : boolean; begin - if clicliste then exit; + if clicliste or (lignecliqueePN<0) then exit; if affevt then affiche('Evt EditV4O Change',clyellow); if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then with Formconfig do @@ -4940,7 +5059,67 @@ begin end; end; +procedure TFormConfig.EditLChange(Sender: TObject); +var s : string; begin + if clicliste or (ligneclicAig<0) then exit; + if affevt then affiche('Evt EditL Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAig then + begin + s:=EditL.Text; + if s='' then exit; + if (s[1]<>'S') and (s[1]<>'D') then + begin + LabelInfo.caption:='Erreur Champ L : D ou S';exit; + end; + aiguillage[ligneclicAig+1].tjsintb:=s[1]; + s:=encode_aig(ligneclicAig+1); + RichAig.Lines[ligneclicAig]:=s; + end; +end; + +procedure TFormConfig.Button2Click(Sender: TObject); +begin + close; +end; + +procedure TFormConfig.FormClose(Sender: TObject; var Action: TCloseAction); +var index : integer; +begin + for index:=1 to NbreFeux do + begin + // créer les nouveau checkBox de feux blancs si de nouveaux ont été cochés + if feux[index].FeuBlanc and (feux[index].check=nil) then + begin + feux[index].Check:=TCheckBox.create(Formprinc.ScrollBox1); // crée le handle + with Feux[index].Check do + begin + onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus + Hint:=intToSTR(index); + caption:='dem FB'; + Parent:=Formprinc.ScrollBox1; + width:=100;height:=15; + Top:=HtImg+15+((HtImg+EspY+20)*((index-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((index-1) mod (NbreImagePLigne)); + BringToFront; + end; + end; + // supprimer les checkBox de feux blancs si ils ont été décochés + if not(feux[index].FeuBlanc) and (feux[index].check<>nil) then + begin + Feux[index].Check.free; + Feux[index].Check:=nil; + end; + end; +end; + +begin + + +begin + +end; + end. diff --git a/UnitDebug.dcu b/UnitDebug.dcu index 68029ed..61c3559 100644 Binary files a/UnitDebug.dcu and b/UnitDebug.dcu differ diff --git a/UnitDebug.dfm b/UnitDebug.dfm index ab0f715..ff4370c 100644 --- a/UnitDebug.dfm +++ b/UnitDebug.dfm @@ -1,6 +1,6 @@ object FormDebug: TFormDebug - Left = 192 - Top = 290 + Left = 203 + Top = 155 Width = 855 Height = 817 Caption = 'Fen'#234'tre de d'#233'bug' @@ -434,6 +434,19 @@ object FormDebug: TFormDebug TabOrder = 6 OnClick = CheckBoxAffDebDecSigClick end + object EditDebugSignal: TEdit + Left = 168 + Top = 12 + Width = 33 + Height = 18 + Hint = + 'Adresse du signal seul '#224' surveiller ou si 0 surveille tous les s' + + 'ignaux' + ParentShowHint = False + ShowHint = True + TabOrder = 7 + OnChange = EditDebugSignalChange + end end object RichDebug: TRichEdit Left = 8 diff --git a/UnitDebug.pas b/UnitDebug.pas index bd92caf..c4848c2 100644 --- a/UnitDebug.pas +++ b/UnitDebug.pas @@ -50,6 +50,7 @@ type ButtonSimuDet1: TButton; EditSimuDet: TEdit; ButtonRazTout: TButton; + EditDebugSignal: TEdit; procedure FormCreate(Sender: TObject); procedure ButtonEcrLogClick(Sender: TObject); procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char); @@ -78,6 +79,7 @@ type procedure ButtonRazToutClick(Sender: TObject); procedure RichEditChange(Sender: TObject); procedure MemoEvtDetChange(Sender: TObject); + procedure EditDebugSignalChange(Sender: TObject); private { Déclarations privées } public @@ -91,7 +93,7 @@ Max_Trains=50; var FormDebug: TFormDebug; - NivDebug : integer; + NivDebug,signalDebug : integer; AffSignal,AffAffect,initform,AffFD,debug_dec_sig : boolean; N_event_det : integer; // index du dernier évènement (de 1 à 20) event_det : array[1..Max_event_det] of integer; @@ -114,8 +116,6 @@ var end; - - procedure AfficheDebug(s : string;lacouleur : TColor); Procedure Raz_tout; procedure RE_ColorLine(ARichEdit: TRichEdit; ARow: Integer; AColor: TColor); @@ -139,8 +139,11 @@ end; procedure AfficheDebug(s : string;lacouleur : TColor); begin - FormDebug.RichDebug.Lines.add(s); - RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur); + with FormDebug.RichDebug do + begin + Lines.add(s); + RE_ColorLine(FormDebug.RichDebug,FormDebug.RichDebug.lines.count-1,lacouleur); + end; end; Procedure Raz_tout; @@ -361,7 +364,7 @@ begin if s2[1]='A' then begin type2:=2;delete(s2,1,1);end else type2:=1; Val(s1,prec,erreur); if erreur<>0 then exit; Val(s2,Actuel,erreur); if erreur<>0 then exit; - Adr:=detecteur_suivant_El(prec,type1,actuel,type2); + Adr:=detecteur_suivant_El(prec,type1,actuel,type2,1); if Adr<9996 then AfficheDebug('Le détecteur suivant aux éléments '+IntToSTR(prec)+'/'+IntToSTR(actuel)+' est '+IntToSTR(Adr),clyellow) else AfficheDebug('Pas trouvé de détecteur suvant aux éléments '+IntToSTR(prec)+'/'+IntToSTR(actuel),clyellow); NivDebug:=AncDebug; @@ -449,4 +452,10 @@ begin SendMessage(MemoEvtDet.handle, WM_VSCROLL, SB_BOTTOM, 0); end; +procedure TFormDebug.EditDebugSignalChange(Sender: TObject); +var erreur : integer; +begin + val(EditDebugSignal.text,signalDebug,erreur); +end; + end. diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index ae820f9..81c237f 100644 Binary files a/UnitPrinc.dcu and b/UnitPrinc.dcu differ diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index d13659c..b1e0cba 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -1,6 +1,6 @@ object FormPrinc: TFormPrinc - Left = 55 - Top = 177 + Left = 39 + Top = 183 Width = 1212 Height = 664 Caption = 'Client TCP-IP CDM Rail ou USB - syst'#232'me LENZ' diff --git a/UnitPrinc.pas b/UnitPrinc.pas index f667db9..bfbe65b 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -177,6 +177,7 @@ type const titre='Signaux complexes GL '; +const espY = 15;//40; // espacement Y entre deux lignes de feux tempoFeu=100; MaxAcc=2048; // et aussi adresse maxi d'accessoire LargImg=50;HtImg=91; // Dimensions image des feux @@ -208,7 +209,7 @@ type TBranche = record Adresse : integer; modele : integer; // 0=n'existe pas 1=aiguillage 2=TJD 3=TJS 4=aiguillage triple position, // position actuelle : 1=dévié 2=droit (centrale LENZ) - posInit, // position d'initialisation + posInit, // position d'initialisation 1=dévié 2=droit 9=non positionné Adrtriple, // 2eme adresse pour un aiguillage triple temps, // temps de pilotage (durée de l'impulsion en x 100 ms) inversion : integer; // positionné dans fichier config_gl section_init @@ -245,7 +246,7 @@ TFeu = record adresse, aspect : integer; // adresse du feu, aspect (2 feux..9 feux 12=direction 2 feux .. 16=direction 6 feux) Img : TImage; // Pointeur sur structure TImage du feu Lbl : TLabel; // pointeur sur structure Tlabel du feu - check : TCheckBox; // pointeur sur structure Checkbox avec feu blanc + check : TCheckBox; // pointeur sur structure Checkbox "demande feu blanc" FeuBlanc : boolean ; // avec checkbox ou pas decodeur : integer; // type du décodeur Adr_det1 : integer; // adresse du détecteur1 sur lequel il est implanté @@ -349,8 +350,8 @@ var aiguillage : array[0..MaxAcc] of Taiguillage; // signaux - L'index du tableau n'est pas son adresse feux : array[1..MaxAcc] of Tfeu; - Feu_supprime : Tfeu; - Aig_supprime : TAiguillage; + Feu_supprime,Feu_sauve : Tfeu; + Aig_supprime,Aig_sauve : TAiguillage; Fimage : Timage; BrancheN : array[1..100,1..200] of TBranche; // @@ -383,7 +384,7 @@ procedure Pilote_acc0_X(adresse : integer;octet : byte); procedure pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire); function etat_signal_suivant(Adresse,rang : integer) : integer; function suivant_alg3(prec : integer;typeELprec : integer;var actuel : integer;typeElActuel : integer;alg : integer) : integer; -function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; +function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2,alg : integer) : integer ; function test_memoire_zones(adresse : integer) : boolean; function PresTrainPrec(AdrFeu : integer) : boolean; function cond_carre(adresse : integer) : boolean; @@ -1097,9 +1098,6 @@ begin begin FenRich.lines.add(s); RE_ColorLine(FenRich,FenRich.lines.count-1,lacouleur); - //FenRich.SetFocus; - //FenRich.SelStart := FenRich.GetTextLen; - //FenRich.Perform(EM_SCROLLCARET, 0, 0); end; end; @@ -1257,9 +1255,9 @@ end; // créée une image dynamiquement pour un nouveau feu déclaré dans le fichier de config procedure cree_image(rang : integer); -var TypeFeu : integer; +var TypeFeu,adresse : integer; s : string; -const espY = 15;//40; // espacement Y entre deux lignes de feux + begin TypeFeu:=feux[rang].aspect; if typeFeu<=0 then exit; @@ -1267,7 +1265,7 @@ begin with Feux[rang].Img do begin Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1 - Name:='ImageFeu'+IntToSTR(rang); // nom de l'image - sert à identifier le composant si on fait clic droit. + //Name:='ImageFeu'+IntToSTR(rang); // nom de l'image - sert à identifier le composant si on fait clic droit. Top:=(HtImg+espY+20)*((rang-1) div NbreImagePLigne); // détermine les points d'origine Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); width:=57; @@ -1289,10 +1287,11 @@ begin picture.Bitmap:=Select_dessin_feu(TypeFeu); // mettre rouge par défaut - if TypeFeu=2 then EtatSignalCplx[feux[rang].adresse]:=violet_F; - if TypeFeu=3 then EtatSignalCplx[feux[rang].adresse]:=semaphore_F; - if (TypeFeu>3) and (TypeFeu<10) then EtatSignalCplx[feux[rang].adresse]:=carre_F; - if TypeFeu>10 then EtatSignalCplx[feux[rang].adresse]:=0; + adresse:=Feux[rang].adresse; + if TypeFeu=2 then EtatSignalCplx[adresse]:=violet_F; + if TypeFeu=3 then EtatSignalCplx[adresse]:=semaphore_F; + if (TypeFeu>3) and (TypeFeu<10) then EtatSignalCplx[adresse]:=carre_F; + if TypeFeu>10 then EtatSignalCplx[adresse]:=0; dessine_feu_mx(Feux[rang].Img.Canvas,0,0,1,1,feux[rang].adresse,1); //if feux[rang].aspect=5 then cercle(Picture.Bitmap.Canvas,13,22,6,ClYellow); @@ -1314,8 +1313,8 @@ begin if feux[rang].FeuBlanc then begin Feux[rang].check:=TCheckBox.create(Formprinc.ScrollBox1); // ranger l'adresse de la Checkbox dans la structure du feu - Feux[rang].check.onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus - Feux[rang].check.Hint:=intToSTR(rang); // affecter l'index du feu dans le HINT pour pouvoir le retrouver plus tard + //Feux[rang].check.onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus non utilisé + Feux[rang].check.Hint:=intToSTR(adresse); // affecter l'adresse du feu dans le HINT pour pouvoir le retrouver plus tard with Feux[rang].Check do begin @@ -1326,7 +1325,8 @@ begin Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); BringToFront; end; - end; + end + else Feux[rang].check:=nil; end; // calcule le checksum d'une trame @@ -2597,7 +2597,7 @@ begin if (UniSem<>2) and (UniSem<>3) and (UniSem<>4) and (UniSem<>51) and (UniSem<>52) and (UniSem<>71) and (UniSem<>72) and (UniSem<>73) and ((UniSem<90) or (UniSem>99)) then begin verif_UniSemaf:=1;exit;end; - aspect:=feux[adresse].aspect; + aspect:=feux[index_feu(adresse)].aspect; if ((aspect=2) and (UniSem=2)) or ((aspect=3) and (UniSem=3)) or ((aspect=4) and (UniSem=4)) or @@ -2615,10 +2615,10 @@ var s,sa,chaine,SOrigine: string; trouve_sec_init,trouve_init_aig,trouve_lay,trouve_IPV4_INTERFACE,trouve_PROTOCOLE_SERIE,trouve_INTER_CAR, trouve_Tempo_maxi,trouve_Entete,trouve_tco,trouve_cdm,trouve_Serveur_interface,trouve_fenetre, trouve_NOTIF_VERSION,trouve_verif_version,trouve_fonte,trouve_tempo_aig,trouve_raz,trouve_section_aig, - pds,trouve_section_branche,trouve_section_sig,trouve_section_act : boolean; + pds,trouve_section_branche,trouve_section_sig,trouve_section_act,compile_init_cfg : boolean; bd,virgule,i_detect,i,erreur,aig,aig2,detect,offset,index, adresse,j,position,temporisation,invers,indexPointe,indexDevie,indexDroit, ComptEl,Compt_IT,Num_Element,k,modele,adr,adr2,erreur2,l,t,Nligne,postriple,itl, - postjd,postjs,nv,it,Num_Champ,asp : integer; + postjd,postjs,nv,it,Num_Champ,asp,inversion : integer; label ici1,ici2,ici3,ici4 ; function lit_ligne : string ; @@ -2674,6 +2674,7 @@ var s,sa,chaine,SOrigine: string; end; begin + compile_init_cfg:=true; debugConfig:=false; trouve_NbDetDist:=false; trouve_ipv4_PC:=false; @@ -2975,6 +2976,28 @@ begin virgule:=pos(',',enregistrement);if virgule=0 then virgule:=length(enregistrement)+1; delete(enregistrement,1,virgule); end; + + // Init aiguillage + i:=pos('INIT(',enregistrement); + if i=1 then + begin + compile_init_cfg:=false; // ne pas compiler la section init du fichier config-gl.cfg + inc(num_champ); + delete(enregistrement,i,i+4); + Val(enregistrement,position,erreur); + i:=pos(',',enregistrement); + if i<>0 then delete(enregistrement,1,i); + Val(enregistrement,j,erreur); + i:=pos(',',enregistrement); + if i<>0 then delete(enregistrement,1,i); + Val(enregistrement,inversion,erreur); + aiguillage[maxaiguillage].temps:=j; + aiguillage[maxaiguillage].inversion:=inversion; + aiguillage[maxaiguillage].posinit:=position; + i:=pos(')',enregistrement); + delete(enregistrement,1,i); + end; + inc(itl); until (enregistrement='') or (itl>3); if itl>4 then begin Affiche('Erreur 400 ligne '+sOrigine,clred);closefile(fichier);exit;end; @@ -3039,7 +3062,6 @@ begin end; until (s='0'); NbreFeux:=i-1; if NbreFeux<0 then NbreFeux:=0; - //Affiche('Nombre de feux='+IntToSTR(NbreFeux),clYellow); configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (Nbrefeux=0); if configNulle then Affiche('Fonctionnement en config nulle',ClYellow); @@ -3259,11 +3281,9 @@ begin inc(nv); trouve_fonte:=true; delete(s,i,length(sa)); - TailleFonte:=StrToINT(s); - with FormPrinc.FenRich do - begin - Font.Size:=TailleFonte; - end; + val(s,TailleFonte,erreur); + if (TailleFonte<8) or (tailleFonte>25) then taillefonte:=10; + FormPrinc.FenRich.Font.Size:=TailleFonte; end; // adresse ip et port de CDM @@ -3277,8 +3297,9 @@ begin i:=pos(':',s); if i<>0 then begin - adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i);portCDM:=StrToINT(s); - if portCDM=0 then affiche('Erreur port nul : '+s,clred); + adresseIPCDM:=copy(s,1,i-1);Delete(s,1,i); + val(s,portCDM,erreur); + if (portCDM=0) or (portCDM>65535) or (erreur<>0) then affiche('Erreur port CDM : '+s,clred); end else affiche('Erreur adresse ip cdm rail '+s,clred); end; @@ -3390,11 +3411,18 @@ begin end; i:=pos(uppercase(section_init),s); - if i<>0 then + if (i<>0) then begin - inc(nv); - trouve_sec_init:=true; - compile_section_init; + if compile_init_cfg then + begin + trouve_sec_init:=true; + compile_section_init; + inc(nv); + Affiche('compilation de la section [init aig]',cllime); + end; + Affiche('Attention la section [init_aig] n''est plus gérée, elle est déplacée dans la configuration des aiguillages',clWhite); + Affiche('Veuillez regénérer les fichiers de configuration: ',clWhite); + Affiche('Menu Divers/configuration bouton "Enregistrement de la configuration et fermer"',clWhite); end; sa:=uppercase(verif_version_ch)+'='; @@ -3491,30 +3519,27 @@ begin end; inc(it); - until (Nv>=19) or (it>30); + until ((Nv>=19) and compile_init_cfg) or ((Nv>=18) and not(compile_init_cfg)) or (it>30); - //affiche(IntToSTR(Nv)+' variables',cyan); - s:=''; - if (nv<19) then s:='ERREUR: manque variables dans config-gl.cfg :'; - - if not(trouve_NbDetDist) then s:=s+' '+nb_det_dist_ch; - if not(trouve_ipv4_PC) then s:=s+' '+IpV4_PC_ch; - if not(trouve_retro) then s:=s+' '+retro_ch; - if not(trouve_sec_init) then s:=s+' '+section_init; - if not(trouve_init_aig) then s:=s+' '+INIT_AIG_ch; - if not(trouve_lay) then s:=s+' '+LAY_ch; - if not(trouve_INTER_CAR) then s:=s+' '+INTER_CAR_ch; - if not(trouve_Tempo_maxi) then s:=s+' '+Tempo_maxi_ch; - if not(trouve_Entete) then s:=s+' '+Entete_ch; - if not(trouve_TCO) then s:=s+' '+TCO_ch; - if not(trouve_CDM) then s:=s+' '+CDM_ch; - if not(trouve_Serveur_interface) then s:=s+' '+Serveur_interface_ch; - if not(trouve_fenetre) then s:=s+' '+fenetre_ch; - if not(trouve_tempo_aig) then s:=s+' '+tempo_aig_ch; - if not(trouve_NOTIF_VERSION) then s:=s+' '+NOTIF_VERSION_ch; - if not(trouve_verif_version) then s:=s+' '+verif_version_ch; - if not(trouve_fonte) then s:=s+' '+fonte_ch; - if s<>'' then affiche(s,clred); + s:='';//Affiche(intToSTR(Nv),clred); + if not(trouve_NbDetDist) then s:=nb_det_dist_ch; + if not(trouve_ipv4_PC) then s:=IpV4_PC_ch; + if not(trouve_retro) then s:=retro_ch; + //if not(trouve_sec_init) and compile_init_cfg then s:=section_init; + if not(trouve_init_aig) then s:=INIT_AIG_ch; + if not(trouve_lay) then s:=LAY_ch; + if not(trouve_INTER_CAR) then s:=INTER_CAR_ch; + if not(trouve_Tempo_maxi) then s:=Tempo_maxi_ch; + if not(trouve_Entete) then s:=Entete_ch; + if not(trouve_TCO) then s:=TCO_ch; + if not(trouve_CDM) then s:=CDM_ch; + if not(trouve_Serveur_interface) then s:=Serveur_interface_ch; + if not(trouve_fenetre) then s:=fenetre_ch; + if not(trouve_tempo_aig) then s:=tempo_aig_ch; + if not(trouve_NOTIF_VERSION) then s:=NOTIF_VERSION_ch; + if not(trouve_verif_version) then s:=verif_version_ch; + if not(trouve_fonte) then s:=fonte_ch; + if s<>'' then affiche('ERREUR: manque variables dans config-gl.cfg '+s,clred); closefile(fichier); verif_coherence; @@ -3622,7 +3647,8 @@ begin AfficheDebug(s,clred); Suivant_alg3:=9999;exit; end; - if NivDebug=3 then AfficheDebug('Alg3 précédent='+intToSTR(prec)+'/'+intToStr(TypeElprec)+' actuel='+intToSTR(actuel)+'/'+IntToSTR(typeElActuel),clyellow); + if NivDebug=3 then + AfficheDebug('Alg3 précédent='+intToSTR(prec)+'/'+intToStr(TypeElprec)+' actuel='+intToSTR(actuel)+'/'+IntToSTR(typeElActuel)+' Alg='+intToSTr(alg),clyellow); // trouver les éléments du précédent trouve_element(prec,TypeELPrec,1); // branche_trouve IndexBranche_trouve if IndexBranche_trouve=0 then @@ -4187,9 +4213,10 @@ end; // algo= type d'algorythme pour suivant_alg3 function detecteur_suivant(prec : integer;TypeElPrec : integer;actuel : integer;TypeElActuel,algo : integer) : integer ; var actuelCalc,PrecCalc,j,AdrSuiv ,indexCalc, - TypeprecCalc,TypeActuelCalc : integer; + TypeprecCalc,TypeActuelCalc : integer; begin - if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant '+IntToSTR(prec)+','+IntToSTR(typeElPrec)+'/'+intToSTR(actuel)+','+intToSTR(TypeElActuel),clyellow); + if NivDebug>=2 then + AfficheDebug('Proc Detecteur_suivant '+IntToSTR(prec)+','+IntToSTR(typeElPrec)+'/'+intToSTR(actuel)+','+intToSTR(TypeElActuel)+' Alg='+IntToSTR(algo),clyellow); j:=0; PrecCalc:=prec; @@ -4199,7 +4226,7 @@ begin // étape 1 trouver le sens repeat inc(j); - AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo); + AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo); indexCalc:=index_aig(actuelCalc); if (typeGen=2) and false then // si le précédent est une TJD/S et le suivant aussi begin @@ -4290,13 +4317,13 @@ end; // El1 et El2 peuvent être séparés par des aiguillages, mais de pas plus de 3 détecteurs // en sortie : 9999= det1 ou det2 non trouvé // 9996 : non trouvé -function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2 : integer) : integer ; +function detecteur_suivant_El(el1: integer;TypeDet1 : integer;el2 : integer;TypeDet2,alg : integer) : integer ; var IndexBranche_det1,IndexBranche_det2,branche_trouve_det1,branche_trouve_det2,i, j,AdrPrec,Adr,AdrFonc,TypePrec,TypeFonc,i1,N_det : integer; Sortie : boolean; s : string; label reprise; - + begin if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant_EL '+intToSTR(el1)+','+intToSTR(Typedet1)+'/'+intToSTR(el2)+','+intToSTR(Typedet2)+'-------------------------',clLime); @@ -4362,7 +4389,7 @@ begin repeat //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); if nivDebug=3 then AfficheDebug('i='+IntToSTR(i)+' NDet='+IntToSTR(N_det),clyellow); - if (AdrFonc<>0) or (TypeFonc<>0) then Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1) else + if (AdrFonc<>0) or (TypeFonc<>0) then Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,alg) else begin Adr:=9999; end; @@ -4401,7 +4428,7 @@ begin i:=0; repeat //AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow); - Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,1); + Adr:=suivant_alg3(AdrPrec,TypePrec,AdrFonc,TypeFonc,alg); //AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow); if NivDebug=3 then @@ -5006,7 +5033,7 @@ function test_route_valide(det1,det2,det3 : integer) : integer; var det_suiv,resultat : integer; begin if TraceListe then AfficheDebug('test route valide '+IntToSTR(det1)+' '+IntToSTR(det2)+' vers '+IntToSTR(det3)+' ',clyellow); - det_suiv:=detecteur_suivant_el(det1,1,det2,1); + det_suiv:=detecteur_suivant_el(det1,1,det2,1,1); if det_suiv=det3 then begin test_route_valide:=10;exit;end; test_route_valide:=9999; @@ -5018,7 +5045,7 @@ begin begin test_route_valide:=0;exit; // si manipulation proche aiguillage - det_suiv:=detecteur_suivant_el(det3,1,det2,1); + det_suiv:=detecteur_suivant_el(det3,1,det2,1,1); if (det_suiv>=9996) or (det1<>det_suiv) then begin test_route_valide:=0; NivDebug:=0;exit;end; end; test_route_valide:=10 ; @@ -5075,20 +5102,20 @@ begin if feux[i].Btype_suiv4=4 then Btype_el_suivant:=2; end; if (det_initial<>0) then - begin + begin DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,1,2); // 2= algo2 = arret sur aiguillage en talon mal positionné if nivdebug=3 then afficheDebug('detPrec1='+intToSTR(DetPrec1),clorange); if DetPrec1<1024 then // route bloquée par aiguillage mal positionné begin - if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1) else DetPrec2:=0; + if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,1,DetPrec1,1,2) else DetPrec2:=0; if nivdebug=3 then afficheDebug('detPrec2='+intToSTR(DetPrec2),clorange); if DetPrec2<1024 then begin - if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1) else DetPrec3:=0; + if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,1,DetPrec2,1,2) else DetPrec3:=0; if nivdebug=3 then afficheDebug('detPrec3='+intToSTR(DetPrec3),clorange); if DetPrec3<1024 then begin - if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1) else DetPrec4:=0; + if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,1,DetPrec3,1,2) else DetPrec4:=0; if nivdebug=3 then afficheDebug('detPrec4='+intToSTR(DetPrec4),clorange); if DetPrec4<1024 then begin @@ -5122,7 +5149,7 @@ end; // mise à jour de l'état d'un feu en fontion de son environnement et affiche le feu procedure Maj_Feu(Adrfeu : integer); -var i,Adr_det,etat,Aig,Adr_El_Suiv, +var Adr_det,etat,Aig,Adr_El_Suiv, Btype_el_suivant,modele,index : integer ; PresTrain,Aff_semaphore,car : boolean; code,combine : word; @@ -5130,16 +5157,17 @@ var i,Adr_det,etat,Aig,Adr_El_Suiv, begin s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------'; + if signalDebug=AdrFeu then AffSignal:=true; if AffSignal then AfficheDebug(s,clOrange); - i:=index_feu(Adrfeu); + index:=index_feu(Adrfeu); if AdrFeu<>0 then begin - modele:=Feux[i].aspect; - - Adr_det:=Feux[i].Adr_det1; // détecteur sur le signal - Adr_El_Suiv:=Feux[i].Adr_el_suiv1; // adresse élément suivant au feu - Btype_el_suivant:=Feux[i].Btype_suiv1; + modele:=Feux[index].aspect; + Adr_det:=Feux[index].Adr_det1; // détecteur sur le signal + Adr_El_Suiv:=Feux[index].Adr_el_suiv1; // adresse élément suivant au feu + Btype_el_suivant:=Feux[index].Btype_suiv1; + // signal directionnel ? if (modele>10) then begin @@ -5179,7 +5207,7 @@ begin } // signal à 2 feux = carré violet+blanc - if (Feux[i].aspect=2) then //or (feux[i].check<>nil) then // si carré violet + if (Feux[index].aspect=2) then //or (feux[i].check<>nil) then // si carré violet begin //AfficheDebug('Feux à 2 feux',CLOrange); // si aiguillage après signal mal positionnées @@ -5201,21 +5229,21 @@ begin //if AffSignal then AfficheDebug('Debut du traitement général',clYellow); // traitement des feux >3 feux différents de violet (cas général) - if (Feux[i].aspect>=3) and (EtatSignalCplx[AdrFeu]<>violet_F) then + if (Feux[index].aspect>=3) and (EtatSignalCplx[AdrFeu]<>violet_F) then begin PresTrain:=false; // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré - if (Feux[i].VerrouCarre) and (Feux[i].aspect>=4) then presTrain:=PresTrainPrec(AdrFeu); + if (Feux[index].VerrouCarre) and (Feux[index].aspect>=4) then presTrain:=PresTrainPrec(AdrFeu); if AffSignal then afficheDebug('Fin de la recherche des 4 détecteurs précédents-----',clOrange); // si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou que pas présence train avant signal et signal // verrouillable au carré, afficher un carré car:=carre_signal(AdrFeu); // conditions supplémentaires de carré en fonction des aiguillages décrits - car:=cond_carre(AdrFeu) or car; + car:=cond_carre(AdrFeu) or car; if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); if (NivDebug>=1) and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); - if (Feux[i].aspect>=4) and ( (not(PresTrain) and Feux[i].VerrouCarre) or car) then Maj_Etat_Signal(AdrFeu,carre) + if (Feux[index].aspect>=4) and ( (not(PresTrain) and Feux[index].VerrouCarre) or car) then Maj_Etat_Signal(AdrFeu,carre) else begin // si on quitte le détecteur on affiche un sémaphore : attention tester le sens de circulation @@ -5232,12 +5260,11 @@ begin end else begin - // si aiguille locale déviée Aig:=Aiguille_deviee(Adrfeu); - index:=index_aig(Aig); - if (aig<>0) and (feux[i].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée + // si aiguille locale déviée + if (aig<>0) and (feux[index].aspect>=9) then // si le signal peut afficher un rappel et aiguille déviée begin - if AffSignal then AfficheDebug('Aiguille '+intToSTR(aig)+' déviée',clYellow); + if AffSignal then AfficheDebug('Aiguille '+intToSTR(AdrFeu)+' déviée',clYellow); EtatSignalCplx[AdrFeu]:=0; if (aiguillage[index].vitesse=30) or (aiguillage[index].vitesse=0) then Maj_Etat_Signal(AdrFeu,rappel_30); if aiguillage[index].vitesse=60 then Maj_Etat_Signal(AdrFeu,rappel_60); @@ -5275,7 +5302,15 @@ begin else // si le signal suivant est jaune if TestBit(etat,jaune) then Maj_Etat_Signal(AdrFeu,jaune_cli) - else Maj_Etat_Signal(AdrFeu,vert) + else + begin + if feux[index].check<>nil then + begin + if feux[index].check.Checked then Maj_Etat_Signal(AdrFeu,blanc); + end + else + Maj_Etat_Signal(AdrFeu,vert); + end; end; end; end; @@ -5283,6 +5318,7 @@ begin end; end; envoi_signauxCplx; + if signalDebug=AdrFeu then AffSignal:=false; end; Procedure Maj_feux; @@ -5381,7 +5417,7 @@ begin resultat:=test_route_valide(det1,det2,det3); if resultat=10 then begin - AdrSuiv:=detecteur_suivant_el(det2,1,det3,1); // ici on cherche le suivant à det2 det3 + AdrSuiv:=detecteur_suivant_el(det2,1,det3,1,1); // ici on cherche le suivant à det2 det3, algo=1 if (Adrsuiv>=9996) then begin Affiche('Erreur 1500 : pas de suivant sur la route de '+intToSTR(det2)+' à '+intToSTR(det3),clRed); @@ -5781,12 +5817,9 @@ var s: string; faire_event,inv : boolean; prov,i,index : integer; begin - // vérifier que l'évènement accessoire vient bien d'un aiguillage et pas d'un feu - i:=0; - repeat - inc(i); - until (i>MaxAiguillage) or (i=adresse); - if i>MaxAiguillage then exit; // non ce n'est pas un aiguillage, on sort + // vérifier que l'évènement accessoire vient bien d'un aiguillage et pas d'un feu qu'on pilote (et que cdm renvoie) + index:=index_aig(adresse); + if index>MaxAiguillage then exit; // non ce n'est pas un aiguillage, on sort // si l'aiguillage est inversé dans CDM et qu'on est en mode autonome, inverser sa position inv:=false; @@ -7081,10 +7114,33 @@ begin demande_etat_acc; end; -// procédure Event appelée si on clique sur un checkbox des images des feux +// procédure Event appelée si on clique sur un checkbox de demande de feu blanc des images des feux +// non utilisé procedure TFormprinc.proc_checkBoxFB(Sender : Tobject); +var s : string; + Cb : TcheckBox; + etat,adresse,erreur : integer; + i : word; + coche : boolean; begin - Maj_feux ; // évalue l'état des signaux + Cb:=Sender as TcheckBox; + coche:=cb.Checked; // état de la checkbox + s:=Cb.Hint; + val(s,adresse,erreur); // adresse du signal correspondant au checkbox cliqué + if erreur=0 then + begin + i:=index_feu(adresse); + etat:=feux[i].EtatSignal; + affiche(IntToSTR(etat),clyellow); + // si le feu est vert et que la coche est mise, substituer le blanc + if (etat=vert_F) and coche then + begin + Maj_Etat_Signal(Adresse,blanc); + Envoi_signauxCplx; + end; + // si pas coché, on revient en normal + if not(coche) then rafraichit; + end; end; diff --git a/UnitSimule.dcu b/UnitSimule.dcu index 09ac084..43f9faf 100644 Binary files a/UnitSimule.dcu and b/UnitSimule.dcu differ diff --git a/UnitTCO.dcu b/UnitTCO.dcu index d5d8ac2..ce2674b 100644 Binary files a/UnitTCO.dcu and b/UnitTCO.dcu differ diff --git a/UnitTCO.pas b/UnitTCO.pas index 84ce0d0..ba17c81 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -2328,14 +2328,11 @@ begin AdrSuiv:=BrancheN[IndexMax,i+1].Adresse; index:=Index_aig(adresse); // connecté sur position droite : la pointe est à gauche - if aiguillage[Index].Adroit=AdrSuiv then - Bimage:=3; // ou 4 + if aiguillage[Index].Adroit=AdrSuiv then Bimage:=3; // ou 4 // connecté sur position déviée : la pointe est à gauche, mais il faut changer de ligne - if aiguillage[Index].Adevie=AdrSuiv then - Bimage:=4; // ou 4 + if aiguillage[Index].Adevie=AdrSuiv then Bimage:=4; // ou 4 // connecté sur pointe : la pointe est à droite - if aiguillage[Index].Apointe=AdrSuiv then - Bimage:=5; // ou 2 + if aiguillage[Index].Apointe=AdrSuiv then Bimage:=5; // ou 2 TCO[i,ligne].BImage:=Bimage; end; diff --git a/versions.txt b/versions.txt index c249013..c5c5291 100644 --- a/versions.txt +++ b/versions.txt @@ -59,6 +59,10 @@ version 3.0 : Ajout des fonctions Nouveau / supprimer feu, accessoires dans le version 3.1 : Renforcement de la vérification de la configuration. Modification de la liste d'initialisation des aiguillages en mode autonome. Indépendance des modifications entre les onglets du panneau de configuration. + Correction d'un bug sur l'affichage des rappels de ralentissement non présentés. + Correction d'un bug sur certains évènements aiguillages. + Correction d'un bug sur présence train avant signal sur aiguille en talon mal positionnée. +