This commit is contained in:
f1iwq2
2025-09-28 09:52:09 +02:00
parent aad2526b3d
commit f053df40f9
9 changed files with 344 additions and 543 deletions
+89 -89
View File
@@ -1573,7 +1573,7 @@ object FormConfig: TFormConfig
Top = 8 Top = 8
Width = 633 Width = 633
Height = 505 Height = 505
ActivePage = TabSheetActions ActivePage = TabSheetSig
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack Font.Color = clBlack
Font.Height = -11 Font.Height = -11
@@ -1638,7 +1638,6 @@ object FormConfig: TFormConfig
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 1 TabOrder = 1
Text = '123'
end end
object ButtonPFCDM: TButton object ButtonPFCDM: TButton
Left = 16 Left = 16
@@ -2098,7 +2097,7 @@ object FormConfig: TFormConfig
'S'#233'lection du style d'#39#39'affichage - Le style sera chang'#233' '#224' la ferm' + 'S'#233'lection du style d'#39#39'affichage - Le style sera chang'#233' '#224' la ferm' +
'eture de la fen'#234'tre'#39 'eture de la fen'#234'tre'#39
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 0 TabOrder = 0
@@ -2295,10 +2294,10 @@ object FormConfig: TFormConfig
BevelInner = bvLowered BevelInner = bvLowered
BevelKind = bkFlat BevelKind = bkFlat
Lines.Strings = ( Lines.Strings = (
'3. Valeur maximale par tranche de 100 ms qui d'#233'finit le temps ' '3. Valeur maximale par tranche de 50 ms qui d'#233'finit le temps '
'd'#39'attente de la r'#233'ponse de l'#39'interface apr'#232's ' 'd'#39'attente de la r'#233'ponse de l'#39'interface apr'#232's une trame qui lui '
'une trame qui lui est transf'#233'r'#233'e. Cette valeur est '#224' tester en ' 'est transf'#233'r'#233'e. Cette valeur est '#224' tester en fonction de votre '
'fonction de votre interface. ' 'interface. '
'En cas de d'#233'passement de la valeur, un message '#171' pas de ' 'En cas de d'#233'passement de la valeur, un message '#171' pas de '
'r'#233'ponse de l'#39'interface '#187' sera affich'#233'.') 'r'#233'ponse de l'#39'interface '#187' sera affich'#233'.')
ReadOnly = True ReadOnly = True
@@ -3140,21 +3139,6 @@ object FormConfig: TFormConfig
object TabSheetSig: TTabSheet object TabSheetSig: TTabSheet
Caption = 'Signaux' Caption = 'Signaux'
ImageIndex = 4 ImageIndex = 4
object Label15: TLabel
Left = 0
Top = 8
Width = 531
Height = 13
Caption =
'Liste de mod'#233'lisation des signaux - cliquez sur une ligne pour a' +
'fficher la description du signal'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label35: TLabel object Label35: TLabel
Left = 72 Left = 72
Top = 436 Top = 436
@@ -3164,14 +3148,14 @@ object FormConfig: TFormConfig
end end
object GroupBox12: TGroupBox object GroupBox12: TGroupBox
Left = 328 Left = 328
Top = 24 Top = 8
Width = 297 Width = 297
Height = 449 Height = 465
Caption = 'Description du signal' Caption = 'Description du signal'
TabOrder = 0 TabOrder = 0
object ImageSignal: TImage object ImageSignal: TImage
Left = 8 Left = 8
Top = 48 Top = 64
Width = 81 Width = 81
Height = 105 Height = 105
end end
@@ -3190,30 +3174,30 @@ object FormConfig: TFormConfig
end end
object LabelDec: TLabel object LabelDec: TLabel
Left = 92 Left = 92
Top = 52 Top = 76
Width = 53 Width = 53
Height = 13 Height = 13
Caption = 'D'#233'codeur: ' Caption = 'D'#233'codeur: '
end end
object LabelDetAss: TLabel object LabelDetAss: TLabel
Left = 96 Left = 96
Top = 104 Top = 120
Width = 86 Width = 86
Height = 13 Height = 13
Caption = 'D'#233'tecteur associ'#233 Caption = 'D'#233'tecteur associ'#233
end end
object LabelElSuiv: TLabel object LabelElSuiv: TLabel
Left = 192 Left = 192
Top = 104 Top = 120
Width = 75 Width = 75
Height = 13 Height = 13
Caption = 'Element suivant' Caption = 'Element suivant'
end end
object Label17: TLabel object Label17: TLabel
Left = 8 Left = 8
Top = 326 Top = 344
Width = 115 Width = 128
Height = 52 Height = 39
Hint = Hint =
'Permet d'#39'afficher un carr'#233' si les aiguillages sont dans les posi' + 'Permet d'#39'afficher un carr'#233' si les aiguillages sont dans les posi' +
'tions d'#233'crites ci dessous' 'tions d'#233'crites ci dessous'
@@ -3225,8 +3209,8 @@ object FormConfig: TFormConfig
WordWrap = True WordWrap = True
end end
object Label24: TLabel object Label24: TLabel
Left = 104 Left = 120
Top = 124 Top = 140
Width = 8 Width = 8
Height = 13 Height = 13
Caption = '1' Caption = '1'
@@ -3238,8 +3222,8 @@ object FormConfig: TFormConfig
ParentFont = False ParentFont = False
end end
object Label25: TLabel object Label25: TLabel
Left = 104 Left = 120
Top = 148 Top = 164
Width = 8 Width = 8
Height = 13 Height = 13
Caption = '2' Caption = '2'
@@ -3251,8 +3235,8 @@ object FormConfig: TFormConfig
ParentFont = False ParentFont = False
end end
object Label26: TLabel object Label26: TLabel
Left = 104 Left = 120
Top = 172 Top = 188
Width = 8 Width = 8
Height = 13 Height = 13
Caption = '3' Caption = '3'
@@ -3264,8 +3248,8 @@ object FormConfig: TFormConfig
ParentFont = False ParentFont = False
end end
object Label27: TLabel object Label27: TLabel
Left = 104 Left = 120
Top = 196 Top = 212
Width = 8 Width = 8
Height = 13 Height = 13
Caption = '4' Caption = '4'
@@ -3278,22 +3262,22 @@ object FormConfig: TFormConfig
end end
object Label33: TLabel object Label33: TLabel
Left = 104 Left = 104
Top = 76 Top = 100
Width = 36 Width = 36
Height = 13 Height = 13
Caption = 'Aspect:' Caption = 'Aspect:'
end end
object LabelUni: TLabel object LabelUni: TLabel
Left = 8 Left = 8
Top = 176 Top = 200
Width = 72 Width = 72
Height = 13 Height = 13
Caption = 'Spec Unisemaf' Caption = 'Spec Unisemaf'
Visible = False Visible = False
end end
object Label43: TLabel object Label43: TLabel
Left = 48 Left = 72
Top = 160 Top = 176
Width = 38 Width = 38
Height = 16 Height = 16
Caption = 'Voies:' Caption = 'Voies:'
@@ -3306,8 +3290,8 @@ object FormConfig: TFormConfig
end end
object Label69: TLabel object Label69: TLabel
Left = 152 Left = 152
Top = 326 Top = 350
Width = 107 Width = 122
Height = 39 Height = 39
Hint = Hint =
'Permet d'#39'afficher un feu blanc si les aiguillages sont dans les ' + 'Permet d'#39'afficher un feu blanc si les aiguillages sont dans les ' +
@@ -3318,11 +3302,19 @@ object FormConfig: TFormConfig
ShowHint = True ShowHint = True
WordWrap = True WordWrap = True
end end
object Label15: TLabel
Left = 56
Top = 44
Width = 171
Height = 13
Caption = 'Temporisation commandes (x100mx)'
WordWrap = True
end
object MemoCarre: TMemo object MemoCarre: TMemo
Left = 8 Left = 8
Top = 368 Top = 392
Width = 137 Width = 137
Height = 73 Height = 65
Hint = Hint =
'Une ligne contient les conditions en ET. Les lignes sont cha'#238'n'#233'e' + 'Une ligne contient les conditions en ET. Les lignes sont cha'#238'n'#233'e' +
's en OU' 's en OU'
@@ -3336,17 +3328,17 @@ object FormConfig: TFormConfig
end end
object ComboBoxDec: TComboBox object ComboBoxDec: TComboBox
Left = 144 Left = 144
Top = 48 Top = 72
Width = 137 Width = 137
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 1 TabOrder = 1
OnChange = ComboBoxDecChange OnChange = ComboBoxDecChange
end end
object EditDet1: TEdit object EditDet1: TEdit
Left = 136 Left = 136
Top = 120 Top = 136
Width = 41 Width = 41
Height = 21 Height = 21
Hint = 'D'#233'tecteur 1 (obligatoire) associ'#233' au signal' Hint = 'D'#233'tecteur 1 (obligatoire) associ'#233' au signal'
@@ -3357,7 +3349,7 @@ object FormConfig: TFormConfig
end end
object EditSuiv1: TEdit object EditSuiv1: TEdit
Left = 200 Left = 200
Top = 120 Top = 136
Width = 41 Width = 41
Height = 21 Height = 21
Hint = Hint =
@@ -3370,7 +3362,7 @@ object FormConfig: TFormConfig
end end
object EditDet2: TEdit object EditDet2: TEdit
Left = 136 Left = 136
Top = 144 Top = 160
Width = 41 Width = 41
Height = 21 Height = 21
Hint = 'D'#233'tecteur 2 (optionnel) associ'#233' au signal' Hint = 'D'#233'tecteur 2 (optionnel) associ'#233' au signal'
@@ -3381,7 +3373,7 @@ object FormConfig: TFormConfig
end end
object EditSuiv2: TEdit object EditSuiv2: TEdit
Left = 200 Left = 200
Top = 144 Top = 160
Width = 41 Width = 41
Height = 21 Height = 21
Hint = Hint =
@@ -3394,7 +3386,7 @@ object FormConfig: TFormConfig
end end
object EditDet3: TEdit object EditDet3: TEdit
Left = 136 Left = 136
Top = 168 Top = 184
Width = 41 Width = 41
Height = 21 Height = 21
Hint = 'D'#233'tecteur 3 (optionnel) associ'#233' au signal' Hint = 'D'#233'tecteur 3 (optionnel) associ'#233' au signal'
@@ -3405,7 +3397,7 @@ object FormConfig: TFormConfig
end end
object EditSuiv3: TEdit object EditSuiv3: TEdit
Left = 200 Left = 200
Top = 168 Top = 184
Width = 41 Width = 41
Height = 21 Height = 21
Hint = Hint =
@@ -3418,7 +3410,7 @@ object FormConfig: TFormConfig
end end
object EditDet4: TEdit object EditDet4: TEdit
Left = 136 Left = 136
Top = 192 Top = 208
Width = 41 Width = 41
Height = 21 Height = 21
Hint = 'D'#233'tecteur 4 (optionnel) associ'#233' au signal' Hint = 'D'#233'tecteur 4 (optionnel) associ'#233' au signal'
@@ -3429,7 +3421,7 @@ object FormConfig: TFormConfig
end end
object EditSuiv4: TEdit object EditSuiv4: TEdit
Left = 200 Left = 200
Top = 192 Top = 208
Width = 41 Width = 41
Height = 21 Height = 21
Hint = Hint =
@@ -3442,7 +3434,7 @@ object FormConfig: TFormConfig
end end
object CheckVerrouCarre: TCheckBox object CheckVerrouCarre: TCheckBox
Left = 136 Left = 136
Top = 216 Top = 240
Width = 137 Width = 137
Height = 17 Height = 17
Hint = Hint =
@@ -3467,17 +3459,17 @@ object FormConfig: TFormConfig
end end
object ComboBoxAsp: TComboBox object ComboBoxAsp: TComboBox
Left = 144 Left = 144
Top = 72 Top = 96
Width = 137 Width = 137
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 2 TabOrder = 2
OnChange = ComboBoxAspChange OnChange = ComboBoxAspChange
end end
object EditSpecUni: TEdit object EditSpecUni: TEdit
Left = 8 Left = 8
Top = 192 Top = 216
Width = 33 Width = 33
Height = 21 Height = 21
TabOrder = 14 TabOrder = 14
@@ -3485,8 +3477,8 @@ object FormConfig: TFormConfig
OnChange = EditSpecUniChange OnChange = EditSpecUniChange
end end
object Buttonrestaure: TButton object Buttonrestaure: TButton
Left = 24 Left = 32
Top = 272 Top = 288
Width = 75 Width = 75
Height = 25 Height = 25
Hint = 'Restaure la configuration du feu d'#39'avant sa modification' Hint = 'Restaure la configuration du feu d'#39'avant sa modification'
@@ -3498,7 +3490,7 @@ object FormConfig: TFormConfig
end end
object CheckBoxFB: TCheckBox object CheckBoxFB: TCheckBox
Left = 136 Left = 136
Top = 264 Top = 288
Width = 153 Width = 153
Height = 17 Height = 17
Caption = 'Avec demande feu blanc' Caption = 'Avec demande feu blanc'
@@ -3506,8 +3498,8 @@ object FormConfig: TFormConfig
OnClick = CheckBoxFBClick OnClick = CheckBoxFBClick
end end
object ButtonConfigSR: TButton object ButtonConfigSR: TButton
Left = 24 Left = 32
Top = 296 Top = 312
Width = 75 Width = 75
Height = 25 Height = 25
Caption = 'Configuration' Caption = 'Configuration'
@@ -3517,7 +3509,7 @@ object FormConfig: TFormConfig
end end
object CheckFVC: TCheckBox object CheckFVC: TCheckBox
Left = 136 Left = 136
Top = 232 Top = 256
Width = 121 Width = 121
Height = 17 Height = 17
Hint = 'Remplace le feu vert par un feu vert clignotant' Hint = 'Remplace le feu vert par un feu vert clignotant'
@@ -3529,7 +3521,7 @@ object FormConfig: TFormConfig
end end
object CheckFRC: TCheckBox object CheckFRC: TCheckBox
Left = 136 Left = 136
Top = 248 Top = 272
Width = 129 Width = 129
Height = 17 Height = 17
Hint = 'Remplace le s'#233'maphore par un feu rouge clignotant' Hint = 'Remplace le s'#233'maphore par un feu rouge clignotant'
@@ -3541,7 +3533,7 @@ object FormConfig: TFormConfig
end end
object CheckBoxVersContrevoie: TCheckBox object CheckBoxVersContrevoie: TCheckBox
Left = 136 Left = 136
Top = 280 Top = 304
Width = 137 Width = 137
Height = 17 Height = 17
Hint = 'Permet d'#39'afficher le chevron si l'#39'aiguillage du signal est devi'#233 Hint = 'Permet d'#39'afficher le chevron si l'#39'aiguillage du signal est devi'#233
@@ -3553,7 +3545,7 @@ object FormConfig: TFormConfig
end end
object CheckBoxContreVoie: TCheckBox object CheckBoxContreVoie: TCheckBox
Left = 136 Left = 136
Top = 296 Top = 320
Width = 129 Width = 129
Height = 17 Height = 17
Hint = 'Signal clignotant' Hint = 'Signal clignotant'
@@ -3565,9 +3557,9 @@ object FormConfig: TFormConfig
end end
object MemoBlanc: TMemo object MemoBlanc: TMemo
Left = 152 Left = 152
Top = 368 Top = 392
Width = 129 Width = 129
Height = 73 Height = 65
Hint = Hint =
'Une ligne contient les conditions en ET. Les lignes sont cha'#238'n'#233'e' + 'Une ligne contient les conditions en ET. Les lignes sont cha'#238'n'#233'e' +
's en OU' 's en OU'
@@ -3579,8 +3571,8 @@ object FormConfig: TFormConfig
OnChange = MemoBlancChange OnChange = MemoBlancChange
end end
object RadioGroupLEB: TRadioGroup object RadioGroupLEB: TRadioGroup
Left = 8 Left = 16
Top = 224 Top = 248
Width = 113 Width = 113
Height = 41 Height = 41
Caption = 'Pilotage' Caption = 'Pilotage'
@@ -3593,10 +3585,18 @@ object FormConfig: TFormConfig
Visible = False Visible = False
OnClick = RadioGroupLEBClick OnClick = RadioGroupLEBClick
end end
object EditTempoSig: TEdit
Left = 240
Top = 40
Width = 33
Height = 21
TabOrder = 23
OnChange = EditTempoSigChange
end
end end
object ButtonNouvSig: TButton object ButtonNouvSig: TButton
Left = 0 Left = 0
Top = 32 Top = 16
Width = 65 Width = 65
Height = 17 Height = 17
Caption = 'Nouveau' Caption = 'Nouveau'
@@ -3605,7 +3605,7 @@ object FormConfig: TFormConfig
end end
object ButtonSupSig: TButton object ButtonSupSig: TButton
Left = 72 Left = 72
Top = 32 Top = 16
Width = 65 Width = 65
Height = 17 Height = 17
Caption = 'Supprime' Caption = 'Supprime'
@@ -3614,7 +3614,7 @@ object FormConfig: TFormConfig
end end
object ButtonInsSig: TButton object ButtonInsSig: TButton
Left = 144 Left = 144
Top = 32 Top = 16
Width = 153 Width = 153
Height = 17 Height = 17
Caption = 'Ajouter le signal supprim'#233 Caption = 'Ajouter le signal supprim'#233
@@ -3642,7 +3642,7 @@ object FormConfig: TFormConfig
end end
object ListBoxSig: TListBox object ListBoxSig: TListBox
Left = 0 Left = 0
Top = 56 Top = 48
Width = 321 Width = 321
Height = 337 Height = 337
Color = clBlack Color = clBlack
@@ -3779,7 +3779,7 @@ object FormConfig: TFormConfig
Top = 56 Top = 56
Width = 193 Width = 193
Height = 21 Height = 21
ItemHeight = 0 ItemHeight = 13
TabOrder = 0 TabOrder = 0
OnChange = ComboBoxDecodeurPersoChange OnChange = ComboBoxDecodeurPersoChange
end end
@@ -3798,7 +3798,7 @@ object FormConfig: TFormConfig
Width = 145 Width = 145
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 2 TabOrder = 2
OnChange = ComboBoxNationChange OnChange = ComboBoxNationChange
end end
@@ -3844,7 +3844,7 @@ object FormConfig: TFormConfig
Width = 193 Width = 193
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 6 TabOrder = 6
OnChange = ComboBoxDecCdeChange OnChange = ComboBoxDecCdeChange
end end
@@ -4057,7 +4057,7 @@ object FormConfig: TFormConfig
Top = 96 Top = 96
Width = 137 Width = 137
Height = 21 Height = 21
ItemHeight = 0 ItemHeight = 13
TabOrder = 2 TabOrder = 2
OnChange = ComboBoxOperateurChange OnChange = ComboBoxOperateurChange
OnDrawItem = ComboBoxOperateurDrawItem OnDrawItem = ComboBoxOperateurDrawItem
@@ -4077,7 +4077,7 @@ object FormConfig: TFormConfig
Top = 96 Top = 96
Width = 161 Width = 161
Height = 21 Height = 21
ItemHeight = 0 ItemHeight = 13
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 4 TabOrder = 4
@@ -4189,7 +4189,7 @@ object FormConfig: TFormConfig
Width = 145 Width = 145
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 7 TabOrder = 7
OnChange = ComboBoxFLChange OnChange = ComboBoxFLChange
end end
@@ -4739,7 +4739,7 @@ object FormConfig: TFormConfig
Height = 21 Height = 21
Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"'
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 10 TabOrder = 10
@@ -5099,7 +5099,7 @@ object FormConfig: TFormConfig
Top = 16 Top = 16
Width = 337 Width = 337
Height = 457 Height = 457
ActivePage = TabSheet1 ActivePage = TtabSheetEt
TabOrder = 3 TabOrder = 3
object TabSheetTrGen: TTabSheet object TabSheetTrGen: TTabSheet
Caption = 'G'#233'n'#233'ral' Caption = 'G'#233'n'#233'ral'
@@ -6313,7 +6313,7 @@ object FormConfig: TFormConfig
end end
object GroupBoxBR: TGroupBox object GroupBoxBR: TGroupBox
Left = 312 Left = 312
Top = 176 Top = 120
Width = 260 Width = 260
Height = 121 Height = 121
Caption = 'Bouton rotatif' Caption = 'Bouton rotatif'
@@ -6389,7 +6389,7 @@ object FormConfig: TFormConfig
end end
object GroupBoxBt: TGroupBox object GroupBoxBt: TGroupBox
Left = 312 Left = 312
Top = 320 Top = 224
Width = 260 Width = 260
Height = 121 Height = 121
Caption = 'Bouton' Caption = 'Bouton'
@@ -6466,7 +6466,7 @@ object FormConfig: TFormConfig
Width = 153 Width = 153
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 0 ItemHeight = 13
TabOrder = 0 TabOrder = 0
OnChange = ComboBoxUSBTrChange OnChange = ComboBoxUSBTrChange
end end
+91 -49
View File
@@ -1,6 +1,6 @@
Unit UnitConfig; Unit UnitConfig;
interface interface
uses uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
@@ -73,7 +73,6 @@ type
TabSheetBranches: TTabSheet; TabSheetBranches: TTabSheet;
Label14: TLabel; Label14: TLabel;
TabSheetSig: TTabSheet; TabSheetSig: TTabSheet;
Label15: TLabel;
TabSheetPN: TTabSheet; TabSheetPN: TTabSheet;
CheckBoxSrvSig: TCheckBox; CheckBoxSrvSig: TCheckBox;
Memo1: TMemo; Memo1: TMemo;
@@ -511,6 +510,8 @@ type
Label84: TLabel; Label84: TLabel;
LabelTitreTrain: TLabel; LabelTitreTrain: TLabel;
LabeledEditZone: TLabeledEdit; LabeledEditZone: TLabeledEdit;
EditTempoSig: TEdit;
Label15: TLabel;
procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure ButtonAppliquerEtFermerClick(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure ListBoxAigMouseDown(Sender: TObject; Button: TMouseButton; procedure ListBoxAigMouseDown(Sender: TObject; Button: TMouseButton;
@@ -810,6 +811,7 @@ type
procedure LabeledEditVit2Change(Sender: TObject); procedure LabeledEditVit2Change(Sender: TObject);
procedure LabeledEditVit3Change(Sender: TObject); procedure LabeledEditVit3Change(Sender: TObject);
procedure LabeledEditZoneChange(Sender: TObject); procedure LabeledEditZoneChange(Sender: TObject);
procedure EditTempoSigChange(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
@@ -1066,6 +1068,7 @@ procedure ComboBoxFL_mizajour;
procedure clic_BRM; procedure clic_BRM;
function crans_to_Vrcms(v,idTrain : integer) : single; function crans_to_Vrcms(v,idTrain : integer) : single;
procedure courbe_train(indexTrain : integer); procedure courbe_train(indexTrain : integer);
procedure cree_icone_train(i : integer);
implementation implementation
@@ -1580,6 +1583,9 @@ begin
end; end;
end; end;
// tempo de retard au pilotage
s:=s+',T'+intToSTR(Signaux[i].Tempo);
encode_signal:=s; encode_signal:=s;
end; end;
@@ -1623,6 +1629,7 @@ begin
begin begin
inc(NbreSignaux); inc(NbreSignaux);
Signaux[i].adresse:=adresse; Signaux[i].adresse:=adresse;
Signaux[i].Tempo:=0;
tablo_Index_Signal[adresse]:=i; // stocker l'index provisoire avant tri tablo_Index_Signal[adresse]:=i; // stocker l'index provisoire avant tri
j:=pos(',',s); j:=pos(',',s);
if j>1 then if j>1 then
@@ -1970,7 +1977,6 @@ begin
val(s,j,erreur); val(s,j,erreur);
delete(s,1,erreur); delete(s,1,erreur);
Signaux[i].na:=j; Signaux[i].na:=j;
end; end;
end; end;
@@ -1994,11 +2000,18 @@ begin
if (j<0) or (j>5) then if (j<0) or (j>5) then
begin begin
j:=5;affiche('Paramètre NA incorrect dans ligne '+chaine_signal,clred) j:=5;affiche('Paramètre NA incorrect dans ligne '+chaine_signal,clred)
end; end;
Signaux[i].na:=j; Signaux[i].na:=j;
end; end;
end; end;
end; if length(s)>1 then if s[1]='T' then
begin
delete(s,1,1);
val(s,j,erreur);
delete(s,1,erreur);
signaux[i].Tempo:=j;
end;
end;
end; end;
end; end;
end; end;
@@ -3090,6 +3103,21 @@ begin
result:=s; result:=s;
end; end;
procedure cree_icone_train(i : integer);
begin
Trains[i].icone:=Timage.create(nil);
with Trains[i].icone do
begin
autosize:=true;
align:=alNone;
parent:=nil;
name:='IconeTrain'+intToSTR(i);
top:=0;left:=0;
width:=200;
height:=100;
end;
end;
// génère les informations calculées // génère les informations calculées
procedure genere_informations_BD; procedure genere_informations_BD;
begin begin
@@ -4495,7 +4523,9 @@ const LessThanValue=-1;
if i<>0 then if i<>0 then
begin begin
delete(s,i,1); delete(s,i,1);
val(s,trains[ntrains].vitnominale,erreur); val(s,i,erreur);
if i=0 then i:=trains[ntrains].vitMax;
trains[ntrains].vitnominale:=i;
delete(s,1,erreur-1); delete(s,1,erreur-1);
end; end;
@@ -4503,7 +4533,9 @@ const LessThanValue=-1;
if i<>0 then if i<>0 then
begin begin
delete(s,i,1); delete(s,i,1);
val(s,trains[ntrains].vitralenti,erreur); val(s,i,erreur);
if i=0 then i:=trains[ntrains].vitnominale div 2;
trains[ntrains].vitralenti:=i;
delete(s,1,erreur-1); delete(s,1,erreur-1);
end; end;
@@ -4514,18 +4546,7 @@ const LessThanValue=-1;
i:=pos(',',s); i:=pos(',',s);
if i=0 then i:=length(s)+1; if i=0 then i:=length(s)+1;
trains[ntrains].NomIcone:=copy(s,1,i-1); trains[ntrains].NomIcone:=copy(s,1,i-1);
Trains[ntrains].icone:=Timage.create(nil); cree_icone_train(ntrains);
with Trains[ntrains].icone do
begin
autosize:=true;
align:=alNone;
parent:=nil;
name:='IconeTrain'+intToSTR(nTrains);
top:=0;left:=0;
width:=200;
height:=100;
end;
Formprinc.ComboTrains.Items.Add(trains[ntrains].nom_train); Formprinc.ComboTrains.Items.Add(trains[ntrains].nom_train);
delete(s,1,i-1); delete(s,1,i-1);
@@ -6633,6 +6654,8 @@ begin
Signal_Sauve:=Signaux[index]; // sauvegarde Signal_Sauve:=Signaux[index]; // sauvegarde
formconfig.listBoxSig.itemIndex:=index-1;
formconfig.listBoxSig.Selected[index-1]:=true;
AncLigneClicSig:=ligneclicSig; AncLigneClicSig:=ligneclicSig;
ligneClicSig:=index-1; ligneClicSig:=index-1;
@@ -7356,6 +7379,9 @@ begin
end; end;
ButtonRdt.Caption:=s; ButtonRdt.Caption:=s;
ListBoxTrains.ItemIndex:=index-1;
ListBoxTrains.selected[index-1]:=true;
editNomTrain.text:=Trains[index].nom_train; editNomTrain.text:=Trains[index].nom_train;
LabelTitreTrain.Caption:=Trains[index].nom_train; LabelTitreTrain.Caption:=Trains[index].nom_train;
editAdresseTrain.Text:=intToSTR(trains[index].adresse); editAdresseTrain.Text:=intToSTR(trains[index].adresse);
@@ -7798,18 +7824,22 @@ begin
end end
else Affiche('Le fichier icône train '+s+' n''a pas été trouvé',clred); else Affiche('Le fichier icône train '+s+' n''a pas été trouvé',clred);
end; end;
cree_image_train(i); cree_image_onglet_train(i);
end; end;
affecte_trains_config; // affecte les trains aux cantons affecte_trains_config; // affecte les trains aux cantons
labeledEditVit1.Hint:='Vitesse en crans du coefficient V1'+#13+'(vitesse lente)';
labeledEditVit2.Hint:='Vitesse en crans du coefficient V2'+#13+'(vitesse moyenne)';
labeledEditVit3.Hint:='Vitesse en crans du coefficient V3'+#13+'(vitesse rapide)';
with StringGridArr do with StringGridArr do
begin begin
Hint:='-'; Hint:='-';
ShowHint:=true; ShowHint:=true;
ColCount:=4; // nombre de colonnes ColCount:=4; // nombre de colonnes
RowCount:=NbDetArret+1; RowCount:=NbDetArret+1;
Options := StringGridArr.Options + [goEditing]; Options:=StringGridArr.Options + [goEditing]; // autorise la modification de la stringGrid
ColWidths[0]:=0; // colonne grise invisible ColWidths[0]:=0; // colonne grise invisible
ColWidths[1]:=round(70/RedFonte); // Précédent ColWidths[1]:=round(70/RedFonte); // Précédent
ColWidths[2]:=round(70/RedFonte); // détecteur ColWidths[2]:=round(70/RedFonte); // détecteur
@@ -7820,7 +7850,7 @@ begin
Cells[3,0]:='Temps (s)'; Cells[3,0]:='Temps (s)';
for i:=0 to RowCount-1 do for i:=0 to RowCount-1 do
RowHeights[i]:=18; RowHeights[i]:=18;
end; end;
{$IF CompilerVersion >= 28.0} {$IF CompilerVersion >= 28.0}
labelD12.Visible:=true; labelD12.Visible:=true;
@@ -8472,6 +8502,10 @@ begin
begin begin
ComboBoxDec.items.add(decodeur[i-1]); ComboBoxDec.items.add(decodeur[i-1]);
end; end;
EditTempoSig.Hint:='Temporisation de retard de l''affichage en dixièmes de secondes.'+#13+
'Ne fonctionne qu''en mode de pilotage asynchrone.'+#13+
'Voir paramètres avancés / pilotage des accessoires.';
EditTempoSig.ShowHint:=true;
// décodeurs personalisés // décodeurs personalisés
for i:=1 to NbreDecPers do for i:=1 to NbreDecPers do
@@ -8612,7 +8646,7 @@ begin
EditVitRalenti.Hint:='Vitesse après l''avertissement'+#13+'en crans'; EditVitRalenti.Hint:='Vitesse après l''avertissement'+#13+'en crans';
EditVitNom.Hint:='Vitesse si voie libre'+#13+'en crans'; EditVitNom.Hint:='Vitesse si voie libre'+#13+'en crans';
EditVitesseMaxi.Hint:='Vitesse maximale autorisée par le décodeur'+#13+'en crans'; EditVitesseMaxi.Hint:='Vitesse maximale autorisée par le décodeur'+#13+'en crans';
i:=1; i:=1;
RichCdeDCCpp.clear; RichCdeDCCpp.clear;
repeat repeat
@@ -9257,6 +9291,7 @@ begin
if decodeur<>4 then RadioGroupLEB.Visible:=false; if decodeur<>4 then RadioGroupLEB.Visible:=false;
// plus tard !! if decodeur>=11 then ButtonConfigSR.Visible:=true; // plus tard !! if decodeur>=11 then ButtonConfigSR.Visible:=true;
editTempoSig.Text:=intToSTR(signaux[index].Tempo);
case d of case d of
2 : ComboBoxAsp.ItemIndex:=0; 2 : ComboBoxAsp.ItemIndex:=0;
@@ -10127,6 +10162,26 @@ begin
if affevt then Affiche('Evt ComboBox Decodeur',clOrange); if affevt then Affiche('Evt ComboBox Decodeur',clOrange);
end; end;
procedure TFormConfig.EditTempoSigChange(Sender: TObject);
var s : string;
i,erreur : integer;
begin
if clicliste or (ligneClicSig<0) then exit;
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditTempoSig.Text;
Val(s,i,erreur);
if (s='') or (erreur<>0) or (i<0) then begin LabelInfo.caption:='Erreur temporisation signal ';exit;end;
LabelInfo.caption:=' ';
Signaux[ligneClicSig+1].Tempo:=i;
s:=encode_signal(ligneClicSig+1);
ListBoxSig.Items[ligneClicSig]:=s;
Signaux[ligneClicSig+1].modifie:=true;
ListBoxSig.selected[ligneClicSig]:=true;
end;
end;
procedure TFormConfig.EditDet1Change(Sender: TObject); procedure TFormConfig.EditDet1Change(Sender: TObject);
var s : string; var s : string;
@@ -11209,6 +11264,7 @@ begin
Signaux[i].SR[8].sortie0:=19; Signaux[i].SR[8].sortie0:=19;
Signaux[i].SR[8].sortie1:=0; Signaux[i].SR[8].sortie1:=0;
Signaux[i].Na:=4; Signaux[i].Na:=4;
Signaux[i].Tempo:=0;
cree_image_signal(i); cree_image_signal(i);
s:=encode_signal(i); s:=encode_signal(i);
@@ -11301,12 +11357,13 @@ begin
Parent:=Formprinc.ScrollBoxSig; // dire que l'image est dans la scrollBox1 Parent:=Formprinc.ScrollBoxSig; // dire que l'image est dans la scrollBox1
Top:=(HtImg+espY+20)*((j-1) div NbreImagePLigne); // détermine les points d'origine Top:=(HtImg+espY+20)*((j-1) div NbreImagePLigne); // détermine les points d'origine
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
Name:='ImageSignal'+IntToSTR(Signaux[j].adresse); Name:='ImageSignal'+IntToSTR(j);
Maj_Hint_Signal(j); Maj_Hint_Signal(j);
end; end;
with Signaux[j].Lbl do with Signaux[j].Lbl do
begin begin
Name:='LabelSignal'+intToSTR(j);
Top:=HtImg+((HtImg+EspY+20)*((j-1) div NbreImagePLigne)); Top:=HtImg+((HtImg+EspY+20)*((j-1) div NbreImagePLigne));
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
caption:='@'+IntToSTR(Signaux[j].adresse); caption:='@'+IntToSTR(Signaux[j].adresse);
@@ -11314,7 +11371,7 @@ begin
if Signaux[j].checkFB<>nil then if Signaux[j].checkFB<>nil then
with Signaux[j].CheckFB do with Signaux[j].CheckFB do
begin begin
Name:='CheckBoxFB'+intToSTR(Signaux[j].adresse); Name:='CheckBoxFB'+intToSTR(j);
Hint:='Feu blanc'; Hint:='Feu blanc';
Top:=HtImg+15+((HtImg+EspY+20)*((j-1) div NbreImagePLigne)); Top:=HtImg+15+((HtImg+EspY+20)*((j-1) div NbreImagePLigne));
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
@@ -14433,20 +14490,10 @@ begin
VitNominale:=60; VitNominale:=60;
VitRalenti:=40; VitRalenti:=40;
vitmax:=120; vitmax:=120;
icone:=Timage.create(nil);
with icone do
begin
Name:='IconeTrain'+intToSTR(nTrains);
autosize:=true;
align:=alNone;
parent:=nil;
top:=0;left:=0;
width:=200;
height:=100;
end;
end; end;
clicListeTrains(ntrains); cree_icone_train(nTrains);
ligneclicTrain:=ntrains-1; ligneclicTrain:=ntrains-1;
clicListe:=false; clicListe:=false;
@@ -14463,7 +14510,8 @@ begin
perform(WM_VSCROLL,SB_BOTTOM,0); perform(WM_VSCROLL,SB_BOTTOM,0);
end; end;
cree_image_Train(ntrains); clicListeTrains(ntrains);
cree_image_onglet_Train(ntrains);
// ajoute le compteur // ajoute le compteur
cree_GB_compteur(ntrains); cree_GB_compteur(ntrains);
@@ -16550,9 +16598,6 @@ begin
if clicproprietesSig then clicListeSignal(IndexSignalClic); if clicproprietesSig then clicListeSignal(IndexSignalClic);
clicproprietesSig:=false; clicproprietesSig:=false;
if clicproprietesTrains then clicListeTrains(ligneclicTrain+1);
clicproprietesTrains:=false;
// aiguillages // aiguillages
ListBoxAig.Clear; ListBoxAig.Clear;
@@ -16584,6 +16629,8 @@ begin
clear; clear;
for i:=1 to ntrains do items.Add(encode_train(i)); for i:=1 to ntrains do items.Add(encode_train(i));
end; end;
if clicproprietesTrains then clicListeTrains(ligneclicTrain+1);
clicproprietesTrains:=false;
tsbouton:=FormConfig.PageControl.ActivePage=TabSheetBouton; tsbouton:=FormConfig.PageControl.ActivePage=TabSheetBouton;
@@ -19672,7 +19719,6 @@ begin
caption:=intToSTR(ValVitTrain[i]); caption:=intToSTR(ValVitTrain[i]);
end; end;
end; end;
procedure TFormConfig.LabeledEditVit1Change(Sender: TObject); procedure TFormConfig.LabeledEditVit1Change(Sender: TObject);
@@ -19742,10 +19788,6 @@ begin
calcul_equations_coeff(ligneclicTrain+1); calcul_equations_coeff(ligneclicTrain+1);
end; end;
end. end.
+17 -16
View File
@@ -32,6 +32,7 @@ object FormDebug: TFormDebug
Width = 872 Width = 872
Height = 677 Height = 677
HorzScrollBar.Visible = False HorzScrollBar.Visible = False
VertScrollBar.Position = 96
Anchors = [akLeft, akTop, akRight, akBottom] Anchors = [akLeft, akTop, akRight, akBottom]
Color = clBtnFace Color = clBtnFace
ParentColor = False ParentColor = False
@@ -41,7 +42,7 @@ object FormDebug: TFormDebug
673) 673)
object LabelTitreDebug: TLabel object LabelTitreDebug: TLabel
Left = 475 Left = 475
Top = 8 Top = -88
Width = 131 Width = 131
Height = 18 Height = 18
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -55,7 +56,7 @@ object FormDebug: TFormDebug
end end
object Label1: TLabel object Label1: TLabel
Left = 627 Left = 627
Top = 10 Top = -86
Width = 108 Width = 108
Height = 13 Height = 13
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -71,7 +72,7 @@ object FormDebug: TFormDebug
end end
object RichDebug: TRichEdit object RichDebug: TRichEdit
Left = 0 Left = 0
Top = 0 Top = -96
Width = 454 Width = 454
Height = 753 Height = 753
Anchors = [akLeft, akTop, akRight] Anchors = [akLeft, akTop, akRight]
@@ -85,7 +86,7 @@ object FormDebug: TFormDebug
end end
object ButtonRazTout: TButton object ButtonRazTout: TButton
Left = 465 Left = 465
Top = 216 Top = 120
Width = 97 Width = 97
Height = 25 Height = 25
Hint = Hint =
@@ -100,7 +101,7 @@ object FormDebug: TFormDebug
end end
object ButtonCop: TButton object ButtonCop: TButton
Left = 465 Left = 465
Top = 248 Top = 152
Width = 97 Width = 97
Height = 41 Height = 41
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -117,7 +118,7 @@ object FormDebug: TFormDebug
end end
object ButtonAffEvtChrono: TButton object ButtonAffEvtChrono: TButton
Left = 465 Left = 465
Top = 296 Top = 200
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -128,7 +129,7 @@ object FormDebug: TFormDebug
end end
object ButtonCherche: TButton object ButtonCherche: TButton
Left = 465 Left = 465
Top = 336 Top = 240
Width = 97 Width = 97
Height = 25 Height = 25
Hint = 'Cherche la cha'#238'ne "erreur"' Hint = 'Cherche la cha'#238'ne "erreur"'
@@ -141,7 +142,7 @@ object FormDebug: TFormDebug
end end
object ButtonEcrLog: TButton object ButtonEcrLog: TButton
Left = 465 Left = 465
Top = 184 Top = 88
Width = 97 Width = 97
Height = 29 Height = 29
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -151,7 +152,7 @@ object FormDebug: TFormDebug
end end
object ButtonRazTampon: TButton object ButtonRazTampon: TButton
Left = 465 Left = 465
Top = 368 Top = 272
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -162,7 +163,7 @@ object FormDebug: TFormDebug
end end
object ButtonRazLog: TButton object ButtonRazLog: TButton
Left = 465 Left = 465
Top = 408 Top = 312
Width = 97 Width = 97
Height = 33 Height = 33
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -173,7 +174,7 @@ object FormDebug: TFormDebug
end end
object MemoEvtDet: TRichEdit object MemoEvtDet: TRichEdit
Left = 570 Left = 570
Top = 186 Top = 90
Width = 272 Width = 272
Height = 263 Height = 263
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -184,7 +185,7 @@ object FormDebug: TFormDebug
end end
object GroupBox5: TGroupBox object GroupBox5: TGroupBox
Left = 462 Left = 462
Top = 456 Top = 360
Width = 380 Width = 380
Height = 57 Height = 57
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -251,7 +252,7 @@ object FormDebug: TFormDebug
end end
object GroupBox6: TGroupBox object GroupBox6: TGroupBox
Left = 462 Left = 462
Top = 520 Top = 424
Width = 380 Width = 380
Height = 52 Height = 52
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -328,7 +329,7 @@ object FormDebug: TFormDebug
end end
object GroupBoxPrim: TGroupBox object GroupBoxPrim: TGroupBox
Left = 464 Left = 464
Top = 584 Top = 488
Width = 378 Width = 378
Height = 185 Height = 185
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -499,7 +500,7 @@ object FormDebug: TFormDebug
end end
object GroupBox2: TGroupBox object GroupBox2: TGroupBox
Left = 466 Left = 466
Top = 28 Top = -68
Width = 376 Width = 376
Height = 149 Height = 149
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -712,7 +713,7 @@ object FormDebug: TFormDebug
end end
object EditNivDebug: TEdit object EditNivDebug: TEdit
Left = 751 Left = 751
Top = 8 Top = -88
Width = 49 Width = 49
Height = 21 Height = 21
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
+10 -10
View File
@@ -1,11 +1,11 @@
object FormPrinc: TFormPrinc object FormPrinc: TFormPrinc
Left = -8 Left = 330
Top = -8 Top = 216
Anchors = [akLeft, akTop, akRight] Anchors = [akLeft, akTop, akRight]
BorderStyle = bsNone BorderStyle = bsNone
Caption = 'Signaux complexes' Caption = 'Signaux complexes'
ClientHeight = 942 ClientHeight = 513
ClientWidth = 1280 ClientWidth = 915
Color = clBtnFace Color = clBtnFace
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText Font.Color = clWindowText
@@ -23,8 +23,8 @@ object FormPrinc: TFormPrinc
OnKeyDown = FormKeyDown OnKeyDown = FormKeyDown
OnResize = FormResize OnResize = FormResize
DesignSize = ( DesignSize = (
1280 915
942) 513)
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
object LabelTitre: TLabel object LabelTitre: TLabel
@@ -1432,7 +1432,7 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object LabelClock: TLabel object LabelClock: TLabel
Left = 1188 Left = 823
Top = 0 Top = 0
Width = 85 Width = 85
Height = 22 Height = 22
@@ -5443,8 +5443,8 @@ object FormPrinc: TFormPrinc
end end
object StatusBar1: TStatusBar object StatusBar1: TStatusBar
Left = 0 Left = 0
Top = 920 Top = 491
Width = 1280 Width = 915
Height = 22 Height = 22
Panels = < Panels = <
item item
@@ -5963,7 +5963,7 @@ object FormPrinc: TFormPrinc
Top = 200 Top = 200
Width = 393 Width = 393
Height = 265 Height = 265
ActivePage = TabSheetComp ActivePage = TabSheetSig
Anchors = [] Anchors = []
TabOrder = 5 TabOrder = 5
OnChange = PageControlChange OnChange = PageControlChange
+79 -357
View File
@@ -4,12 +4,14 @@ unit Unitprinc;
Programme signaux complexes Graphique Lenz Programme signaux complexes Graphique Lenz
Composants ClientSocket et ServeurSocket pour les connexions réseau socket Composants ClientSocket et ServeurSocket pour les connexions réseau socket
--------------------------------------------------------------
Delphi 7 : Delphi 7 :
on utilise activeX Tmscomm pour les liaisons série/USB on utilise activeX Tmscomm pour les liaisons série/USB
--------------------------------------------------------------
Delphi 12 : Delphi 12 :
Dans Outils / Options / Interface utilisateurs / Concerpteur de fiches / Haute résolution Dans Outils / Options / Interface utilisateurs / Concerpteur de fiches / Haute résolution
Sélextionner Automatique (PPI de l'écran) et cocher "taille de la grille..." Sélectionner Automatique (PPI de l'écran) et cocher "taille de la grille..."
on utilise AsyncPro pour les liaisons série/USB - ce composant est compilable en 32 et en 64 bits. on utilise AsyncPro pour les liaisons série/USB - ce composant est compilable en 32 et en 64 bits.
https://github.com/TurboPack/AsyncPro https://github.com/TurboPack/AsyncPro
@@ -28,8 +30,7 @@ unit Unitprinc;
LnsQueue.pas LnsQueue.pas
OoMisc.pas OoMisc.pas
un essai avec IdTCPClient (Indy) a été fait avec D7/D12. En D7 nécéssite le fichier Idtcpclient.dcu. -------------------------------------------------
En D12 l'event Rx nécessite un thread et ne fonctionne pas bien. C'est ok en D7.
Options de compilation D7: options du debugger/exception du langage : décocher "arreter sur exceptions delphi" Options de compilation D7: options du debugger/exception du langage : décocher "arreter sur exceptions delphi"
sinon une exception surgira au moment de l'ouverture du com sinon une exception surgira au moment de l'ouverture du com
@@ -91,8 +92,6 @@ unit Unitprinc;
//{$D-} // pas d'information de debuggage : pas de débug possible //{$D-} // pas d'information de debuggage : pas de débug possible
//{$L-} // pas d'information sur les symboles locaux //{$L-} // pas d'information sur les symboles locaux
{$DEFINE xAvecIdTCP} // le composant IdTCPClient n'a pas d'evt receive, il faut le traiter dans un thread
// il ne marche pas bien en version D12, l'évent RX provoque une violation au démarrage puis plus rien
interface interface
uses uses
@@ -103,10 +102,6 @@ uses
, psAPI // GetModuleFileNameEx , psAPI // GetModuleFileNameEx
{$IFDEF AvecIdTCP}
,IdTCPClient // client socket indy , ne marche pas bien
{$ENDIF}
{$IF CompilerVersion >= 28.0} // si delphi>=12 {$IF CompilerVersion >= 28.0} // si delphi>=12
,Vcl.Themes // pour les thèmes d'affichage (auric etc) ,Vcl.Themes // pour les thèmes d'affichage (auric etc)
,Vcl.Styles.Ext // styles étendus ,Vcl.Styles.Ext // styles étendus
@@ -476,105 +471,10 @@ type
{$IF CompilerVersion >= 28.0} {$IF CompilerVersion >= 28.0}
procedure DataReceived(const Data: TidBytes); procedure DataReceived(const Data: TidBytes);
{$ELSE} {$ELSE}
procedure DataReceived(const Data: string); // réception interface socket indy procedure DataReceived(const Data: string);
{$IFEND} {$IFEND}
end; end;
{$IFDEF AvecIdTCP}
{$IF CompilerVersion >= 28.0}
// thread interface socket Indy D12, pour créer event en réception
TDataEventInterface=procedure(const Data: TidBytes) of object;
TreadingThreadInterface=class(TThread)
private
FClient: TIdTCPClient;
Fdata : Tidbytes;
FOnData: TDataEventInterface;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventInterface read FOnData write FOnData;
procedure DataReceived;
end;
// thread périphérique1 D12 socket Indy
TDataEventPeriph1=procedure(const Data: TidBytes) of object;
TreadingThreadPeriph1=class(TThread)
private
FClient: TIdTCPClient;
Fdata : Tidbytes;
FOnData: TDataEventPeriph1;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventPeriph1 read FOnData write FOnData;
procedure DataReceived;
end;
// thread périphérique2 D12 socket Indy
TDataEventPeriph2=procedure(const Data: TidBytes) of object;
TreadingThreadPeriph2=class(TThread)
private
FClient: TIdTCPClient;
Fdata : Tidbytes;
FOnData: TDataEventPeriph2;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventPeriph2 read FOnData write FOnData;
procedure DataReceived;
end;
{$ELSE}
// Thread interface Indy D7
TDataEventInterface=procedure(const Data: string) of object;
TreadingThreadInterface=class(TThread)
private
FClient: TIdTCPClient;
FData: string;
FOnData: TDataEventInterface;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventInterface read FOnData write FOnData;
procedure DataReceived;
end;
// Thread périph1 Indy D7
TDataEventPeriph1=procedure(const Data: string) of object;
TreadingThreadPeriph1=class(TThread)
private
FClient: TIdTCPClient;
FData: string;
FOnData: TDataEventPeriph1;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventPeriph1 read FOnData write FOnData;
procedure DataReceived;
end;
// Thread périph2 Indy D7
TDataEventPeriph2=procedure(const Data: string) of object;
TreadingThreadPeriph2=class(TThread)
private
FClient: TIdTCPClient;
FData: string;
FOnData: TDataEventPeriph2;
protected
procedure Execute; override;
public
constructor Create(AClient: TIdTCPClient); reintroduce;
property OnData: TDataEventPeriph2 read FOnData write FOnData;
procedure DataReceived;
end;
{$IFEND}
{$ENDIF}
const const
titre='Signaux complexes GL '; titre='Signaux complexes GL ';
@@ -881,6 +781,7 @@ TSignal = record
end; end;
Na : integer; // nombre d'adresses du signal occupées par le décodeur CDF/SR/digikeijs/Belge Na : integer; // nombre d'adresses du signal occupées par le décodeur CDF/SR/digikeijs/Belge
DetAmont : TtabloDet; // tableau des détecteurs amonts, calculés à la lecture du fichier de config DetAmont : TtabloDet; // tableau des détecteurs amonts, calculés à la lecture du fichier de config
Tempo : integer; // temporisation de retard au pilotage en x100 ms
end; end;
TPeripherique = record TPeripherique = record
@@ -1059,7 +960,7 @@ tTrain = record
end; end;
Ttache = array[1..MaxTaches] of record Ttache = record
typeTache : integer ; // 0:rien - 1:accessoire 2:vitesse train 3:fonction F 4:tempo typeTache : integer ; // 0:rien - 1:accessoire 2:vitesse train 3:fonction F 4:tempo
traite : boolean; // traitement en cours traite : boolean; // traitement en cours
tempo : integer; // tempo avant exécution de la commande tempo : integer; // tempo avant exécution de la commande
@@ -1161,10 +1062,6 @@ var
end; end;
Adresse_detecteur : array[0..NbMaxDet] of integer; // adresses des détecteurs par index Adresse_detecteur : array[0..NbMaxDet] of integer; // adresses des détecteurs par index
{$IFDEF AvecIdTCP}
clientTCPInterface: tidtcpclient;
{$ENDIF}
Ecran : array[1..10] of record // écrans du pc Ecran : array[1..10] of record // écrans du pc
x0,y0,larg,haut : integer; x0,y0,larg,haut : integer;
end; end;
@@ -1174,7 +1071,7 @@ var
PortDistant,PortLocal : integer; PortDistant,PortLocal : integer;
end; end;
taches : Ttache; taches : array[1..MaxTaches] of Ttache;
Actionneur_trouve : array[1..10] of integer; Actionneur_trouve : array[1..10] of integer;
@@ -1359,12 +1256,6 @@ var
Aig_supprime,Aig_sauve : TAiguillage; Aig_supprime,Aig_sauve : TAiguillage;
BrancheN : array[1..MaxBranches,1..MaxElBranches] of TBranche; BrancheN : array[1..MaxBranches,1..MaxElBranches] of TBranche;
chaine_recue : TchaineBIN; chaine_recue : TchaineBIN;
{$IFDEF AvecIdTCP} //-----------composant Indy
ThreadInterface : TReadingThreadInterface;
ThreadPeriph1 : TReadingThreadPeriph1;
ThreadPeriph2 : TReadingThreadPeriph2;
ClientSocketIdInterface: tIdTCPClient;
{$ENDIF}
ClientSocketInterface: TClientSocket; ClientSocketInterface: TClientSocket;
ClientInfo : TclientSocket; ClientInfo : TclientSocket;
@@ -1409,7 +1300,7 @@ function verif_UniSemaf(adresse,UniSem : integer) : integer;
function verif_LEB(adresse,UniSem : integer) : integer; function verif_LEB(adresse,UniSem : integer) : integer;
function Select_dessin_Signal(TypeSignal : integer) : TBitmap; function Select_dessin_Signal(TypeSignal : integer) : TBitmap;
procedure cree_image_signal(rang : integer); procedure cree_image_signal(rang : integer);
procedure cree_image_Train(rang : integer); procedure cree_image_onglet_Train(rang : integer);
procedure trouve_aiguillage(adresse : integer); procedure trouve_aiguillage(adresse : integer);
procedure trouve_detecteur(detecteur : integer); procedure trouve_detecteur(detecteur : integer);
function ProcessRunning(sExeName: String) : Boolean; function ProcessRunning(sExeName: String) : Boolean;
@@ -1507,88 +1398,6 @@ uses UnitDebug, UnitPilote, UnitSimule, UnitTCO, UnitConfig,
UnitModifAction, selection_train, UnitRouteTrains, UnitRoute, UnitMesure, UnitModifAction, selection_train, UnitRouteTrains, UnitRoute, UnitMesure,
UnitCompteur; UnitCompteur;
{$IFDEF AvecIdTCP} //------ composant indy socket réseau
// création thread interface
constructor TReadingThreadInterface.Create(AClient: TIdTCPClient);
begin
inherited Create(True);
FClient:=AClient;
end;
procedure TReadingThreadInterface.Execute;
begin
while not Terminated do
begin
{$IF CompilerVersion >= 28.0}
Fclient.IOHandler.ReadBytes(Fdata,0,false);
if (FData <> nil) and Assigned(FOnData) then
{$ELSE}
FData := FClient.CurrentReadBuffer;
if (FData <> '') and Assigned(FOnData) then
{$IFEND}
Synchronize(DataReceived);
end;
end;
procedure TReadingThreadInterface.DataReceived;
begin
if Assigned(FOnData) then FOnData(FData);
end;
constructor TReadingThreadPeriph1.Create(AClient: TIdTCPClient);
begin
inherited Create(True);
FClient := AClient;
end;
// création thread périphérique1
procedure TReadingThreadPeriph1.DataReceived;
begin
if Assigned(FOnData) then FOnData(FData);
end;
procedure TReadingThreadPeriph1.Execute;
begin
while not Terminated do
begin
{$IF CompilerVersion >= 28.0}
Fclient.IOHandler.ReadBytes(Fdata,0,false);
if (FData <> nil) and Assigned(FOnData) then
{$ELSE}
FData:=FClient.CurrentReadBuffer;
if (FData <> '') and Assigned(FOnData) then
{$IFEND}
Synchronize(DataReceived);
end;
end;
// création thread périphérique2
procedure TReadingThreadPeriph2.DataReceived;
begin
if Assigned(FOnData) then FOnData(FData);
end;
constructor TReadingThreadPeriph2.Create(AClient: TIdTCPClient);
begin
inherited Create(True);
FClient := AClient;
end;
procedure TReadingThreadPeriph2.Execute;
begin
while not Terminated do
begin
{$IF CompilerVersion >= 28.0}
Fclient.IOHandler.ReadBytes(Fdata,0,false);
if (FData <> nil) and Assigned(FOnData) then
{$ELSE}
FData := FClient.CurrentReadBuffer;
if (FData <> '') and Assigned(FOnData) then
{$IFEND}
Synchronize(DataReceived);
end;
end;
{$ENDIF}
{ {
procedure menu_interface(MA : TMA); procedure menu_interface(MA : TMA);
@@ -2589,11 +2398,7 @@ begin
// par socket (ethernet) // par socket (ethernet)
if parSocketLenz or (etat_init_interface>=11) then if parSocketLenz or (etat_init_interface>=11) then
begin begin
{$IFDEF AvecIdTCP}
ClientSocketIdInterface.IoHandler.write(RawToBytes(z,l)); // RawToBytes() convertit n'importe quoi en TidBytes
{$ELSE}
ClientSocketInterface.Socket.SendBuf(z,l); ClientSocketInterface.Socket.SendBuf(z,l);
{$ENDIF}
if not modetache then sleep(30); if not modetache then sleep(30);
end; end;
end; end;
@@ -2688,11 +2493,7 @@ begin
// par socket (ethernet) // par socket (ethernet)
if parSocketLenz or (etat_init_interface>=11) then if parSocketLenz or (etat_init_interface>=11) then
begin begin
{$IFDEF AvecIdTCP}
ClientSocketIdInterface.Socket.Send(TrameIF[0],l);
{$ELSE}
ClientSocketInterface.Socket.SendBuf(TrameIF[0],l); ClientSocketInterface.Socket.SendBuf(TrameIF[0],l);
{$ENDIF}
if not modetache then Sleep(30); if not modetache then Sleep(30);
end; end;
end; end;
@@ -5389,7 +5190,7 @@ begin
Signaux[rang].Lbl:=Tlabel.create(Formprinc.ScrollBoxSig); Signaux[rang].Lbl:=Tlabel.create(Formprinc.ScrollBoxSig);
with Signaux[rang].Lbl do with Signaux[rang].Lbl do
begin begin
Name:='LabelSignal'+intToSTR(Signaux[rang].adresse); Name:='LabelSignal'+intToSTR(rang);
caption:=' '+IntToSTR(Signaux[rang].adresse); caption:=' '+IntToSTR(Signaux[rang].adresse);
font.Style:=[fsBold]; font.Style:=[fsBold];
Parent:=Formprinc.ScrollBoxSig; Parent:=Formprinc.ScrollBoxSig;
@@ -5409,7 +5210,7 @@ begin
begin begin
onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus onClick:=formprinc.proc_checkBoxFB; // affecter l'adresse de la procédure de traitement quand on clique dessus
Hint:='Feu blanc'; Hint:='Feu blanc';
Name:='CheckBoxFB'+intToSTR(adresse); // affecter l'adresse du feu pour pouvoir le retrouver dans la procédure Name:='CheckBoxFB'+intToSTR(rang); // affecter l'adresse du feu pour pouvoir le retrouver dans la procédure
caption:='dem FB'; caption:='dem FB';
font.color:=clBlack; font.color:=clBlack;
Parent:=Formprinc.ScrollBoxSig; Parent:=Formprinc.ScrollBoxSig;
@@ -5595,7 +5396,7 @@ end;
// cliqué train // cliqué train
procedure tFormprinc.ImageTrainonclick(Sender : tObject); procedure tFormprinc.ImageTrainonclick(Sender : tObject);
var P_component : tComponent; var P_component : tComponent;
i : integer; i : integer;
begin begin
//Affiche('clic image train',clred); //Affiche('clic image train',clred);
P_component:=sender as Tcomponent; P_component:=sender as Tcomponent;
@@ -5671,7 +5472,7 @@ end;
// créée une image dans l'onglet trains , 2 label dynamiquement dans la partie droite pour un nouveau train déclaré dans le fichier de config // créée une image dans l'onglet trains , 2 label dynamiquement dans la partie droite pour un nouveau train déclaré dans le fichier de config
// rang commence à 1 // rang commence à 1
procedure cree_image_Train(rang : integer); procedure cree_image_onglet_Train(rang : integer);
var i,adresse : integer; var i,adresse : integer;
s : string; s : string;
begin begin
@@ -5982,7 +5783,7 @@ begin
chaine_CDM_Acc:=so+s; chaine_CDM_Acc:=so+s;
end; end;
// met une tache en tableau taches[] pour le timer // ajoute une tache en tableau taches[] pour le timer
// ttache=1 : pilote accessoire... // ttache=1 : pilote accessoire...
// temporisation pour le timer avant action // temporisation pour le timer avant action
// destinataire (1=CDM 2=XpressNet 3=Dccpp) // destinataire (1=CDM 2=XpressNet 3=Dccpp)
@@ -10003,7 +9804,7 @@ begin
end end
else else
begin begin
s:='Impossible de déterminer le passage de l''aiguillage '+intToSTR(adr); s:='Erreur 841 : impossible de déterminer le passage de l''aiguillage '+intToSTR(adr);
if (nivDebug=3) or ProcPrinc then AfficheDebug(s,clred); if (nivDebug=3) or ProcPrinc then AfficheDebug(s,clred);
Affiche(s,clred); Affiche(s,clred);
result:=9999; result:=9999;
@@ -10124,7 +9925,7 @@ begin
// extrémité 1 530 // extrémité 1 530
if (aiguillage[index].ADroit=prec) and (aiguillage[index].ADroitB=Aprec) then if (aiguillage[index].ADroit=prec) and (aiguillage[index].ADroitB=Aprec) then
begin begin
if aiguillage[index].position=const_droit then if aiguillage[index].position=const_droit then
begin begin
adr:=aiguillage[index].Ddroit; adr:=aiguillage[index].Ddroit;
a:=aiguillage[index].DDroitB; a:=aiguillage[index].DDroitB;
@@ -10254,7 +10055,8 @@ begin
(aiguillage[index2].position=const_droit) ) then (aiguillage[index2].position=const_droit) ) then
begin begin
// d'où vient ton sur la tjs // d'où vient ton sur la tjs
if BtypePrec=Aig then // si on vient d'un aiguillage pas en pointe
if (BtypePrec=Aig) and (aiguillage[index].AdroitB<>'P') then
begin begin
if ( ((aiguillage[index].AdroitB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or if ( ((aiguillage[index].AdroitB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or
( ((aiguillage[index].AdroitB)='D') and (aiguillage[index_aig(prec)].position=const_droit) ) ( ((aiguillage[index].AdroitB)='D') and (aiguillage[index_aig(prec)].position=const_droit) )
@@ -10323,7 +10125,8 @@ begin
end; end;
// d'où vient ton sur la tjd // d'où vient ton sur la tjd
if BtypePrec=Aig then // si on vient d'un aiguillage pas en pointe
if (BtypePrec=Aig) and (aiguillage[index].AdroitB<>'P') then
begin begin
if ( ((aiguillage[index].AdroitB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or if ( ((aiguillage[index].AdroitB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or
( ((aiguillage[index].AdroitB)='D') and (aiguillage[index_aig(prec)].position=const_droit) ) ( ((aiguillage[index].AdroitB)='D') and (aiguillage[index_aig(prec)].position=const_droit) )
@@ -10403,7 +10206,8 @@ begin
exit; exit;
end; end;
// d'où vient t-on sur la tjd // d'où vient t-on sur la tjd
if BtypePrec=Aig then // si on vient d'un aiguillage pas en pointe
if (BtypePrec=Aig) and (aiguillage[index].AdevieB<>'P') then
begin begin
if ( ((aiguillage[index].AdevieB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or if ( ((aiguillage[index].AdevieB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or
( ((aiguillage[index].AdevieB)='D') and (aiguillage[index_aig(prec)].position=const_droit) ) ( ((aiguillage[index].AdevieB)='D') and (aiguillage[index_aig(prec)].position=const_droit) )
@@ -10478,7 +10282,7 @@ begin
and (aiguillage[index2].position=const_devie) then and (aiguillage[index2].position=const_devie) then
begin begin
// d'où vient ton sur la tjd // d'où vient ton sur la tjd
if BtypePrec=Aig then if (BtypePrec=Aig) and (aiguillage[index].AdevieB<>'P') then
begin begin
if ( ((aiguillage[index].AdevieB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or if ( ((aiguillage[index].AdevieB)='S') and (aiguillage[index_aig(prec)].position=const_devie) ) or
( ((aiguillage[index].AdevieB)='D') and (aiguillage[index_aig(prec)].position=const_droit) ) ( ((aiguillage[index].AdevieB)='D') and (aiguillage[index_aig(prec)].position=const_droit) )
@@ -11876,6 +11680,7 @@ begin
// trouver éléments avant le signal // trouver éléments avant le signal
for i:=1 to MaxParcours do tabloDet[i]:=0; for i:=1 to MaxParcours do tabloDet[i]:=0;
i:=index_signal(adresse); i:=index_signal(adresse);
if isDirectionnel(i) then exit;
if i=0 then if i=0 then
begin begin
affiche('Erreur 842 : signal '+intToSTR(adresse)+' inconnu',clred); affiche('Erreur 842 : signal '+intToSTR(adresse)+' inconnu',clred);
@@ -11893,6 +11698,10 @@ begin
tq2:=det; tq2:=det;
el1:=Signaux[i].Adr_el_suiv1; el1:=Signaux[i].Adr_el_suiv1;
tq1:=Signaux[i].Btype_suiv1; tq1:=Signaux[i].Btype_suiv1;
if el1=0 then
begin
Affiche('Erreur le signal '+intToSTR(adresse)+' ne comporte pas d''élément suivant',clred);
end;
end; end;
2 : begin 2 : begin
el2:=Signaux[i].Adr_det2; el2:=Signaux[i].Adr_det2;
@@ -11914,6 +11723,7 @@ begin
end; end;
end; end;
if el2<>0 then if el2<>0 then
begin begin
it:=0; it:=0;
@@ -12729,7 +12539,7 @@ begin
sort:=false; sort:=false;
repeat repeat
inc(j); inc(j);
AdrSuiv:=suivant_alg3(prec,typeElPrec,actuel,typeELActuel,2); // arret sur aiguille en talon mal positionéne AdrSuiv:=suivant_alg3(prec,typeElPrec,actuel,typeELActuel,2); // arret sur aiguille en talon mal positionnée
if (AdrSuiv=9999) or (AdrSuiv=9996) or (AdrSuiv=9995) then // élément non trouvé ou position aiguillage inconnu ou buttoir if (AdrSuiv=9999) or (AdrSuiv=9996) or (AdrSuiv=9995) then // élément non trouvé ou position aiguillage inconnu ou buttoir
begin; begin;
@@ -14020,7 +13830,7 @@ begin
if AdrSuiv=0 then if AdrSuiv=0 then
begin begin
EtatDet:=Detecteur[actuel].etat and detect; EtatDet:=Detecteur[actuel].etat and detect;
Pres_Train:=Pres_Train or etatDet; Pres_Train:=Pres_Train or etatDet; // contrôle si détecteur à 1 et si mode détecteur
if Pres_Train and (adrTr=0) then if Pres_Train and (adrTr=0) then
begin begin
if roulage then AdrTr:=Detecteur[actuel].AdrTrain; if roulage then AdrTr:=Detecteur[actuel].AdrTrain;
@@ -18057,7 +17867,14 @@ var s: string;
faire_event,inv,bjd,rf : boolean; faire_event,inv,bjd,rf : boolean;
prov,index,i,id,etatact,typ,adr : integer; prov,index,i,id,etatact,typ,adr : integer;
begin begin
if AffAigDet then Affiche('Tick='+IntToSTR(tick)+' Event Aig '+intToSTR(adresse)+'='+intToSTR(pos),clorange); if AffAigDet then
begin
s:='Tick='+IntToSTR(tick)+' Event Aig '+intToSTR(adresse)+'='+intToSTR(pos);
if pos=const_droit then s:=s+' [droit]';
if pos=const_devie then s:=s+' [dévié]';
Affiche(s,clorange);
end;
index:=index_aig(adresse); index:=index_aig(adresse);
if index<>0 then if index<>0 then
begin begin
@@ -18245,7 +18062,7 @@ end;
// pilote accessoire sous condition, version taches par le timer // pilote accessoire sous condition, version taches par le timer
function pilote_acc_sc_taches(adresse : integer;octet : byte;Acc : TAccessoire;adrTrain : integer) : boolean; function pilote_acc_sc_taches(adresse : integer;octet : byte;Acc : TAccessoire;adrTrain : integer) : boolean;
var groupe,temp,indexAig,AdrTrainLoc : integer ; var groupe,temp,index,AdrTrainLoc : integer ;
fonction,pilotage,pilotageCDM : byte; fonction,pilotage,pilotageCDM : byte;
s : string; s : string;
begin begin
@@ -18256,20 +18073,21 @@ begin
exit; exit;
end; end;
pilotage:=octet; pilotage:=octet;
indexAig:=index_aig(adresse); if Acc=aigP then index:=index_aig(adresse);
if acc=Signal then Index:=Index_Signal(adresse);
// test si pilotage aiguillage inversé // test si pilotage aiguillage inversé
if (acc=aigP) then if (acc=aigP) then
begin begin
if indexAig<>0 then if index<>0 then
begin begin
AdrTrainLoc:=aiguillage[indexAig].AdrTrain; AdrTrainLoc:=aiguillage[index].AdrTrain;
if (AdrTrainLoc<>0) and (AdrTrain<>0) and (AdrTrainLoc<>AdrTrain) then if (AdrTrainLoc<>0) and (AdrTrain<>0) and (AdrTrainLoc<>AdrTrain) then
begin begin
Affiche('Pilotage impossible, l''aiguillage '+intToSTR(adresse)+' est réservé par le train @'+intToSTR(AdrTrainLoc),clred); Affiche('Pilotage impossible, l''aiguillage '+intToSTR(adresse)+' est réservé par le train @'+intToSTR(AdrTrainLoc),clred);
Result:=false; Result:=false;
exit; exit;
end; end;
if (aiguillage[indexAig].inversionCDM=1) then if (aiguillage[index].inversionCDM=1) then
begin begin
if octet=1 then pilotage:=2 else pilotage:=1; if octet=1 then pilotage:=2 else pilotage:=1;
end; end;
@@ -18287,13 +18105,13 @@ begin
s:=chaine_CDM_Acc(adresse,pilotageCDM); s:=chaine_CDM_Acc(adresse,pilotageCDM);
// pilotage actif de l'accessoire---------------- // pilotage actif de l'accessoire----------------
tache(ttacheAcc,0,ttDestCDM,s); // TypeTache,tempo,destinataire,chaine if acc<>signal then tache(ttacheAcc,0,ttDestCDM,s) // TypeTache,tempo,destinataire,chaine
else tache(ttacheAcc,signaux[index].Tempo,ttDestCDM,s);
// si l'accessoire est un signal et sans raz des signaux, sortir // si l'accessoire est un signal et sans raz des signaux, sortir
if (acc=signal) and not(Raz_Acc_signaux) then exit; if (acc=signal) and not(Raz_Acc_signaux) then exit;
if Acc=AigP then if Acc=AigP then
begin begin
temp:=aiguillage[indexAig].temps;if temp=0 then temp:=4; // mini pour pilotage en signaux LEB temp:=aiguillage[index].temps;if temp=0 then temp:=4; // mini pour pilotage en signaux LEB
end; end;
// remise à 0 -------------- // remise à 0 --------------
@@ -18301,7 +18119,7 @@ begin
tache(ttacheAcc,temp,ttDestCDM,s); // TypeTache,tempo,destinataire,chaine tache(ttacheAcc,temp,ttDestCDM,s); // TypeTache,tempo,destinataire,chaine
// si l'accessoire est un aiguillage, temporiser suivant variable de séquenceent // si l'accessoire est un aiguillage, temporiser suivant variable de séquenceent
if indexaig<>0 then tache(ttacheTempo,tempo_Aig div 100,0,''); if index<>0 then tache(ttacheTempo,tempo_Aig div 100,0,'');
result:=true; result:=true;
end; end;
@@ -18328,7 +18146,9 @@ begin
if debug_dec_sig and (acc=signal) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange); if debug_dec_sig and (acc=signal) then AfficheDebug('Tick='+IntToSTR(Tick)+' signal '+intToSTR(adresse)+' '+intToSTR(pilotage),clorange);
//if avecAck then envoi(s) else envoi_ss_ack(s); // envoi de la trame avec/sans attente Ack //if avecAck then envoi(s) else envoi_ss_ack(s); // envoi de la trame avec/sans attente Ack
tache(ttacheAcc,0,ttDestXpressNet,s); // TypeTache,tempo,destinataire,chaine
if acc<>signal then tache(ttacheAcc,0,ttDestXpressNet,s)
else tache(ttacheAcc,signaux[index].Tempo,ttDestCDM,s);
// si l'accessoire est un signal et sans raz des signaux, sortir // si l'accessoire est un signal et sans raz des signaux, sortir
if (acc=signal) and not(Raz_Acc_signaux) then exit; if (acc=signal) and not(Raz_Acc_signaux) then exit;
@@ -18336,7 +18156,7 @@ begin
// si aiguillage, faire une temporisation // si aiguillage, faire une temporisation
if Acc=AigP then if Acc=AigP then
begin begin
temp:=aiguillage[indexAig].temps;if temp=0 then temp:=4; temp:=aiguillage[index].temps;if temp=0 then temp:=4;
end; end;
// pilotage à 0 pour éteindre le pilotage de la bobine du relais // pilotage à 0 pour éteindre le pilotage de la bobine du relais
@@ -18346,7 +18166,7 @@ begin
//if avecAck then envoi(s) else envoi_ss_ack(s); // envoi de la trame avec ou sans Ack //if avecAck then envoi(s) else envoi_ss_ack(s); // envoi de la trame avec ou sans Ack
tache(ttacheAcc,temp,ttDestXpressNet,s); tache(ttacheAcc,temp,ttDestXpressNet,s);
if indexAig<>0 then tache(ttacheTempo,tempo_Aig div 100,0,''); if index<>0 then tache(ttacheTempo,tempo_Aig div 100,0,'');
//affiche('5.'+intToSTR(tick),clyellow); //affiche('5.'+intToSTR(tick),clyellow);
result:=true; result:=true;
@@ -18370,7 +18190,7 @@ begin
end; end;
end; end;
if indexAig<>0 then event_aig(adresse,octet) if index<>0 then event_aig(adresse,octet)
else else
// Serveur envoi au clients // Serveur envoi au clients
Envoi_serveur('T'+intToSTR(adresse)+','+intToSTR(octet)); Envoi_serveur('T'+intToSTR(adresse)+','+intToSTR(octet));
@@ -18519,7 +18339,7 @@ end;
// Résultat true si ok // Résultat true si ok
function pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire): boolean; overload; function pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire): boolean; overload;
begin begin
if ModeTache then pilote_acc_sc_taches(adresse,octet,Acc,9999) else if ModeTache then pilote_acc_sc_taches(adresse,octet,Acc,9999) else
pilote_acc_sc(adresse,octet,Acc,9999); pilote_acc_sc(adresse,octet,Acc,9999);
end; end;
@@ -19635,69 +19455,12 @@ begin
begin begin
etat_init_interface:=10; etat_init_interface:=10;
Affiche('Demande ouverture interface par Ethernet '+AdresseIP+':'+intToSTR(portinterface),clyellow); Affiche('Demande ouverture interface par Ethernet '+AdresseIP+':'+intToSTR(portinterface),clyellow);
{$IFDEF AvecIdTCP}
with ClientSocketIdInterface do
{$ELSE}
with ClientSocketInterface do with ClientSocketInterface do
{$ENDIF}
begin begin
{$IFDEF AvecIdTCP}
port:=portInterface; // composant Indy
//ClientSocketInterface.
host:=AdresseIP;
try
{$IF CompilerVersion >= 28.0} // si delphi>=12
ConnectTimeOut:=1000;
connect;
{$ELSE}
connect(1000);
{$IFEND}
except
on e : exception do
begin
Affiche(e.message+' socket interface '+AdresseIP,clred);
exit;
end;
end;
Affiche('Socket interface connecté ',clYellow);
AfficheDebug('Socket interface connecté ',clYellow);
with formprinc do
begin
ButtonEcrCV.Enabled:=true;
ButtonLitCV.Enabled:=true;
LireunfichierdeCV1.enabled:=true;
LabelTitre.caption:=titre+' Interface connectée par Ethernet';
Formprinc.StatusBar1.Panels[4].Text:=AdresseIP;
etat_init_interface:=11;
trouve:=test_protocole; // appelle l'état des détecteurs
end;
if not trouve then
begin
Affiche('Socket connecté mais centrale muette',clred);
disconnect;
etat_init_interface:=0;
exit;
end;
if protocole=1 then
begin
etat_init_interface:=20; // interface protocole reconnue
parSocketLenz:=true;
end;
if (protocole=2) then
begin
init_dccpp;
etat_init_interface:=20;
end;
// interface ethernet connectée, faire les init
init_aig_det;
{$ELSE}
port:=portInterface; port:=portInterface;
Address:=AdresseIP; // ne pas mettre active et open en même temps, ca génère 2 evt onConnect et initialise les aig 2 fois. Address:=AdresseIP; // ne pas mettre active et open en même temps, ca génère 2 evt onConnect et initialise les aig 2 fois.
Open; Open;
{$ENDIF}
end; end;
//Application.processMessages; //Application.processMessages;
end; end;
@@ -20947,7 +20710,6 @@ begin
end; end;
end; end;
// Event socket interface par indy
{$IF CompilerVersion >= 28.0} {$IF CompilerVersion >= 28.0}
procedure TFormPrinc.DataReceived(const Data: TidBytes); procedure TFormPrinc.DataReceived(const Data: TidBytes);
var i,l,j,lo : integer; var i,l,j,lo : integer;
@@ -21329,25 +21091,12 @@ begin
end; end;
if MsCommCde2<>nil then MSCommCde2.onTriggerAvail:=RecuPeriph2; if MsCommCde2<>nil then MSCommCde2.onTriggerAvail:=RecuPeriph2;
{$IFDEF AvecIdTCP}
// composant Indy Interface réseausocket en D12 : ne marche pas bien
ClientSocketIdInterface:=TIdTCPClient.Create(self);
try
ThreadInterface:=TReadingThreadInterface.Create(ClientSocketIdInterface);
ThreadInterface.OnData:=DataReceived ;
ThreadInterface.Resume;
except
ClientSocketIdInterface.Disconnect;
raise;
end;
{$ELSE}
// composant TclientSocket // composant TclientSocket
ClientSocketInterface:=tClientSocket.Create(nil); ClientSocketInterface:=tClientSocket.Create(nil);
ClientSocketInterface.OnRead:=ClientSocketInterfaceRead; ClientSocketInterface.OnRead:=ClientSocketInterfaceRead;
ClientSocketInterface.onConnect:=ClientSocketInterfaceConnect; ClientSocketInterface.onConnect:=ClientSocketInterfaceConnect;
ClientSocketInterface.OnDisconnect:=ClientSocketInterfaceDisconnect; ClientSocketInterface.OnDisconnect:=ClientSocketInterfaceDisconnect;
ClientSocketInterface.OnError:=ClientSocketInterfaceError; ClientSocketInterface.OnError:=ClientSocketInterfaceError;
{$ENDIF}
{$ELSE} {$ELSE}
// D7 // D7
@@ -21366,26 +21115,12 @@ begin
Affiche(s,clred); Affiche(s,clred);
end; end;
{$IFDEF AvecIdTCP}
// D7 composant Indy Interface réseausocket
ClientSocketIdInterface:=TIdTCPClient.Create(self);
try
ThreadInterface:=TReadingThreadInterface.Create(ClientSocketIdInterface);
ThreadInterface.OnData:=DataReceived ;
ThreadInterface.Resume;
except
ClientSocketIdInterface.Disconnect;
raise;
end;
{$ELSE}
// composant TclientSocket // composant TclientSocket
ClientSocketInterface:=tClientSocket.Create(nil); ClientSocketInterface:=tClientSocket.Create(nil);
ClientSocketInterface.OnRead:=ClientSocketInterfaceRead; ClientSocketInterface.OnRead:=ClientSocketInterfaceRead;
ClientSocketInterface.onConnect:=ClientSocketInterfaceConnect; ClientSocketInterface.onConnect:=ClientSocketInterfaceConnect;
ClientSocketInterface.OnDisconnect:=ClientSocketInterfaceDisconnect; ClientSocketInterface.OnDisconnect:=ClientSocketInterfaceDisconnect;
ClientSocketInterface.OnError:=ClientSocketInterfaceError; ClientSocketInterface.OnError:=ClientSocketInterfaceError;
{$ENDIF}
// interface centrale - provoque l'apparition de la fenêtre "préparation de l'installation" // interface centrale - provoque l'apparition de la fenêtre "préparation de l'installation"
try MSCommUSBInterface:=TMSComm.Create(formprinc); try MSCommUSBInterface:=TMSComm.Create(formprinc);
@@ -21930,12 +21665,7 @@ begin
end; end;
ServerSocket.Close; ServerSocket.Close;
ClientSocketCDM.close; ClientSocketCDM.close;
{$IFDEF AvecIdTCP}
ClientSocketIdInterface.Disconnect;
ClientSocketIdInterface.Free;
{$ELSE}
ClientSocketInterface.close; ClientSocketInterface.close;
{$ENDIF}
clientInfo.Close; clientInfo.Close;
end; end;
@@ -21988,7 +21718,7 @@ begin
vitesse:=grilleHoraire[i].vitesse; vitesse:=grilleHoraire[i].vitesse;
if not(grilleHoraire[i].sens) then vitesse:=-vitesse; if not(grilleHoraire[i].sens) then vitesse:=-vitesse;
Affiche('Démarrage train '+train+' à l''horaire '+format('%.2dh%.2d',[heure,minute]),clyellow); Affiche('Démarrage train '+train+' à l''horaire '+format('%.2dh%.2d',[heure,minute]),clyellow);
// &&& voir pour la couleur // voir pour la couleur
FormFicheHoraire.StringGridFO.Cells[1,i]:=GrilleHoraire[i].NomTrain; FormFicheHoraire.StringGridFO.Cells[1,i]:=GrilleHoraire[i].NomTrain;
Demarre_index_train(indextrain); Demarre_index_train(indextrain);
@@ -22082,7 +21812,7 @@ begin
// si tempo non nulle de fin d'accessoire // si tempo non nulle de fin d'accessoire
if (typeTache=ttacheAcc) and (tempo<>0) then if (typeTache=ttacheAcc) and (tempo<>0) then
begin begin
if affe then Affiche('dec tempo ',clLime); if affe then Affiche('dec tempo='+intToSTR(tempo),clLime);
dec(tempo); dec(tempo);
exit; // ne rien faire d'autre dans ce tour timer exit; // ne rien faire d'autre dans ce tour timer
end end
@@ -22295,17 +22025,7 @@ begin
if TpsTimeoutSL<=0 then if TpsTimeoutSL<=0 then
begin begin
TpsTimeoutSL:=450; // envoyer caractère toutes les 45 secondes TpsTimeoutSL:=450; // envoyer caractère toutes les 45 secondes
// indy
{$IFDEF AvecIdTCP}
s:=' ';
{$IF CompilerVersion >= 28.0}
ClientSocketIdInterface.IoHandler.write(RawToBytes(s,1),1);
{$ELSE}
ClientSocketIdInterface.Socket.Send(s,1)
{$IFEND}
{$ELSE}
ClientSocketInterface.Socket.SendText(' '); ClientSocketInterface.Socket.SendText(' ');
{$ENDIF}
end; end;
end; end;
@@ -22945,11 +22665,7 @@ begin
portCommOuvert:=false; portCommOuvert:=false;
with formprinc do with formprinc do
begin begin
{$IFDEF AvecIdTCP}
ClientSocketIdInterface.Disconnect;
{$ELSE}
ClientSocketInterface.close; ClientSocketInterface.close;
{$ENDIF}
MenuConnecterUSB.enabled:=true; MenuConnecterUSB.enabled:=true;
DeConnecterUSB.enabled:=false; DeConnecterUSB.enabled:=false;
ConnecterCDMRail.enabled:=true; ConnecterCDMRail.enabled:=true;
@@ -23008,11 +22724,7 @@ end;
procedure deconnecte_interfaceEth; procedure deconnecte_interfaceEth;
begin begin
{$IFDEF AvecIdTCP}
ClientSocketIdInterface.disconnect;
{$ELSE}
ClientSocketInterface.Close; ClientSocketInterface.Close;
{$ENDIF}
end; end;
procedure TFormPrinc.MenuConnecterEthernetClick(Sender: TObject); procedure TFormPrinc.MenuConnecterEthernetClick(Sender: TObject);
@@ -23221,9 +22933,7 @@ begin
// interface ethernet connectée, faire les init // interface ethernet connectée, faire les init
init_aig_det; init_aig_det;
end; end;
{$IFNDEF AvecIdTCP}
if not(trouve) then ClientSocketInterface.Close; if not(trouve) then ClientSocketInterface.Close;
{$ENDIF}
end; end;
// CDM rail se connecte // CDM rail se connecte
@@ -23303,9 +23013,7 @@ begin
if pos('ACK',trame_cdm)<>0 then Ack_cdm:=true; if pos('ACK',trame_cdm)<>0 then Ack_cdm:=true;
if (pos('DSCTRN-__END',trame_cdm)<>0) and (ntrains_CDM<>0) then if (pos('DSCTRN-__END',trame_cdm)<>0) and (ntrains_CDM<>0) then
begin begin
//fin de la description des trains // fin de la description des trains
FormPrinc.ComboTrains.Items.Clear;
// on remplace les trains du combo et de la base (non stockée) // on remplace les trains du combo et de la base (non stockée)
// dans la même adresse que l'existante // dans la même adresse que l'existante
// ne pas écraser j // ne pas écraser j
@@ -23316,7 +23024,7 @@ begin
trouve:=trains[l].adresse=trains_cdm[i].adresse; trouve:=trains[l].adresse=trains_cdm[i].adresse;
if trouve then // si l'adresse du train CDM est déja existante on copie le train CDM dans le train SC if trouve then // si l'adresse du train CDM est déja existante on copie le train CDM dans le train SC
begin begin
//affiche('train '+intToSTR(trains_cdm[i].adresse)+' trouvé dans l''existant',clLime); //affiche('train '+intToSTR(trains_cdm[i].adresse)+' trouvé dans l''existant index '+intToSTR(i),clLime);
Formprinc.ComboTrains.Items.Add(trains_cdm[i].nom_train); Formprinc.ComboTrains.Items.Add(trains_cdm[i].nom_train);
Trains[l].nom_train:=trains_cdm[i].nom_train; Trains[l].nom_train:=trains_cdm[i].nom_train;
Trains[l].adresse:=Trains_cdm[i].adresse; Trains[l].adresse:=Trains_cdm[i].adresse;
@@ -23325,17 +23033,20 @@ begin
inc(l); inc(l);
until (l>ntrains) or trouve; until (l>ntrains) or trouve;
if not(trouve) then // si pas trouvé le train dans SC, on créée le train if not(trouve) then // si pas trouvé l'adresse du train dans SC, on créée le train
begin begin
inc(ntrains); inc(ntrains);
//affiche('train '+intToSTR(trains_cdm[i].adresse)+' créé',clLime); affiche('Train @'+intToSTR(trains_cdm[i].adresse)+' '+trains_cdm[i].nom_train+' importé de CDM à l''index '+intToSTR(nTrains),clLime);
Trains[ntrains].nom_train:=trains_cdm[i].nom_train; Trains[ntrains].nom_train:=trains_cdm[i].nom_train;
Trains[ntrains].adresse:=Trains_cdm[i].adresse; Trains[ntrains].adresse:=Trains_cdm[i].adresse;
Trains[ntrains].vitmax:=Trains_cdm[i].vitmax; Trains[ntrains].vitmax:=Trains_cdm[i].vitmax;
FormPrinc.ComboTrains.Items.Add(trains_cdm[i].nom_train); cree_icone_train(ntrains);
//cree_GB_compteur(ntrains); cree_image_onglet_Train(ntrains);
end; end;
end; end;
// remplir la combobox
FormPrinc.ComboTrains.Items.Clear;
for i:=1 to ntrains do FormPrinc.ComboTrains.Items.Add(trains[i].nom_train);
// vérifier si pas doublon adresse train // vérifier si pas doublon adresse train
verif_trains; verif_trains;
@@ -28110,9 +27821,10 @@ end;
procedure TFormPrinc.FormKeyDown(Sender: TObject; var Key: Word; procedure TFormPrinc.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
var i,d : integer;
begin begin
if (PageControl.ActivePage<>TabSheettrains) or (TempoCombo>0) or (ComboTrains.Focused) or clicComboTrain then exit; if (PageControl.ActivePage<>TabSheettrains) or (TempoCombo>0) or (ComboTrains.Focused) or clicComboTrain then exit;
//Affiche('FormKeyDown',clyellow); //Affiche('FormKeyDown '+intToSTR(key),clyellow);
if (key=vk_down) and (IdTrainClic<NTrains) then if (key=vk_down) and (IdTrainClic<NTrains) then
begin begin
Maj_icone_train(Image_Train[IdTrainClic],IdTrainClic,clWhite); Maj_icone_train(Image_Train[IdTrainClic],IdTrainClic,clWhite);
@@ -28123,6 +27835,11 @@ begin
//affiche_train_compteur; //affiche_train_compteur;
affiche_train_compteur(1); affiche_train_compteur(1);
aiguille_compteur(1,idTrainClic,formCompteur[1]); aiguille_compteur(1,idTrainClic,formCompteur[1]);
i:=scrollBoxTrains.VertScrollBar.Position;
d:=(IdTrainClic)*Image_Train[IdTrainClic].height;
if d>i+ScrollBoxTrains.Height then scrollBoxTrains.VertScrollBar.Position:=(idTrainClic-(ScrollBoxTrains.Height div Image_Train[IdTrainClic].height))*Image_Train[IdTrainClic].height;
key:=0; key:=0;
end; end;
if (key=vk_up) and (IdTrainClic>1) then if (key=vk_up) and (IdTrainClic>1) then
@@ -28135,6 +27852,11 @@ begin
//affiche_train_compteur; //affiche_train_compteur;
affiche_train_compteur(1); affiche_train_compteur(1);
aiguille_compteur(1,idTrainClic,formCompteur[1]); aiguille_compteur(1,idTrainClic,formCompteur[1]);
i:=scrollBoxTrains.VertScrollBar.Position;
d:=(IdTrainClic)*Image_Train[IdTrainClic].height;
if d<=i then scrollBoxTrains.VertScrollBar.Position:=(idTrainClic-(ScrollBoxTrains.Height div Image_Train[IdTrainClic].height))*Image_Train[IdTrainClic].height;
key:=0; key:=0;
end; end;
end; end;
+47 -16
View File
@@ -833,9 +833,13 @@ begin
repeat repeat
eLc1:=canton[i].el1; teLc1:=canton[i].typ1; eLc1:=canton[i].el1; teLc1:=canton[i].typ1;
eLc2:=canton[i].el2; teLc2:=canton[i].typ2; eLc2:=canton[i].el2; teLc2:=canton[i].typ2;
// ******** modif du 20/09/2025
trouve:=((elc1=el1) and (teLc1=tel1) and (elc2=el2) and (teLc2=tel2)) or // il faut que les deux éléments soient présents
((elc2=el1) and (teLc2=tel1) and (elc1=el2) and (teLc1=tel2)) ; {trouve:=((elc1=el1) and (teLc1=tel1) and (elc2=el2) and (teLc2=tel2)) or
((elc2=el1) and (teLc2=tel1) and (elc1=el2) and (teLc1=tel2)) ; }
// il faut l'un des deux éléments présents
trouve:=( ((elc1=el1) and (teLc1=tel1)) or ((elc2=el2) and (teLc2=tel2)) ) or
( ((elc2=el1) and (teLc2=tel1)) or ((elc1=el2) and (teLc1=tel2)) ) ;
inc(i); inc(i);
until (trouve) or (i>nCantons); until (trouve) or (i>nCantons);
if trouve then result:=i-1; if trouve then result:=i-1;
@@ -6261,7 +6265,7 @@ begin
Pen.Width:=1; Pen.Width:=1;
Brush.Color:=clvoies[indexTCO]; Brush.Color:=clvoies[indexTCO];
pen.color:=clvoies[indexTCO]; pen.color:=clvoies[indexTCO];
horizontale; horizontale;
diagonale; diagonale;
@@ -6375,8 +6379,13 @@ begin
position1:=aiguillage[index1].position; position1:=aiguillage[index1].position;
sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG; sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG;
sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD; sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD;
canvas.pen.color:=clfond[indexTCO];
canvas.pen.Width:=epaisseur div 2; with canvas do
begin
pen.color:=fond;
Brush.Color:=fond;
pen.Width:=epaisseur div 2;
end;
if etatTJD=4 then if etatTJD=4 then
begin begin
adr2:=aiguillage[index1].DDevie; // homologue adr2:=aiguillage[index1].DDevie; // homologue
@@ -6425,7 +6434,7 @@ begin
end; end;
end; end;
end; end;
if etatTJD=2 then if etatTJD=2 then
begin begin
if position1=const_droit then if position1=const_droit then
@@ -6481,6 +6490,8 @@ var pont,yp,x1,y1,x2,y2,x3,y3,x4,y4,x0,y0,xc,yc,xf,yf,trajet,ep,position1,positi
end; end;
end; end;
// si dessin=1 dessine en épaisseur de voie
// si dessin=2 dessine en épaisseur de trajet
procedure TJDbas(dessin :integer); // morceau courbe bas procedure TJDbas(dessin :integer); // morceau courbe bas
begin begin
x1:=x0-LargeurCell[indexTCO]-(LargeurCell[indexTCO] div 3);y1:=yc; x1:=x0-LargeurCell[indexTCO]-(LargeurCell[indexTCO] div 3);y1:=yc;
@@ -6547,6 +6558,7 @@ begin
Brush.Color:=clvoies[indexTCO]; Brush.Color:=clvoies[indexTCO];
pen.color:=clvoies[indexTCO]; pen.color:=clvoies[indexTCO];
pen.width:=epaisseur; pen.width:=epaisseur;
diagonale; diagonale;
@@ -6651,14 +6663,19 @@ begin
position1:=aiguillage[index1].position; position1:=aiguillage[index1].position;
sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG; sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG;
sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD; sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD;
canvas.pen.color:=clfond[indexTCO]; //canvas.pen.color:=clfond[indexTCO];
canvas.pen.Width:=epaisseur div 2; with canvas do
begin
pen.color:=fond;
Brush.Color:=fond;
pen.Width:=epaisseur div 2;
end;
if etatTJD=4 then if etatTJD=4 then
begin begin
adr2:=aiguillage[index1].DDevie; // homologue adr2:=aiguillage[index1].DDevie; // homologue
Index2:=Index_aig(adr2); Index2:=Index_aig(adr2);
position2:=aiguillage[index2].position; position2:=aiguillage[index2].position;
// canvas.pen.color:=clBlack;
if (position1=const_devie) and (position2=const_devie) then if (position1=const_devie) and (position2=const_devie) then
begin begin
with canvas do begin with canvas do begin
@@ -6939,8 +6956,15 @@ begin
position1:=aiguillage[index1].position; position1:=aiguillage[index1].position;
sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG; sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG;
sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD; sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD;
canvas.pen.color:=clfond[indexTCO];; //canvas.pen.color:=clfond[indexTCO];;
canvas.pen.Width:=epaisseur div 2; //canvas.
with canvas do
begin
pen.color:=fond;
Brush.Color:=fond;
pen.Width:=epaisseur div 2;
end;
if etatTJD=4 then if etatTJD=4 then
begin begin
adr2:=aiguillage[index1].DDevie; // homologue adr2:=aiguillage[index1].DDevie; // homologue
@@ -7512,8 +7536,14 @@ begin
position1:=aiguillage[index1].position; position1:=aiguillage[index1].position;
sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG; sHG:=TCO[indexTCO,x,y].suivHG;tHG:=TCO[indexTCO,x,y].typHG;
sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD; sBD:=TCO[indexTCO,x,y].suivBD;tBD:=TCO[indexTCO,x,y].typBD;
canvas.pen.color:=clfond[indexTCO]; //canvas.pen.color:=clfond[indexTCO];
canvas.pen.Width:=epaisseur div 2; //canvas.pen.Width:=epaisseur div 2;
with canvas do
begin
pen.color:=fond;
Brush.Color:=fond;
pen.Width:=epaisseur div 2;
end;
if etatTJD=4 then if etatTJD=4 then
begin begin
adr2:=aiguillage[index1].DDevie; // homologue adr2:=aiguillage[index1].DDevie; // homologue
@@ -13814,6 +13844,7 @@ begin
Direction:=det2; Direction:=det2;
end; end;
i:=0; // itérations
repeat // boucle de test de direction repeat // boucle de test de direction
sortir:=false; sortir:=false;
if mode<=10 then if mode<=10 then
@@ -13844,7 +13875,7 @@ begin
xn:=x;yn:=y; xn:=x;yn:=y;
ir:=1; // index de la route du tco ir:=1; // index de la route du tco
i:=0; // itérations
if debugTCO then afficheDebug('Direction '+intToSTR(direction),clOrange); if debugTCO then afficheDebug('Direction '+intToSTR(direction),clOrange);
// initialiser les points d'où l'on vient // initialiser les points d'où l'on vient
@@ -13956,7 +13987,7 @@ begin
if (i>NbCellulesTCO[indexTCO]) then AfficheDebug('Erreur 1000 TCO'+intToSTR(indexTCO)+' : dépassement d''itérations - Route de '+IntToSTR(det1)+' à '+IntToSTR(det2),clred); if (i>NbCellulesTCO[indexTCO]) then AfficheDebug('Erreur 1000 TCO'+intToSTR(indexTCO)+' : dépassement d''itérations - Route de '+IntToSTR(det1)+' à '+IntToSTR(det2),clred);
inc(direction) inc(direction)
until ((direction=5) and (mode<=10)) or ((direction=9) and (mode>=11)) or memtrouve ; until ((direction=5) and (mode<=10)) or ((direction=9) and (mode>=11)) or memtrouve or (i>NbCellulesTCO[indexTCO]) ;
if memTrouve then if memTrouve then
begin begin
+3 -3
View File
@@ -26,7 +26,7 @@ var
f : textFile; f : textFile;
Const Const
VersionSC = '10.73'; // sert à la comparaison de la version publiée VersionSC = '10.75'; // sert à la comparaison de la version publiée
SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace
// pour unzip // pour unzip
SHCONTCH_NOPROGRESSBOX=4; SHCONTCH_NOPROGRESSBOX=4;
@@ -82,7 +82,7 @@ var
begin begin
Result:=False; Result:=False;
t:=0; t:=0;
// l'utilisation de TfileStream.Create inplique que le répertoire de destination soit libre de droits // l'utilisation de TfileStream.Create implique que le répertoire de destination soit libre de droits
Try Fs:=TFileStream.Create(s,fmCreate); Try Fs:=TFileStream.Create(s,fmCreate);
//hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); //hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if DebugVV then Affiche('TFileStream.Create ok',clLime); if DebugVV then Affiche('TFileStream.Create ok',clLime);
@@ -353,7 +353,7 @@ begin
// URL de l'API github des dernières releases // URL de l'API github des dernières releases
Url:='https://api.github.com/repos/f1iwq2/signaux_complexes_gl/releases/latest'; Url:='https://api.github.com/repos/f1iwq2/signaux_complexes_gl/releases/latest';
// l'utilisation de TfileStream.Create inplique que le répertoire de destination soit libre de droits, // l'utilisation de TfileStream.Create implique que le répertoire de destination soit libre de droits,
// ce qui ne marche pas pour c:\program files (x64)\signaux_complexes. // ce qui ne marche pas pour c:\program files (x64)\signaux_complexes.
// Le fichier page.txt est donc mis dans C:\Users\moi\AppData\Roaming\signaux_complexes qui lui a tous les droits // Le fichier page.txt est donc mis dans C:\Users\moi\AppData\Roaming\signaux_complexes qui lui a tous les droits
// fabrication du nom de fichier destinataire et son chemin // fabrication du nom de fichier destinataire et son chemin
+8 -3
View File
@@ -343,9 +343,14 @@ version 10.7 : Affichage du compteur de train depuis le menu contextuel des cant
Correction désaffectation trains sur cantons. Correction désaffectation trains sur cantons.
version 10.71 : Ajout dans les variables des fonctions les mémoires de zone. version 10.71 : Ajout dans les variables des fonctions les mémoires de zone.
Correction bug activation mémoires de zone dans le menu du TCO. Correction bug activation mémoires de zone dans le menu du TCO.
Correction bug affichage des opérations dans les actions. Correction bug affichage des opérations dans les actions.
version 10.72 : correction bug dans les fonctions. version 10.72 : Correction bug dans les fonctions.
version 10.73 : correction bug téléchargement trains depuis CDM. version 10.73 : Correction bug téléchargement trains depuis CDM.
version 10.74 : Traitement du cas TJD abordée par aiguillage en pointe.
Ajout paramètre de temporisation de commande des signaux.
version 10.75 : Amélioration de l'importation des trains depuis CDM rail.
Correction suppression des signaux.