V9.3
This commit is contained in:
BIN
Binary file not shown.
@@ -14,8 +14,8 @@
|
||||
-$N+
|
||||
-$O-
|
||||
-$P-
|
||||
-$Q+
|
||||
-$R+
|
||||
-$Q-
|
||||
-$R-
|
||||
-$S-
|
||||
-$T-
|
||||
-$U-
|
||||
|
||||
@@ -17,8 +17,8 @@ M=0
|
||||
N=1
|
||||
O=0
|
||||
P=0
|
||||
Q=1
|
||||
R=1
|
||||
Q=0
|
||||
R=0
|
||||
S=0
|
||||
T=0
|
||||
U=0
|
||||
|
||||
@@ -25,7 +25,8 @@ uses
|
||||
selection_train in 'selection_train.pas' {FormSelTrain},
|
||||
UnitRoute in 'UnitRoute.pas' {FormRoute},
|
||||
UnitRouteTrains in 'UnitRouteTrains.pas' {FormRouteTrain},
|
||||
UnitInfo in 'UnitInfo.pas' {FormInfo};
|
||||
UnitInfo in 'UnitInfo.pas' {FormInfo},
|
||||
UnitIntro in 'UnitIntro.pas' {FormIntro};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
@@ -54,6 +55,7 @@ begin
|
||||
Application.CreateForm(TFormRoute, FormRoute);
|
||||
Application.CreateForm(TFormRouteTrain, FormRouteTrain);
|
||||
Application.CreateForm(TFormInfo, FormInfo);
|
||||
Application.CreateForm(TFormIntro, FormIntro);
|
||||
fin_preliminaire;
|
||||
Application.Run;
|
||||
end.
|
||||
|
||||
+72
-67
@@ -1,8 +1,8 @@
|
||||
|
||||
Start Length Name Class
|
||||
0001:00000000 001F241CH .text CODE
|
||||
0002:00000000 00002F18H .data DATA
|
||||
0002:00002F18 06A55901H .bss BSS
|
||||
0001:00000000 001FAE24H .text CODE
|
||||
0002:00000000 00002F38H .data DATA
|
||||
0002:00002F38 0F197EE5H .bss BSS
|
||||
|
||||
|
||||
Detailed map of segments
|
||||
@@ -78,38 +78,40 @@ Detailed map of segments
|
||||
0001:0009AFA4 00000040 C=CODE S=.text G=(none) M=MMSystem ACBP=A9
|
||||
0001:0009AFE4 00000038 C=CODE S=.text G=(none) M=Nb30 ACBP=A9
|
||||
0001:0009B01C 00000038 C=CODE S=.text G=(none) M=DateUtils ACBP=A9
|
||||
0001:0009B054 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9
|
||||
0001:0009B940 000005A0 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9
|
||||
0001:0009BEE0 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9
|
||||
0001:0009C8F8 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9
|
||||
0001:0009EA00 000092A4 C=CODE S=.text G=(none) M=Grids ACBP=A9
|
||||
0001:000A7CA4 00001BFC C=CODE S=.text G=(none) M=Spin ACBP=A9
|
||||
0001:000A98A0 00003762 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9
|
||||
0001:000AD004 0000057C C=CODE S=.text G=(none) M=Importation ACBP=A9
|
||||
0001:000AD580 000196A8 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9
|
||||
0001:000C6C28 00002E3F C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9
|
||||
0001:000C9A68 00000D84 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9
|
||||
0001:000CA7EC 000011F4 C=CODE S=.text G=(none) M=UnitFicheHoraire ACBP=A9
|
||||
0001:000CB9E0 00000038 C=CODE S=.text G=(none) M=ShellConsts ACBP=A9
|
||||
0001:000CBA18 000004E0 C=CODE S=.text G=(none) M=ShellCtrls ACBP=A9
|
||||
0001:000CBEF8 00001A20 C=CODE S=.text G=(none) M=UnitRoute ACBP=A9
|
||||
0001:000CD918 00002A44 C=CODE S=.text G=(none) M=UnitRouteTrains ACBP=A9
|
||||
0001:000D035C 00000298 C=CODE S=.text G=(none) M=UnitInfo ACBP=A9
|
||||
0001:000D05F4 00003300 C=CODE S=.text G=(none) M=selection_train ACBP=A9
|
||||
0001:000D38F4 000067FC C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9
|
||||
0001:000DA0F0 00001908 C=CODE S=.text G=(none) M=UnitClock ACBP=A9
|
||||
0001:000DB9F8 000580FC C=CODE S=.text G=(none) M=UnitTCO ACBP=A9
|
||||
0001:00133AF4 000039DC C=CODE S=.text G=(none) M=UnitSR ACBP=A9
|
||||
0001:001374D0 00002BF8 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9
|
||||
0001:0013A0C8 0000899C C=CODE S=.text G=(none) M=UnitModifAction ACBP=A9
|
||||
0001:00142A64 00000F64 C=CODE S=.text G=(none) M=UnitHorloge ACBP=A9
|
||||
0001:001439C8 000025FB C=CODE S=.text G=(none) M=verif_version ACBP=A9
|
||||
0001:00145FC4 00001190 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9
|
||||
0001:00147154 00000F10 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9
|
||||
0001:00148064 00059854 C=CODE S=.text G=(none) M=Unitprinc ACBP=A9
|
||||
0001:001A18B8 0004D544 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9
|
||||
0001:001EEDFC 0000305C C=CODE S=.text G=(none) M=UnitDebug ACBP=A9
|
||||
0001:001F1E58 000005C4 C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9
|
||||
0001:0009B054 00000038 C=CODE S=.text G=(none) M=PsAPI ACBP=A9
|
||||
0001:0009B08C 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9
|
||||
0001:0009B978 00000598 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9
|
||||
0001:0009BF10 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9
|
||||
0001:0009C928 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9
|
||||
0001:0009EA30 000092A4 C=CODE S=.text G=(none) M=Grids ACBP=A9
|
||||
0001:000A7CD4 00001BFC C=CODE S=.text G=(none) M=Spin ACBP=A9
|
||||
0001:000A98D0 00003762 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9
|
||||
0001:000AD034 0000057C C=CODE S=.text G=(none) M=Importation ACBP=A9
|
||||
0001:000AD5B0 000196A8 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9
|
||||
0001:000C6C58 00002E8B C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9
|
||||
0001:000C9AE4 00000EB0 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9
|
||||
0001:000CA994 00001070 C=CODE S=.text G=(none) M=UnitFicheHoraire ACBP=A9
|
||||
0001:000CBA04 00000038 C=CODE S=.text G=(none) M=ShellConsts ACBP=A9
|
||||
0001:000CBA3C 000004E0 C=CODE S=.text G=(none) M=ShellCtrls ACBP=A9
|
||||
0001:000CBF1C 00002D94 C=CODE S=.text G=(none) M=UnitRoute ACBP=A9
|
||||
0001:000CECB0 00002C68 C=CODE S=.text G=(none) M=UnitRouteTrains ACBP=A9
|
||||
0001:000D1918 0000028C C=CODE S=.text G=(none) M=UnitInfo ACBP=A9
|
||||
0001:000D1BA4 00003438 C=CODE S=.text G=(none) M=selection_train ACBP=A9
|
||||
0001:000D4FDC 00006808 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9
|
||||
0001:000DB7E4 00001634 C=CODE S=.text G=(none) M=UnitClock ACBP=A9
|
||||
0001:000DCE18 00000274 C=CODE S=.text G=(none) M=UnitIntro ACBP=A9
|
||||
0001:000DD08C 00059C48 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9
|
||||
0001:00136CD4 000039DC C=CODE S=.text G=(none) M=UnitSR ACBP=A9
|
||||
0001:0013A6B0 00002BF8 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9
|
||||
0001:0013D2A8 00008C48 C=CODE S=.text G=(none) M=UnitModifAction ACBP=A9
|
||||
0001:00145EF0 00000F84 C=CODE S=.text G=(none) M=UnitHorloge ACBP=A9
|
||||
0001:00146E74 0000261B C=CODE S=.text G=(none) M=verif_version ACBP=A9
|
||||
0001:00149490 00001190 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9
|
||||
0001:0014A620 00000F48 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9
|
||||
0001:0014B568 0005D258 C=CODE S=.text G=(none) M=Unitprinc ACBP=A9
|
||||
0001:001A87C0 0004F190 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9
|
||||
0001:001F7950 00002EE8 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9
|
||||
0001:001FA838 000005EC C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9
|
||||
0002:00000000 000000CC C=DATA S=.data G=DGROUP M=System ACBP=A9
|
||||
0002:000000CC 00000020 C=DATA S=.data G=DGROUP M=SysInit ACBP=A9
|
||||
0002:000000EC 00000254 C=DATA S=.data G=DGROUP M=SysUtils ACBP=A9
|
||||
@@ -214,37 +216,39 @@ Detailed map of segments
|
||||
0002:00003E48 00000004 C=BSS S=.bss G=DGROUP M=MMSystem ACBP=A9
|
||||
0002:00003E4C 00000004 C=BSS S=.bss G=DGROUP M=Nb30 ACBP=A9
|
||||
0002:00003E50 00000004 C=BSS S=.bss G=DGROUP M=DateUtils ACBP=A9
|
||||
0002:00003E54 00000004 C=BSS S=.bss G=DGROUP M=OleServer ACBP=A9
|
||||
0002:00003E58 00000004 C=BSS S=.bss G=DGROUP M=MSCommLib_TLB ACBP=A9
|
||||
0002:00003E5C 00000004 C=BSS S=.bss G=DGROUP M=MaskUtils ACBP=A9
|
||||
0002:00003E60 00000004 C=BSS S=.bss G=DGROUP M=Mask ACBP=A9
|
||||
0002:00003E64 00000004 C=BSS S=.bss G=DGROUP M=Grids ACBP=A9
|
||||
0002:00003E68 00000004 C=BSS S=.bss G=DGROUP M=Spin ACBP=A9
|
||||
0002:00003E6C 00002494 C=BSS S=.bss G=DGROUP M=UnitPilote ACBP=A9
|
||||
0002:00006300 00000010 C=BSS S=.bss G=DGROUP M=Importation ACBP=A9
|
||||
0002:00006310 000148B0 C=BSS S=.bss G=DGROUP M=UnitAnalyseSegCDM ACBP=A9
|
||||
0002:0001ABC0 00000014 C=BSS S=.bss G=DGROUP M=UnitConfigTCO ACBP=A9
|
||||
0002:0001ABD4 00000014 C=BSS S=.bss G=DGROUP M=Unit_Pilote_aig ACBP=A9
|
||||
0002:0001ABE8 0000190C C=BSS S=.bss G=DGROUP M=UnitFicheHoraire ACBP=A9
|
||||
0002:0001C4F4 00000004 C=BSS S=.bss G=DGROUP M=ShellConsts ACBP=A9
|
||||
0002:0001C4F8 0000001C C=BSS S=.bss G=DGROUP M=ShellCtrls ACBP=A9
|
||||
0002:0001C514 00000CA4 C=BSS S=.bss G=DGROUP M=UnitRoute ACBP=A9
|
||||
0002:0001D1B8 00000008 C=BSS S=.bss G=DGROUP M=UnitRouteTrains ACBP=A9
|
||||
0002:0001D1C0 0000000C C=BSS S=.bss G=DGROUP M=UnitInfo ACBP=A9
|
||||
0002:0001D1CC 00000CB0 C=BSS S=.bss G=DGROUP M=selection_train ACBP=A9
|
||||
0002:0001DE7C 00000020 C=BSS S=.bss G=DGROUP M=UnitConfigCellTCO ACBP=A9
|
||||
0002:0001DE9C 00000034 C=BSS S=.bss G=DGROUP M=UnitClock ACBP=A9
|
||||
0002:0001DED0 004CD3C0 C=BSS S=.bss G=DGROUP M=UnitTCO ACBP=A9
|
||||
0002:004EB290 00000010 C=BSS S=.bss G=DGROUP M=UnitSR ACBP=A9
|
||||
0002:004EB2A0 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9
|
||||
0002:004EB2B4 00000018 C=BSS S=.bss G=DGROUP M=UnitModifAction ACBP=A9
|
||||
0002:004EB2CC 00000038 C=BSS S=.bss G=DGROUP M=UnitHorloge ACBP=A9
|
||||
0002:004EB304 000001EC C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9
|
||||
0002:004EB4F0 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9
|
||||
0002:004EB4F4 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9
|
||||
0002:004EB500 0656CE08 C=BSS S=.bss G=DGROUP M=Unitprinc ACBP=A9
|
||||
0002:06A58308 000005CC C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9
|
||||
0002:06A588D4 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9
|
||||
0002:00003E54 00000004 C=BSS S=.bss G=DGROUP M=PsAPI ACBP=A9
|
||||
0002:00003E58 00000004 C=BSS S=.bss G=DGROUP M=OleServer ACBP=A9
|
||||
0002:00003E5C 00000004 C=BSS S=.bss G=DGROUP M=MSCommLib_TLB ACBP=A9
|
||||
0002:00003E60 00000004 C=BSS S=.bss G=DGROUP M=MaskUtils ACBP=A9
|
||||
0002:00003E64 00000004 C=BSS S=.bss G=DGROUP M=Mask ACBP=A9
|
||||
0002:00003E68 00000004 C=BSS S=.bss G=DGROUP M=Grids ACBP=A9
|
||||
0002:00003E6C 00000004 C=BSS S=.bss G=DGROUP M=Spin ACBP=A9
|
||||
0002:00003E70 00002494 C=BSS S=.bss G=DGROUP M=UnitPilote ACBP=A9
|
||||
0002:00006304 00000010 C=BSS S=.bss G=DGROUP M=Importation ACBP=A9
|
||||
0002:00006314 000148B0 C=BSS S=.bss G=DGROUP M=UnitAnalyseSegCDM ACBP=A9
|
||||
0002:0001ABC4 00000014 C=BSS S=.bss G=DGROUP M=UnitConfigTCO ACBP=A9
|
||||
0002:0001ABD8 00000014 C=BSS S=.bss G=DGROUP M=Unit_Pilote_aig ACBP=A9
|
||||
0002:0001ABEC 0000190C C=BSS S=.bss G=DGROUP M=UnitFicheHoraire ACBP=A9
|
||||
0002:0001C4F8 00000004 C=BSS S=.bss G=DGROUP M=ShellConsts ACBP=A9
|
||||
0002:0001C4FC 0000001C C=BSS S=.bss G=DGROUP M=ShellCtrls ACBP=A9
|
||||
0002:0001C518 00000DF4 C=BSS S=.bss G=DGROUP M=UnitRoute ACBP=A9
|
||||
0002:0001D30C 00000008 C=BSS S=.bss G=DGROUP M=UnitRouteTrains ACBP=A9
|
||||
0002:0001D314 0000000C C=BSS S=.bss G=DGROUP M=UnitInfo ACBP=A9
|
||||
0002:0001D320 00000CB4 C=BSS S=.bss G=DGROUP M=selection_train ACBP=A9
|
||||
0002:0001DFD4 00000020 C=BSS S=.bss G=DGROUP M=UnitConfigCellTCO ACBP=A9
|
||||
0002:0001DFF4 00000034 C=BSS S=.bss G=DGROUP M=UnitClock ACBP=A9
|
||||
0002:0001E028 0000000C C=BSS S=.bss G=DGROUP M=UnitIntro ACBP=A9
|
||||
0002:0001E034 004CD3BC C=BSS S=.bss G=DGROUP M=UnitTCO ACBP=A9
|
||||
0002:004EB3F0 00000010 C=BSS S=.bss G=DGROUP M=UnitSR ACBP=A9
|
||||
0002:004EB400 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9
|
||||
0002:004EB414 00000018 C=BSS S=.bss G=DGROUP M=UnitModifAction ACBP=A9
|
||||
0002:004EB42C 00000038 C=BSS S=.bss G=DGROUP M=UnitHorloge ACBP=A9
|
||||
0002:004EB464 000001EC C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9
|
||||
0002:004EB650 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9
|
||||
0002:004EB654 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9
|
||||
0002:004EB660 0ECAF278 C=BSS S=.bss G=DGROUP M=Unitprinc ACBP=A9
|
||||
0002:0F19A8D8 000005E0 C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9
|
||||
0002:0F19AEB8 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9
|
||||
|
||||
Bound resource files
|
||||
|
||||
@@ -264,6 +268,7 @@ UnitInfo.dfm
|
||||
selection_train.dfm
|
||||
UnitConfigCellTCO.dfm
|
||||
UnitClock.dfm
|
||||
UnitIntro.dfm
|
||||
UnitTCO.dfm
|
||||
UnitSR.dfm
|
||||
UnitCDF.dfm
|
||||
@@ -278,4 +283,4 @@ Signaux_complexes_GL.res
|
||||
Signaux_complexes_GL.drf
|
||||
|
||||
|
||||
Program entry point at 0001:001F21C0
|
||||
Program entry point at 0001:001FABB0
|
||||
|
||||
+64
-22
@@ -682,7 +682,7 @@ object FormConfig: TFormConfig
|
||||
Top = 8
|
||||
Width = 633
|
||||
Height = 505
|
||||
ActivePage = TabAvance
|
||||
ActivePage = TabSheetActionneurs
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -11
|
||||
@@ -1198,11 +1198,11 @@ object FormConfig: TFormConfig
|
||||
object Label5: TLabel
|
||||
Left = 16
|
||||
Top = 75
|
||||
Width = 152
|
||||
Width = 151
|
||||
Height = 26
|
||||
Caption =
|
||||
'3. Temporisation d'#39'attente de la r'#233'ponse de l'#39'interface (x 100 m' +
|
||||
's)'
|
||||
'3. Temporisation d'#39'attente de la r'#233'ponse de l'#39'interface (x 50 ms' +
|
||||
')'
|
||||
WordWrap = True
|
||||
end
|
||||
object EditcomUSB: TEdit
|
||||
@@ -1297,19 +1297,20 @@ object FormConfig: TFormConfig
|
||||
Left = 312
|
||||
Top = 8
|
||||
Width = 297
|
||||
Height = 49
|
||||
Height = 65
|
||||
BevelInner = bvLowered
|
||||
BevelKind = bkFlat
|
||||
Lines.Strings = (
|
||||
'1. Port COM de l'#39'adresse USB de l'#39'interface XpressNet. '
|
||||
'COM de 1 '#224' 255 - Si COMX : Signaux complexes d'#233'tecte le '
|
||||
'port automatiquement (mais le d'#233'marrage est plus long)')
|
||||
'port automatiquement (mais le d'#233'marrage est plus long)'
|
||||
'COMX , vitesse, parit'#233' , Nbre_bits , Bits_stop, protocole')
|
||||
ReadOnly = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object Memo2: TMemo
|
||||
Left = 312
|
||||
Top = 64
|
||||
Top = 80
|
||||
Width = 297
|
||||
Height = 81
|
||||
BevelInner = bvLowered
|
||||
@@ -1325,7 +1326,7 @@ object FormConfig: TFormConfig
|
||||
end
|
||||
object Memo3: TMemo
|
||||
Left = 312
|
||||
Top = 152
|
||||
Top = 168
|
||||
Width = 297
|
||||
Height = 89
|
||||
BevelInner = bvLowered
|
||||
@@ -1409,7 +1410,7 @@ object FormConfig: TFormConfig
|
||||
end
|
||||
object GroupBox22: TGroupBox
|
||||
Left = 312
|
||||
Top = 248
|
||||
Top = 264
|
||||
Width = 297
|
||||
Height = 65
|
||||
Caption = 'Protocole de connexion '#224' la centrale ou '#224' l'#39'interface'
|
||||
@@ -1835,9 +1836,10 @@ object FormConfig: TFormConfig
|
||||
Top = 20
|
||||
Width = 33
|
||||
Height = 21
|
||||
Color = clLime
|
||||
TabOrder = 6
|
||||
Visible = False
|
||||
OnChange = EditAigTripleChange
|
||||
OnKeyPress = EditAigTripleKeyPress
|
||||
end
|
||||
object GroupBox21: TGroupBox
|
||||
Left = 8
|
||||
@@ -2350,6 +2352,9 @@ object FormConfig: TFormConfig
|
||||
Top = 120
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint = 'D'#233'tecteur 1 (obligatoire) associ'#233' au signal'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
OnChange = EditDet1Change
|
||||
end
|
||||
@@ -2358,6 +2363,9 @@ object FormConfig: TFormConfig
|
||||
Top = 120
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint =
|
||||
'El'#233'ment imm'#233'diatement suivant apr'#232's le d'#233'tecteur 1 (aiguillage o' +
|
||||
'u d'#233'tecteur) - Obligatoire'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
@@ -2368,6 +2376,9 @@ object FormConfig: TFormConfig
|
||||
Top = 144
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint = 'D'#233'tecteur 2 (optionnel) associ'#233' au signal'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 5
|
||||
OnChange = EditDet2Change
|
||||
end
|
||||
@@ -2376,6 +2387,9 @@ object FormConfig: TFormConfig
|
||||
Top = 144
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint =
|
||||
'El'#233'ment imm'#233'diatement suivant apr'#232's le d'#233'tecteur 2 (aiguillage o' +
|
||||
'u signal) - Optionnel'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 6
|
||||
@@ -2386,6 +2400,9 @@ object FormConfig: TFormConfig
|
||||
Top = 168
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint = 'D'#233'tecteur 3 (optionnel) associ'#233' au signal'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 7
|
||||
OnChange = EditDet3Change
|
||||
end
|
||||
@@ -2394,6 +2411,9 @@ object FormConfig: TFormConfig
|
||||
Top = 168
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint =
|
||||
'El'#233'ment imm'#233'diatement suivant apr'#232's le d'#233'tecteur 3 (aiguillage o' +
|
||||
'u d'#233'tecteur) - Optionnel'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 8
|
||||
@@ -2404,6 +2424,9 @@ object FormConfig: TFormConfig
|
||||
Top = 192
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint = 'D'#233'tecteur 4 (optionnel) associ'#233' au signal'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
OnChange = EditDet4Change
|
||||
end
|
||||
@@ -2412,6 +2435,9 @@ object FormConfig: TFormConfig
|
||||
Top = 192
|
||||
Width = 41
|
||||
Height = 21
|
||||
Hint =
|
||||
'El'#233'ment imm'#233'diatement suivant apr'#232's le d'#233'tecteur 4 (aiguillage o' +
|
||||
'u d'#233'tecteur) - Optionnel'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 10
|
||||
@@ -3598,6 +3624,12 @@ object FormConfig: TFormConfig
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object ImageTrain: TImage
|
||||
Left = 16
|
||||
Top = 400
|
||||
Width = 257
|
||||
Height = 49
|
||||
end
|
||||
object GroupBox24: TGroupBox
|
||||
Left = 296
|
||||
Top = 16
|
||||
@@ -3642,20 +3674,14 @@ object FormConfig: TFormConfig
|
||||
end
|
||||
object Label16: TLabel
|
||||
Left = 16
|
||||
Top = 352
|
||||
Top = 400
|
||||
Width = 27
|
||||
Height = 13
|
||||
Caption = 'Ic'#244'ne'
|
||||
end
|
||||
object ImageTrain: TImage
|
||||
Left = 16
|
||||
Top = 376
|
||||
Width = 257
|
||||
Height = 49
|
||||
end
|
||||
object SpeedButtonOuvre: TSpeedButton
|
||||
Left = 120
|
||||
Top = 344
|
||||
Top = 392
|
||||
Width = 23
|
||||
Height = 22
|
||||
Hint = 'Charger ic'#244'ne'
|
||||
@@ -3665,7 +3691,7 @@ object FormConfig: TFormConfig
|
||||
OnClick = SpeedButtonOuvreClick
|
||||
end
|
||||
object Label45: TLabel
|
||||
Left = 26
|
||||
Left = 10
|
||||
Top = 232
|
||||
Width = 111
|
||||
Height = 39
|
||||
@@ -3675,6 +3701,13 @@ object FormConfig: TFormConfig
|
||||
'nt)'
|
||||
WordWrap = True
|
||||
end
|
||||
object Label46: TLabel
|
||||
Left = 24
|
||||
Top = 328
|
||||
Width = 34
|
||||
Height = 13
|
||||
Caption = 'Routes'
|
||||
end
|
||||
object EditNomTrain: TEdit
|
||||
Left = 136
|
||||
Top = 24
|
||||
@@ -3732,7 +3765,7 @@ object FormConfig: TFormConfig
|
||||
end
|
||||
object EditIcone: TEdit
|
||||
Left = 168
|
||||
Top = 344
|
||||
Top = 392
|
||||
Width = 121
|
||||
Height = 21
|
||||
TabOrder = 5
|
||||
@@ -3766,9 +3799,9 @@ object FormConfig: TFormConfig
|
||||
OnClick = CheckBoxSensClick
|
||||
end
|
||||
object StringGridArr: TStringGrid
|
||||
Left = 144
|
||||
Left = 136
|
||||
Top = 192
|
||||
Width = 169
|
||||
Width = 177
|
||||
Height = 113
|
||||
TabOrder = 8
|
||||
OnSelectCell = StringGridArrSelectCell
|
||||
@@ -3780,6 +3813,15 @@ object FormConfig: TFormConfig
|
||||
24
|
||||
24)
|
||||
end
|
||||
object MemoRoutes: TMemo
|
||||
Left = 120
|
||||
Top = 312
|
||||
Width = 185
|
||||
Height = 57
|
||||
ReadOnly = True
|
||||
ScrollBars = ssBoth
|
||||
TabOrder = 9
|
||||
end
|
||||
end
|
||||
object ButtonNT: TButton
|
||||
Left = 8
|
||||
|
||||
+448
-161
File diff suppressed because it is too large
Load Diff
@@ -1355,6 +1355,7 @@ var idc,x,y: integer;
|
||||
h : boolean;
|
||||
begin
|
||||
Idc:=index_canton(indexTCOcourant,xclicC,yclicC);
|
||||
if Idc<1 then exit;
|
||||
x:=canton[Idc].x;
|
||||
y:=canton[Idc].y;
|
||||
H:=IsCantonH(IndexTCOCourant,x,y);
|
||||
|
||||
+18
-6
@@ -113,7 +113,7 @@ object FormConfigTCO: TFormConfigTCO
|
||||
end
|
||||
object Label10: TLabel
|
||||
Left = 56
|
||||
Top = 256
|
||||
Top = 224
|
||||
Width = 258
|
||||
Height = 13
|
||||
Caption = 'Cliquez sur l'#39'ic'#244'ne pour changer la couleur de l'#39#233'l'#233'ment'
|
||||
@@ -170,11 +170,11 @@ object FormConfigTCO: TFormConfigTCO
|
||||
OnClick = ImagePiedFeuClick
|
||||
end
|
||||
object CheckCouleur: TCheckBox
|
||||
Left = 64
|
||||
Top = 224
|
||||
Left = 48
|
||||
Top = 248
|
||||
Width = 281
|
||||
Height = 17
|
||||
Caption = 'Couleur du canton activ'#233' par la couleur du train'
|
||||
Caption = 'Couleur du canton activ'#233'e par la couleur du train'
|
||||
TabOrder = 0
|
||||
OnClick = CheckCouleurClick
|
||||
end
|
||||
@@ -241,7 +241,7 @@ object FormConfigTCO: TFormConfigTCO
|
||||
TabOrder = 4
|
||||
end
|
||||
object RadioButtonCourbes: TRadioButton
|
||||
Left = 392
|
||||
Left = 320
|
||||
Top = 328
|
||||
Width = 113
|
||||
Height = 17
|
||||
@@ -445,7 +445,7 @@ object FormConfigTCO: TFormConfigTCO
|
||||
end
|
||||
end
|
||||
object RadioButtonLignes: TRadioButton
|
||||
Left = 392
|
||||
Left = 320
|
||||
Top = 312
|
||||
Width = 113
|
||||
Height = 17
|
||||
@@ -459,6 +459,18 @@ object FormConfigTCO: TFormConfigTCO
|
||||
TabOrder = 8
|
||||
OnClick = RadioButtonLignesClick
|
||||
end
|
||||
object CheckNB: TCheckBox
|
||||
Left = 488
|
||||
Top = 312
|
||||
Width = 137
|
||||
Height = 17
|
||||
Hint = 'Affichage du TCO en noir et blanc pour impression'
|
||||
Caption = 'Mode noir et blanc'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
OnClick = CheckNBClick
|
||||
end
|
||||
object ColorDialog1: TColorDialog
|
||||
OnShow = ColorDialog1Show
|
||||
Left = 272
|
||||
|
||||
@@ -59,6 +59,7 @@ type
|
||||
Label17: TLabel;
|
||||
Label18: TLabel;
|
||||
RadioButtonLignes: TRadioButton;
|
||||
CheckNB: TCheckBox;
|
||||
procedure ButtonDessineClick(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure ImageAigClick(Sender: TObject);
|
||||
@@ -81,6 +82,7 @@ type
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure TrackBarEpaisseurChange(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
procedure CheckNBClick(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
@@ -614,5 +616,10 @@ begin
|
||||
else action:=tCloseAction(caNone); // si la config est nok, on ferme pas la fenetre
|
||||
end;
|
||||
|
||||
procedure TFormConfigTCO.CheckNBClick(Sender: TObject);
|
||||
begin
|
||||
NB:=CheckNB.checked;
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
||||
|
||||
+2
-1
@@ -300,12 +300,13 @@ begin
|
||||
if (erreur<>0) or (i<0) or (i>23) then
|
||||
begin
|
||||
LabelErreur.Caption:='Erreur heure';
|
||||
SpinEditHInit.value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditHInit.Value:=i;
|
||||
LabelErreur.Caption:='';
|
||||
HeureInit:=i;
|
||||
config_modifie:=true;
|
||||
|
||||
end;
|
||||
|
||||
procedure TFormHorloge.ButtonLanceClick(Sender: TObject);
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
object FormIntro: TFormIntro
|
||||
Left = 300
|
||||
Top = 150
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Introduction de donn'#233'es'
|
||||
ClientHeight = 95
|
||||
ClientWidth = 186
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object LabeledEditDetAig: TLabeledEdit
|
||||
Left = 40
|
||||
Top = 24
|
||||
Width = 121
|
||||
Height = 21
|
||||
EditLabel.Width = 47
|
||||
EditLabel.Height = 13
|
||||
EditLabel.Caption = 'D'#233'tecteur'
|
||||
TabOrder = 0
|
||||
end
|
||||
object ButtonTrouver: TButton
|
||||
Left = 56
|
||||
Top = 56
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Trouver'
|
||||
TabOrder = 1
|
||||
OnClick = ButtonTrouverClick
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,36 @@
|
||||
unit UnitIntro;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls, ExtCtrls;
|
||||
|
||||
type
|
||||
TFormIntro = class(TForm)
|
||||
LabeledEditDetAig: TLabeledEdit;
|
||||
ButtonTrouver: TButton;
|
||||
procedure ButtonTrouverClick(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
{ Déclarations publiques }
|
||||
end;
|
||||
|
||||
var
|
||||
FormIntro: TFormIntro;
|
||||
Achercher : integer;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TFormIntro.ButtonTrouverClick(Sender: TObject);
|
||||
var i,erreur : integer;
|
||||
begin
|
||||
val(LabeledEditDetAig.text,i,erreur);
|
||||
Achercher:=i;
|
||||
close;
|
||||
end;
|
||||
|
||||
end.
|
||||
+1
-1
@@ -61,7 +61,7 @@ object FormModifAction: TFormModifAction
|
||||
Top = 64
|
||||
Width = 729
|
||||
Height = 337
|
||||
ActivePage = TabSheetOp
|
||||
ActivePage = TabSheet1
|
||||
MultiLine = True
|
||||
TabOrder = 2
|
||||
object TabSheetDecl: TTabSheet
|
||||
|
||||
+56
-14
@@ -1172,7 +1172,12 @@ begin
|
||||
if (decl<>declAccessoire) and (decl<>DeclDetAct) and (decl<>DeclZoneDet) then exit;
|
||||
|
||||
val(SpinEditEtat.Text,i,erreur);
|
||||
if (i<0) or (i>2) or (erreur<>0) then exit;
|
||||
if (i<0) or (i>2) or (erreur<>0) then
|
||||
begin
|
||||
SpinEditEtat.value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditEtat.value:=i;
|
||||
Tablo_Action[index].etat:=i;
|
||||
|
||||
maj_combocactions(ligneclicAct);
|
||||
@@ -1573,10 +1578,16 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormModifAction.SpinEditHeure1Change(Sender: TObject);
|
||||
var cond,i : integer;
|
||||
var cond,i,erreur : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditHeure1.Value;
|
||||
val(SpinEditHeure1.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditHeure1.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditHeure1.Value:=i;
|
||||
cond:=Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].numcondition;
|
||||
case cond of
|
||||
CondHorl : Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].HeureMin:=i;
|
||||
@@ -1584,12 +1595,17 @@ begin
|
||||
maj_combocactions(ligneclicAct);
|
||||
end;
|
||||
|
||||
|
||||
procedure TFormModifAction.SpinEditMn1Change(Sender: TObject);
|
||||
var cond,i : integer;
|
||||
var cond,i,erreur : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditMn1.Value;
|
||||
val(SpinEditMn1.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditMn1.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditMn1.Value:=i;
|
||||
cond:=Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].numcondition;
|
||||
case cond of
|
||||
CondHorl : Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].MinuteMin:=i;
|
||||
@@ -1598,10 +1614,16 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormModifAction.SpinEditHeure2Change(Sender: TObject);
|
||||
var cond,i : integer;
|
||||
var cond,i,erreur : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditHeure2.Value;
|
||||
val(SpinEditHeure2.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditHeure2.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditHeure2.Value:=i;
|
||||
cond:=Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].numcondition;
|
||||
case cond of
|
||||
CondHorl : Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].HeureMax:=i;
|
||||
@@ -1610,10 +1632,16 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormModifAction.SpinEditMn2Change(Sender: TObject);
|
||||
var cond,i : integer;
|
||||
var cond,i,erreur : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditMn2.Value;
|
||||
val(SpinEditMn2.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditMn2.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditMn2.Value:=i;
|
||||
cond:=Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].numcondition;
|
||||
case cond of
|
||||
CondHorl : Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].MinuteMax:=i;
|
||||
@@ -1635,10 +1663,16 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormModifAction.SpinEditEtat2Change(Sender: TObject);
|
||||
var cond,i : integer;
|
||||
var cond,i,erreur : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditEtat2.Value;
|
||||
val(SpinEditEtat2.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditEtat2.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditEtat2.Value:=i;
|
||||
cond:=Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].numcondition;
|
||||
case cond of
|
||||
CondPosAcc : Tablo_Action[ligneclicact+1].tabloCond[cliccond+1].etat:=i;
|
||||
@@ -1659,10 +1693,16 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormModifAction.SpinEditEtatopChange(Sender: TObject);
|
||||
var i,op : integer;
|
||||
var i,o,erreur,op : integer;
|
||||
begin
|
||||
if (ligneclicAct<0) or clicliste then exit;
|
||||
i:=SpinEditEtatop.Value;
|
||||
val(SpinEditEtatop.text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
SpinEditEtatOp.Value:=0;
|
||||
exit;
|
||||
end;
|
||||
SpinEditEtatop.Value:=i;
|
||||
op:=Tablo_Action[ligneclicact+1].tabloOp[clicaction+1].numoperation;
|
||||
case op of
|
||||
ActionAccessoire : Tablo_Action[ligneclicact+1].tabloOp[clicaction+1].etat:=i;
|
||||
@@ -1724,4 +1764,6 @@ begin
|
||||
Aff_champs(ligneclicAct+1,1,1);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
|
||||
+9
-8
@@ -1,8 +1,8 @@
|
||||
object FormPrinc: TFormPrinc
|
||||
Left = 75
|
||||
Top = 270
|
||||
Left = 132
|
||||
Top = 172
|
||||
Width = 1148
|
||||
Height = 624
|
||||
Height = 625
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'SIgnaux complexes'
|
||||
Color = clBtnFace
|
||||
@@ -20,8 +20,8 @@ object FormPrinc: TFormPrinc
|
||||
OnCreate = FormCreate
|
||||
OnResize = FormResize
|
||||
DesignSize = (
|
||||
1140
|
||||
573)
|
||||
1132
|
||||
566)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object LabelTitre: TLabel
|
||||
@@ -1445,8 +1445,8 @@ object FormPrinc: TFormPrinc
|
||||
end
|
||||
object StatusBar1: TStatusBar
|
||||
Left = 0
|
||||
Top = 551
|
||||
Width = 1140
|
||||
Top = 544
|
||||
Width = 1132
|
||||
Height = 22
|
||||
Panels = <
|
||||
item
|
||||
@@ -2043,6 +2043,7 @@ object FormPrinc: TFormPrinc
|
||||
Height = 25
|
||||
Caption = 'Route'
|
||||
TabOrder = 2
|
||||
OnClick = Button3Click
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Interval = 100
|
||||
@@ -2417,7 +2418,7 @@ object FormPrinc: TFormPrinc
|
||||
object Roulage1: TMenuItem
|
||||
Caption = 'Roulage'
|
||||
object Routes1: TMenuItem
|
||||
Caption = 'Fen'#234'tre des routes'
|
||||
Caption = 'Fen'#234'tre des routes par trains'
|
||||
OnClick = Routes1Click
|
||||
end
|
||||
object Afficheroutespartrain1: TMenuItem
|
||||
|
||||
+1628
-517
File diff suppressed because it is too large
Load Diff
+127
-23
@@ -3,7 +3,7 @@ object FormRoute: TFormRoute
|
||||
Top = 182
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Route'
|
||||
ClientHeight = 257
|
||||
ClientHeight = 298
|
||||
ClientWidth = 634
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
@@ -15,11 +15,14 @@ object FormRoute: TFormRoute
|
||||
OnActivate = FormActivate
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
DesignSize = (
|
||||
634
|
||||
298)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object LabelInfo: TLabel
|
||||
Left = 16
|
||||
Top = 16
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 324
|
||||
Height = 13
|
||||
Caption =
|
||||
@@ -28,9 +31,10 @@ object FormRoute: TFormRoute
|
||||
end
|
||||
object LabelNombre: TLabel
|
||||
Left = 19
|
||||
Top = 192
|
||||
Top = 234
|
||||
Width = 29
|
||||
Height = 13
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'Route'
|
||||
end
|
||||
object ImageTrainR: TImage
|
||||
@@ -43,10 +47,11 @@ object FormRoute: TFormRoute
|
||||
end
|
||||
object ListBoxRoutes: TListBox
|
||||
Left = 16
|
||||
Top = 80
|
||||
Top = 116
|
||||
Width = 609
|
||||
Height = 105
|
||||
Height = 114
|
||||
Hint = 'S'#233'lectionne une route pour l'#39'affecter au train courant'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Color = clBlack
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clYellow
|
||||
@@ -58,15 +63,17 @@ object FormRoute: TFormRoute
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 0
|
||||
OnDrawItem = ListBoxRoutesDrawItem
|
||||
OnKeyDown = ListBoxRoutesKeyDown
|
||||
OnMouseDown = ListBoxRoutesMouseDown
|
||||
end
|
||||
object ButtonEfface: TButton
|
||||
Left = 424
|
||||
Top = 216
|
||||
Top = 258
|
||||
Width = 97
|
||||
Height = 33
|
||||
Hint = 'Efface la route du tco'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'Efface route du TCO'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@@ -76,19 +83,21 @@ object FormRoute: TFormRoute
|
||||
end
|
||||
object ButtonQuitte: TButton
|
||||
Left = 16
|
||||
Top = 216
|
||||
Top = 259
|
||||
Width = 89
|
||||
Height = 33
|
||||
Height = 32
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'Quitter'
|
||||
TabOrder = 2
|
||||
OnClick = ButtonQuitteClick
|
||||
end
|
||||
object ButtonDetail: TButton
|
||||
Left = 320
|
||||
Top = 216
|
||||
Top = 258
|
||||
Width = 97
|
||||
Height = 33
|
||||
Hint = 'D'#233'tail route'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'D'#233'tail route'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@@ -97,37 +106,132 @@ object FormRoute: TFormRoute
|
||||
end
|
||||
object ButtonRAZ: TButton
|
||||
Left = 528
|
||||
Top = 216
|
||||
Top = 258
|
||||
Width = 97
|
||||
Height = 33
|
||||
Hint = 'Annule toutes les routes pour ce train'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'D'#233'valider routes'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
OnClick = ButtonRAZClick
|
||||
end
|
||||
object ComboBoxTrains: TComboBox
|
||||
Left = 16
|
||||
Top = 48
|
||||
Width = 601
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
TabOrder = 5
|
||||
Visible = False
|
||||
end
|
||||
object ButtonFenPil: TButton
|
||||
Left = 232
|
||||
Top = 216
|
||||
Top = 258
|
||||
Width = 83
|
||||
Height = 33
|
||||
Hint = 'Ouvre la fen'#234'tre de pilotage des trains'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'Fen'#234'tre de pilotage'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 5
|
||||
WordWrap = True
|
||||
OnClick = ButtonFenPilClick
|
||||
end
|
||||
object Button1: TButton
|
||||
Left = 128
|
||||
Top = 258
|
||||
Width = 75
|
||||
Height = 33
|
||||
Hint =
|
||||
'Affiche la route sous forme d'#39'une progression du train sur cette' +
|
||||
' route'
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = 'Parcours route'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 6
|
||||
WordWrap = True
|
||||
OnClick = ButtonFenPilClick
|
||||
OnClick = ButtonParcours
|
||||
end
|
||||
object ButtonRaf: TButton
|
||||
Left = 384
|
||||
Top = 78
|
||||
Width = 89
|
||||
Height = 25
|
||||
Hint =
|
||||
'R'#233'affiche la liste des routes en fonction des filtres, d'#39'apr'#232's l' +
|
||||
'a liste des routes trouv'#233'es'
|
||||
Caption = 'Rafra'#238'chir la liste'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 7
|
||||
OnClick = ButtonRafClick
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 16
|
||||
Top = 32
|
||||
Width = 321
|
||||
Height = 65
|
||||
Caption = 'Filtrage des routes'
|
||||
TabOrder = 8
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Top = 24
|
||||
Width = 189
|
||||
Height = 13
|
||||
Caption = 'Obligation de passer par le(s) canton(s) :'
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Top = 40
|
||||
Width = 194
|
||||
Height = 13
|
||||
Caption = 'Interdiction de passer par le(s) canton(s) :'
|
||||
end
|
||||
object EditObligeCanton: TEdit
|
||||
Left = 216
|
||||
Top = 20
|
||||
Width = 81
|
||||
Height = 21
|
||||
Hint = 'Num'#233'ro de cantons s'#233'par'#233's par des virgules (10 maxi)'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 0
|
||||
OnChange = EditObligeCantonChange
|
||||
end
|
||||
object EditInterditCanton: TEdit
|
||||
Left = 216
|
||||
Top = 38
|
||||
Width = 81
|
||||
Height = 21
|
||||
Hint = 'Num'#233'ro de cantons s'#233'par'#233's par des virgules (10 maxi)'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 1
|
||||
OnChange = EditInterditCantonChange
|
||||
end
|
||||
end
|
||||
object ButtonTrouver: TButton
|
||||
Left = 496
|
||||
Top = 78
|
||||
Width = 97
|
||||
Height = 25
|
||||
Hint = 'Recalcule les routes en fonction des filtres'
|
||||
Caption = 'Trouver les routes'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
OnClick = ButtonTrouverClick
|
||||
end
|
||||
object CheckBoxRoutesLongues: TCheckBox
|
||||
Left = 384
|
||||
Top = 54
|
||||
Width = 209
|
||||
Height = 17
|
||||
Caption = 'Afficher les routes longues (en orange)'
|
||||
TabOrder = 10
|
||||
OnClick = CheckBoxRoutesLonguesClick
|
||||
end
|
||||
object CheckBoxDebugRoutes: TCheckBox
|
||||
Left = 552
|
||||
Top = 232
|
||||
Width = 65
|
||||
Height = 17
|
||||
Caption = 'Debug'
|
||||
TabOrder = 11
|
||||
end
|
||||
end
|
||||
|
||||
+359
-53
@@ -18,8 +18,17 @@ type
|
||||
ButtonDetail: TButton;
|
||||
ButtonRAZ: TButton;
|
||||
ImageTrainR: TImage;
|
||||
ComboBoxTrains: TComboBox;
|
||||
ButtonFenPil: TButton;
|
||||
Button1: TButton;
|
||||
ButtonRaf: TButton;
|
||||
GroupBox1: TGroupBox;
|
||||
EditObligeCanton: TEdit;
|
||||
EditInterditCanton: TEdit;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
ButtonTrouver: TButton;
|
||||
CheckBoxRoutesLongues: TCheckBox;
|
||||
CheckBoxDebugRoutes: TCheckBox;
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure ListBoxRoutesMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
@@ -32,6 +41,14 @@ type
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
procedure ButtonFenPilClick(Sender: TObject);
|
||||
procedure ButtonParcours(Sender: TObject);
|
||||
procedure ButtonRafClick(Sender: TObject);
|
||||
procedure EditObligeCantonChange(Sender: TObject);
|
||||
procedure EditInterditCantonChange(Sender: TObject);
|
||||
procedure ButtonTrouverClick(Sender: TObject);
|
||||
procedure ListBoxRoutesDrawItem(Control: TWinControl; Index: Integer;
|
||||
Rect: TRect; State: TOwnerDrawState);
|
||||
procedure CheckBoxRoutesLonguesClick(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
@@ -41,7 +58,12 @@ type
|
||||
var
|
||||
FormRoute: TFormRoute;
|
||||
parcoursDet : TUneroute;
|
||||
AncLigneRoute,LigneRoute,IdTrainCourant : integer;
|
||||
CoulText : Tcolor;
|
||||
AncLigneRoute,NumRoute,AncRoute,IndexLigneRoute,IdTrainCourant,Nprop,NpropTot : integer;
|
||||
list_det_obl,list_det_int : array[1..20] of record
|
||||
adresse : integer;
|
||||
n :integer;
|
||||
end;
|
||||
|
||||
procedure raz_route_fenetre;
|
||||
procedure raz_toutes_routes;
|
||||
@@ -57,7 +79,7 @@ uses UnitDebug,unitTCO,UnitConfig, UnitRouteTrains;
|
||||
|
||||
// efface la route parcoursDet[]
|
||||
procedure efface_route_tco;
|
||||
var n,det1,det2,i,indexAig : integer;
|
||||
var n,det1,nti,x,y,det2,i,indexAig : integer;
|
||||
t : tequipement;
|
||||
begin
|
||||
n:=parcoursdet[0].adresse;
|
||||
@@ -88,6 +110,21 @@ begin
|
||||
aiguillage[indexAig].Position:=aiguillage[indexAig].AncPos; // restitue position
|
||||
end;
|
||||
end;
|
||||
|
||||
// rafraichir la position des aiguillages dans les TCO
|
||||
for nti:=1 to NbreTCO do
|
||||
begin
|
||||
for y:=1 to NbreCellY[nti] do
|
||||
for x:=1 to NbreCellX[nti] do
|
||||
begin
|
||||
if isAigTCO(tco[nti,x,y].BImage) then
|
||||
begin
|
||||
affiche_cellule(nti,x,y);
|
||||
// entoure_cell_grille(indexTCO,x,y);
|
||||
end;
|
||||
end;
|
||||
FormTCO[nti].Repaint;
|
||||
end;
|
||||
end;
|
||||
|
||||
// efface la fenetre et la route du tco
|
||||
@@ -96,11 +133,12 @@ begin
|
||||
efface_route_tco;
|
||||
|
||||
formRoute.ListBoxRoutes.Clear;
|
||||
ligneroute:=-1;
|
||||
Indexligneroute:=-1;
|
||||
NumRoute:=-1;
|
||||
end;
|
||||
|
||||
// Affiche sans effacer l'ancienne, la route du TCO du tableau ParcoursDet[]
|
||||
// détruit l'index du train dans le canton !!!!
|
||||
// détruit l'index du train dans le canton !!!!
|
||||
function Affiche_route_TCO : boolean ;
|
||||
var i,n,det1,det2,indexAig : integer;
|
||||
t :tequipement;
|
||||
@@ -117,12 +155,13 @@ begin
|
||||
begin
|
||||
indexaig:=index_aig(ParcoursDet[i].adresse);
|
||||
aiguillage[indexAig].AncPos:=aiguillage[IndexAig].position; // sauvegarder position
|
||||
//Affiche('Aig='+intToSTR(ParcoursDet[i].adresse)+' pos='+intToSTR(aiguillage[IndexAig].position),clYellow);
|
||||
aiguillage[indexAig].position:=ParcoursDet[i].pos; // forcer la position de l'aiguillage sue le parcours
|
||||
end; // car on utilise TRUE dans la fonction zone_tco
|
||||
if t=det then
|
||||
begin
|
||||
det2:=ParcoursDet[i].adresse;
|
||||
ok:=zone_tco(1,det1,det2,1,0,1,true) and ok;
|
||||
ok:=zone_tco(1,det1,det2,1,0,1,true) and ok; //çà efface laloco du canton
|
||||
det1:=det2;
|
||||
end;
|
||||
end;
|
||||
@@ -146,44 +185,45 @@ var n,id : integer;
|
||||
ok : boolean;
|
||||
s : string;
|
||||
begin
|
||||
AncLigneRoute:=LigneRoute;
|
||||
AncLigneRoute:=IndexLigneRoute;
|
||||
|
||||
if LigneRoute<0 then exit;
|
||||
id:=LigneRoute+1;
|
||||
formRoute.ButtonDetail.caption:='Détail route '+intToSTR(id);
|
||||
formRoute.ButtonEfface.caption:='Efface route '+intToSTR(id)+' du TCO';
|
||||
if IndexLigneRoute<0 then exit;
|
||||
id:=IndexLigneRoute;
|
||||
formRoute.ButtonDetail.caption:='Détail route '+intToSTR(id+1);
|
||||
formRoute.ButtonEfface.caption:='Efface route '+intToSTR(id+1)+' du TCO';
|
||||
|
||||
efface_route_tco;
|
||||
|
||||
// fabriquer le tableau parcoursDet[] depuis tabloRoute[]
|
||||
parcoursDet:=tabloRoute[id];
|
||||
parcoursDet:=tabloRoute[NumRoute];
|
||||
n:=ParcoursDet[0].adresse;
|
||||
|
||||
// Affiche les routes
|
||||
ok:=Affiche_route_tco;
|
||||
|
||||
s:='Route '+intToSTR(id)+'/'+intToSTR(NbreRoutes)+' : '+intToSTR(n)+' éléments';
|
||||
s:=intToSTR(Nprop)+' propositions - Route '+intToSTR(NumRoute)+'/'+intToSTR(NbreRoutes)+' : '+intToSTR(n)+' éléments';
|
||||
//if not(ok) then s:=s+' - Route pas affichable car des éléments ne sont pas au TCO';
|
||||
formRoute.LabelNombre.Caption:=s;
|
||||
end;
|
||||
|
||||
|
||||
// r: numéro de route
|
||||
procedure clic_route(r : integer);
|
||||
var idTrain : integer;
|
||||
begin
|
||||
LigneRoute:=r;
|
||||
// IndexLigneRoute:=r;
|
||||
// copier la route au train
|
||||
if (idcantonroute<1) or (ligneroute<0) then exit;
|
||||
if (idcantonroute<1) or (Indexligneroute<0) then exit;
|
||||
idTrain:=Index_Train_adresse(canton[idCantonRoute].AdrTrainRoute);
|
||||
//IdTrain:=canton[idcantonRoute].indexTrain;
|
||||
if idtrain<1 then
|
||||
if (idtrain<0) or (idTrain>Max_Trains) then
|
||||
begin
|
||||
// le train a été déplacé
|
||||
affiche('Anomalie 50',clred);
|
||||
exit;
|
||||
end;
|
||||
|
||||
trains[idTrain].route:=tabloroute[LigneRoute+1];
|
||||
if r<1 then exit;
|
||||
trains[idTrain].route:=tabloroute[r];
|
||||
|
||||
formRoute.ButtonFenPil.enabled:=trains[IdTrain].route[0].adresse<>0;
|
||||
|
||||
@@ -191,13 +231,96 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
// transforme la liste de chaine des cantons obligatoires en détecteurs
|
||||
procedure detObl_to_liste;
|
||||
var i,n,j,erreur :integer;
|
||||
s : string;
|
||||
begin
|
||||
// transformer la liste des cantons obligatoires en détecteurs
|
||||
for i:=1 to 20 do begin list_det_obl[i].adresse:=0;list_det_obl[i].n:=0;end;
|
||||
|
||||
i:=1;
|
||||
s:=formRoute.EditObligeCanton.text;
|
||||
while (length(s)>0) and (i<20) do
|
||||
begin
|
||||
val(s,n,erreur); // n= numéro de canton
|
||||
delete(s,1,erreur);
|
||||
while not(s='') and not(s[1] in ['0'..'9']) do
|
||||
begin
|
||||
delete(s,1,1);
|
||||
end;
|
||||
|
||||
if erreur=0 then s:='';
|
||||
j:=index_canton_numero(n);
|
||||
if j<>0 then
|
||||
begin
|
||||
if canton[j].typ1=det then
|
||||
begin
|
||||
list_det_obl[i].adresse:=canton[j].el1;
|
||||
inc(i);
|
||||
end;
|
||||
if canton[j].typ2=det then
|
||||
begin
|
||||
list_det_obl[i].adresse:=canton[j].el2;
|
||||
inc(i);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// transforme la liste de chaine des cantons interdits en détecteurs
|
||||
procedure detInt_to_liste;
|
||||
var i,n,j,erreur :integer;
|
||||
s : string;
|
||||
begin
|
||||
for i:=1 to 20 do begin list_det_int[i].adresse:=0;list_det_int[i].n:=0;end;
|
||||
|
||||
// transformer la liste des cantons interdits en détecteurs
|
||||
i:=1;
|
||||
s:=formRoute.EditInterditCanton.text;
|
||||
while (length(s)>0) and (i<20) do
|
||||
begin
|
||||
val(s,n,erreur); // n= numéro de canton
|
||||
delete(s,1,erreur);
|
||||
while not(s='') and not(s[1] in ['0'..'9']) do
|
||||
begin
|
||||
delete(s,1,1);
|
||||
end;
|
||||
|
||||
if erreur=0 then s:='';
|
||||
j:=index_canton_numero(n);
|
||||
if j<>0 then
|
||||
begin
|
||||
if canton[j].typ1=det then
|
||||
begin
|
||||
list_det_int[i].adresse:=canton[j].el1;
|
||||
//Affiche('détecteur interdit '+intToSTR(canton[j].el1),clOrange);
|
||||
inc(i);
|
||||
end;
|
||||
if canton[j].typ2=det then
|
||||
begin
|
||||
list_det_int[i].adresse:=canton[j].el2;
|
||||
//Affiche('détecteur interdit '+intToSTR(canton[j].el2),clOrange);
|
||||
inc(i);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// affiche les routes du train courant
|
||||
procedure maj_fenetre;
|
||||
var l,pluslongue,n,j,pixelLength : integer;
|
||||
var iI,iO,c,l,pluslongue,n,i,j,k,pixelLength,erreur,np : integer;
|
||||
s,chaineLongue : string;
|
||||
trouveObl,trouveint,aflongue : boolean;
|
||||
list_cantons_obl : array[1..10] of integer;
|
||||
|
||||
begin
|
||||
if (cantonorg=0) or (cantonDest=0) then FormRoute.caption:='Pas de canton depart/arrivée' else
|
||||
if (idcantonroute<1) or (cantonorg=0) or (cantonDest=0) then
|
||||
begin
|
||||
FormRoute.caption:='Pas de canton depart/arrivée';
|
||||
exit;
|
||||
end;
|
||||
Nprop:=0; NpropTot:=0;
|
||||
formRoute.caption:='Liste des routes trouvées du train '+canton[idcantonRoute].NomTrain+' pour aller de '+intToSTR(DetDepart)+' (canton '+intToSTR(cantonOrg)+
|
||||
') à '+intToSTR(DetaTrouve)+' (canton '+intToSTR(cantonDest)+')';
|
||||
plusLongue:=0;
|
||||
@@ -208,41 +331,92 @@ begin
|
||||
if idcantonRoute<>0 then formRoute.ListBoxRoutes.Hint:='Sélectionne une route pour l''affecter au train '+canton[idcantonRoute].NomTrain;
|
||||
formRoute.listBoxRoutes.Clear;
|
||||
|
||||
// trouver le canton dest d'après le canton origine cliqué
|
||||
if IdCantonClic=0 then exit;
|
||||
idCantonRoute:=index_canton_numero(canton[idCantonClic].NumcantonOrg);
|
||||
|
||||
if idcantonroute<>0 then
|
||||
IdCantonClic:=Idcantonroute;
|
||||
IdTrainCourant:=canton[idcantonRoute].indexTrain;
|
||||
if idTrainCourant>9000 then
|
||||
begin
|
||||
IdTrainCourant:=canton[idcantonRoute].indexTrain;
|
||||
if idTrainCourant>9000 then
|
||||
begin
|
||||
Affiche('Anomalie 626 ',clred);
|
||||
messageBeep(Mb_iconError);
|
||||
exit;
|
||||
end;
|
||||
end
|
||||
else idtraincourant:=0;
|
||||
Affiche('Anomalie 626 ',clred);
|
||||
messageBeep(Mb_iconError);
|
||||
exit;
|
||||
end;
|
||||
|
||||
if NbreRoutes>0 then FormRoute.labelInfo.Caption:='Cliquer sur une route pour la visualiser sur le TCO et l''affecter au train';
|
||||
|
||||
Screen.Cursor:=crSQLWait;
|
||||
|
||||
// regarder chaque route pour les détecteurs obligatoires / interdits et l'afficher
|
||||
aflongue:=FormRoute.checkBoxRoutesLongues.checked;
|
||||
np:=tabloroute[1,0].adresse;
|
||||
for j:=1 to NbreRoutes do
|
||||
begin
|
||||
// compter le nombre de détecteur obligatoires et interdits
|
||||
iO:=1;
|
||||
for k:=1 to 20 do begin list_det_obl[k].n:=0;list_det_int[k].n:=0;end;
|
||||
n:=tabloroute[j,0].adresse;
|
||||
s:=intToSTR(j)+'. ';
|
||||
s:=s+route_to_string(tabloroute[j]);
|
||||
l:=Length(s);
|
||||
if l>pluslongue then
|
||||
// obligatoires
|
||||
while (iO<=20) and (list_det_obl[iO].adresse<>0) do
|
||||
begin
|
||||
chainelongue:=s;
|
||||
pluslongue:=l;
|
||||
for k:=1 to n do
|
||||
begin
|
||||
if (tabloroute[j,k].typ=det) and (list_det_obl[iO].adresse=tabloroute[j,k].adresse) then inc(list_Det_obl[iO].n);
|
||||
end;
|
||||
inc(iO);
|
||||
end;
|
||||
// interdits
|
||||
iI:=1;
|
||||
while (iI<=20) and (list_det_int[iI].adresse<>0) do
|
||||
begin
|
||||
for k:=1 to n do
|
||||
begin
|
||||
if (tabloroute[j,k].typ=det) and (list_det_int[iI].adresse=tabloroute[j,k].adresse) then inc(list_Det_int[iI].n);
|
||||
end;
|
||||
inc(iI);
|
||||
end;
|
||||
|
||||
FormRoute.listBoxRoutes.Items.Add(s);
|
||||
trouveObl:=true;
|
||||
trouveInt:=false;
|
||||
// trouver si cette route j contient tous détecteurs obligatoires
|
||||
// ou des détecteurs interdits
|
||||
for k:=1 to iI-1 do
|
||||
begin
|
||||
trouveInt:=TrouveInt or (list_det_int[k].n>0);
|
||||
end;
|
||||
// obligatoires
|
||||
for k:=1 to iO-1 do
|
||||
begin
|
||||
trouveObl:=TrouveObl and (list_det_obl[k].n>0);
|
||||
end;
|
||||
if trouveObl and not trouveint then
|
||||
begin
|
||||
s:=intToSTR(j)+'. ';
|
||||
s:=s+route_restreinte_to_string(tabloroute[j]);
|
||||
l:=Length(s);
|
||||
if l>pluslongue then
|
||||
begin
|
||||
chainelongue:=s;
|
||||
pluslongue:=l;
|
||||
end;
|
||||
inc(NpropTot);
|
||||
if round(n/np)>2 then
|
||||
begin
|
||||
if afLongue then
|
||||
begin
|
||||
coulText:=clOrange;
|
||||
FormRoute.ListBoxRoutes.Items.AddObject(s,pointer(CoulText)); // permet d'afficher un texte en couleurs avec l'evt onDrawItem
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
inc(Nprop);
|
||||
coulText:=clYellow;
|
||||
FormRoute.ListBoxRoutes.Items.AddObject(s,pointer(CoulText)); // permet d'afficher un texte en couleurs avec l'evt onDrawItem
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Screen.Cursor:=crDefault;
|
||||
|
||||
PixelLength:=FormRoute.ListboxRoutes.Canvas.TextWidth(chaineLongue)+30;
|
||||
// positionne une scrollbar dans la listbox - pour l'enlever, envoyer 0 dans pixelLength
|
||||
// positionne une scrollbar dans la listbox - pour l'enlever, envoyer 0 dans pixelLength
|
||||
SendMessage(FormRoute.ListBoxRoutes.Handle,LB_SETHORIZONTALEXTENT,PixelLength,0);
|
||||
|
||||
// icone train
|
||||
@@ -251,18 +425,28 @@ begin
|
||||
formRoute.ButtonFenPil.enabled:=trains[IdTrainCourant].route[0].adresse<>0;
|
||||
|
||||
if NbreRoutes=1 then clic_route(0);
|
||||
|
||||
s:=intToSTR(Nprop)+' propositions - Route '+intToSTR(NumRoute)+'/'+intToSTR(NbreRoutes)+' : '+intToSTR(n)+' éléments';
|
||||
FormRoute.LabelNombre.caption:=s;
|
||||
|
||||
end;
|
||||
|
||||
procedure TFormRoute.FormActivate(Sender: TObject);
|
||||
begin
|
||||
maj_fenetre;
|
||||
coulText:=clYellow;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ListBoxRoutesMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
var s : string;
|
||||
erreur : integer;
|
||||
begin
|
||||
LigneRoute:=listBoxRoutes.Itemindex;
|
||||
clic_route(ligneRoute);
|
||||
IndexLigneRoute:=listBoxRoutes.Itemindex;
|
||||
if IndexLigneRoute<0 then exit;
|
||||
s:=ListBoxRoutes.items[IndexLigneRoute];
|
||||
val(s,NumRoute,erreur);
|
||||
clic_route(NumRoute);
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ButtonEffaceClick(Sender: TObject);
|
||||
@@ -281,7 +465,8 @@ var i,j,n,p : integer;
|
||||
s : string;
|
||||
typ : tequipement;
|
||||
begin
|
||||
if ligneroute<0 then exit;
|
||||
if (Indexligneroute<0) or (NumRoute<1) then exit;
|
||||
|
||||
with formprinc do
|
||||
begin
|
||||
windowState:=wsNormal; //Maximized;
|
||||
@@ -289,12 +474,12 @@ begin
|
||||
BringToFront;
|
||||
end;
|
||||
|
||||
j:=ligneroute+1;
|
||||
j:=Indexligneroute+1;
|
||||
n:=tabloroute[j,0].adresse;
|
||||
Affiche('Route '+intToSTR(j)+' ---------------n='+intToSTR(n),clwhite);
|
||||
for i:=1 to n do
|
||||
begin
|
||||
s:=intToSTR(tabloroute[j,i].adresse)+' '+BTypeToChaine(tabloroute[j,i].typ)+' ';
|
||||
s:=intToSTR(i)+' : '+intToSTR(tabloroute[j,i].adresse)+' '+BTypeToChaine(tabloroute[j,i].typ)+' ';
|
||||
p:=tabloRoute[j,i].pos;
|
||||
typ:=tabloRoute[j,i].typ;
|
||||
if (typ=aig) or (typ=tjd) or (typ=tjs) or (typ=triple) then
|
||||
@@ -367,17 +552,23 @@ end;
|
||||
|
||||
procedure TFormRoute.ListBoxRoutesKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
var s : string;
|
||||
erreur : integer;
|
||||
begin
|
||||
if (ord(Key)=VK_UP) and (ligneroute>0) then
|
||||
if indexLigneRoute<0 then exit;
|
||||
if (ord(Key)=VK_UP) and (Indexligneroute>0) then
|
||||
begin
|
||||
dec(ligneRoute);
|
||||
efface_affiche_route;
|
||||
dec(IndexligneRoute);
|
||||
end;
|
||||
if (ord(Key)=VK_DOWN) and (ligneroute+1<NbreRoutes) then
|
||||
if (ord(Key)=VK_DOWN) and (Indexligneroute+1<ListBoxRoutes.Count) then
|
||||
begin
|
||||
inc(ligneRoute);
|
||||
efface_affiche_route;
|
||||
inc(IndexligneRoute);
|
||||
end;
|
||||
//Affiche('9985 '+intToSTR(indexLigneROute)+'/'+intToSTR(Nprop),clWhite);
|
||||
s:=ListBoxRoutes.items[IndexLigneRoute];
|
||||
|
||||
val(s,NumRoute,erreur);
|
||||
efface_affiche_route;
|
||||
end;
|
||||
|
||||
|
||||
@@ -385,7 +576,12 @@ procedure TFormRoute.FormCreate(Sender: TObject);
|
||||
begin
|
||||
ButtonFenPil.hint:='Ouvre la fenêtre de pilotage des trains'+#13+'ce qui permet de lancer leur roulage';
|
||||
ButtonDetail.hint:='Affiche le détail de la route en fenêtre principale';
|
||||
EditObligeCanton.Text:='aucun';
|
||||
EditInterditCanton.Text:='aucun';
|
||||
EditObligeCanton.Hint:='Numéro de cantons séparés par des virgules (10 maxi)'+#13+'Laisser vide pour aucune obligation';
|
||||
EditInterditCanton.Hint:='Numéro de cantons séparés par des virgules (10 maxi)'+#13+'Laisser vide pour aucune interdiction';
|
||||
|
||||
ListBoxRoutes.Style:=lbOwnerDrawFixed; // pour déclencher l'evt on drawitem
|
||||
// fenêtre toujours devant
|
||||
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NoMove or SWP_NoSize);
|
||||
end;
|
||||
@@ -413,9 +609,119 @@ end;
|
||||
|
||||
procedure TFormRoute.ButtonFenPilClick(Sender: TObject);
|
||||
begin
|
||||
if idcantonRoute<1 then exit;
|
||||
indexTrainFR:=canton[idcantonRoute].indexTrain;
|
||||
FormRouteTrain.show;
|
||||
close;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ButtonParcours(Sender: TObject);
|
||||
var i,j,n,p,det1,det2 : integer;
|
||||
s : string;
|
||||
typ : tequipement;
|
||||
begin
|
||||
if (Indexligneroute<0) or (NumRoute<1) then exit;
|
||||
efface_route_tco;
|
||||
hide;
|
||||
j:=NumRoute;
|
||||
n:=tabloroute[j,0].adresse;
|
||||
i:=1;
|
||||
det2:=0;
|
||||
toucheTCO:=#0;
|
||||
repeat
|
||||
s:=intToSTR(tabloroute[j,i].adresse)+' '+BTypeToChaine(tabloroute[j,i].typ)+' ';
|
||||
p:=tabloRoute[j,i].pos;
|
||||
typ:=tabloRoute[j,i].typ;
|
||||
|
||||
if typ=det then
|
||||
begin // attention on ne gère que le TCO1
|
||||
Zone_TCO(1,det1,det2,1,0,0,false); // faire true et positionner les aiguillages
|
||||
det1:=det2;
|
||||
det2:=tabloroute[j,i].adresse;
|
||||
Zone_TCO(1,det1,det2,1,0,1,false);
|
||||
FormTCO[1].Caption:=intToSTR(i)+'/'+intToSTR(n)+' '+intToSTR(det1)+' '+intToSTR(det2)+ ' Arrêt par touche Echap';
|
||||
//Affiche(intToSTR(det1)+' '+intToSTR(det2),clyellow);
|
||||
end;
|
||||
|
||||
Application.ProcessMessages;
|
||||
Sleep(500);
|
||||
|
||||
inc(i);
|
||||
until (i>n) or (toucheTCO=#27);
|
||||
titre_fenetre(1);
|
||||
Show;
|
||||
//Affiche('Fini',clred);
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ButtonRafClick(Sender: TObject);
|
||||
begin
|
||||
maj_fenetre;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.EditObligeCantonChange(Sender: TObject);
|
||||
begin
|
||||
detObl_to_liste;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.EditInterditCantonChange(Sender: TObject);
|
||||
begin
|
||||
detInt_to_liste;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ButtonTrouverClick(Sender: TObject);
|
||||
var sens,sensCanton,indexTCO,IdCantonOrg : integer;
|
||||
begin
|
||||
if cantonOrg=0 then exit;
|
||||
|
||||
IdCantonOrg:=index_canton_numero(cantonOrg);
|
||||
//IdCantonDest:=index_canton_numero(cantonDest);
|
||||
sensCanton:=canton[IdCantonOrg].sensLoco;
|
||||
case sensCanton of // sens de la loco dans le canton
|
||||
sensGauche : begin sens:=SensTCO_O;end;
|
||||
sensDroit : begin sens:=SensTCO_E;end;
|
||||
SensHaut : begin sens:=SensTCO_N;end;
|
||||
SensBas : begin sens:=SensTCO_S;end;
|
||||
end;
|
||||
IndexTCO:=canton[IdcantonOrg].Ntco;
|
||||
prepare_route(IndexTCO,CantonOrg,DetaTrouve,sens);
|
||||
maj_fenetre;
|
||||
|
||||
end;
|
||||
|
||||
procedure TFormRoute.ListBoxRoutesDrawItem(Control: TWinControl;
|
||||
Index: Integer; Rect: TRect; State: TOwnerDrawState);
|
||||
var
|
||||
myColor: TColor;
|
||||
myBrush: TBrush;
|
||||
myPen : Tpen;
|
||||
begin
|
||||
myBrush := TBrush.Create;
|
||||
with (Control as TListBox).Canvas do // draw on control canvas, not on the form
|
||||
begin
|
||||
{ if Index = 3 then
|
||||
myColor := clRed
|
||||
else
|
||||
myColor := clBlack;
|
||||
}
|
||||
//myBrush.Style := bsSolid;
|
||||
//myBrush.Color := myColor;
|
||||
|
||||
//Windows.FillRect(handle, Rect, myBrush.Handle);
|
||||
//Pen.color:=clWhite;//CoulText;
|
||||
//myBrush.color:=clBlue;
|
||||
//Brush.Style := bsClear;
|
||||
// display the text
|
||||
// TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
|
||||
//MyBrush.Free;
|
||||
FillRect(Rect);
|
||||
Font.Color := TColor(ListBoxRoutes.Items.Objects[Index]);
|
||||
TextOut(Rect.Left + 2, Rect.Top, ListBoxRoutes.Items[Index]);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFormRoute.CheckBoxRoutesLonguesClick(Sender: TObject);
|
||||
begin
|
||||
Maj_fenetre;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
+17
-5
@@ -43,8 +43,8 @@ object FormRouteTrain: TFormRouteTrain
|
||||
end
|
||||
object ButtonQuitte: TButton
|
||||
Left = 8
|
||||
Top = 118
|
||||
Width = 89
|
||||
Top = 120
|
||||
Width = 81
|
||||
Height = 33
|
||||
Caption = 'Quitter'
|
||||
TabOrder = 1
|
||||
@@ -93,9 +93,9 @@ object FormRouteTrain: TFormRouteTrain
|
||||
OnClick = ButtonSupprimeClick
|
||||
end
|
||||
object ButtonRouler1Tr: TButton
|
||||
Left = 256
|
||||
Left = 280
|
||||
Top = 120
|
||||
Width = 107
|
||||
Width = 83
|
||||
Height = 33
|
||||
Hint = 'Roule le train s'#233'lectionn'#233' s'#39'il dispose d'#39'une route'
|
||||
Caption = 'Rouler le train'
|
||||
@@ -106,7 +106,7 @@ object FormRouteTrain: TFormRouteTrain
|
||||
OnClick = ButtonRouler1TrClick
|
||||
end
|
||||
object ButtonRoulerTsTrains: TButton
|
||||
Left = 168
|
||||
Left = 192
|
||||
Top = 120
|
||||
Width = 75
|
||||
Height = 33
|
||||
@@ -118,4 +118,16 @@ object FormRouteTrain: TFormRouteTrain
|
||||
WordWrap = True
|
||||
OnClick = ButtonRoulerTsTrainsClick
|
||||
end
|
||||
object ButtonSauveRoute: TButton
|
||||
Left = 104
|
||||
Top = 120
|
||||
Width = 81
|
||||
Height = 33
|
||||
Hint = 'Sauve la route et l'#39'affecte '#224' ce train'
|
||||
Caption = 'Sauve route'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 7
|
||||
OnClick = ButtonSauveRouteClick
|
||||
end
|
||||
end
|
||||
|
||||
+318
-50
@@ -20,6 +20,7 @@ type
|
||||
ButtonSupprime: TButton;
|
||||
ButtonRouler1Tr: TButton;
|
||||
ButtonRoulerTsTrains: TButton;
|
||||
ButtonSauveRoute: TButton;
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure ButtonQuitteClick(Sender: TObject);
|
||||
procedure ComboBoxTrainsChange(Sender: TObject);
|
||||
@@ -30,6 +31,7 @@ type
|
||||
procedure ButtonSupprimeClick(Sender: TObject);
|
||||
procedure ButtonRouler1TrClick(Sender: TObject);
|
||||
procedure ButtonRoulerTsTrainsClick(Sender: TObject);
|
||||
procedure ButtonSauveRouteClick(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
@@ -78,7 +80,10 @@ begin
|
||||
if trouve then
|
||||
begin
|
||||
trains[indexTrain].dernierdet:=detect;
|
||||
if not(diffusion) then Affiche('Le détecteur du train '+train+' est le '+intToSTR(detect),clWhite);
|
||||
if debugRoulage then
|
||||
begin
|
||||
Affiche('Le détecteur du train '+train+' est le '+intToSTR(detect),clWhite);
|
||||
end;
|
||||
|
||||
index_signal_det(detect,voie1,indexSig1,voie2,indexSig2);
|
||||
AdrSig1:=0;AdrSig2:=0;
|
||||
@@ -163,6 +168,8 @@ begin
|
||||
|
||||
if not(roulage) then exit;
|
||||
|
||||
|
||||
|
||||
s:='Lancement du train '+train;
|
||||
if detect<>0 then s:=s+' depuis détecteur '+intToSTR(Detect);
|
||||
Affiche(s,clYellow);
|
||||
@@ -195,7 +202,7 @@ begin
|
||||
with formRouteTrain do
|
||||
begin
|
||||
RicheditRoute.Clear;
|
||||
RichEditRoute.Lines.Add(route_to_string(trains[idTrain].route));
|
||||
RichEditRoute.Lines.Add(route_restreinte_to_string(trains[idTrain].route));
|
||||
if trains[idtrain].route[0].adresse<>0 then
|
||||
begin
|
||||
labelroute.caption:='Route affectée au train '+trains[idtrain].nom_train;
|
||||
@@ -264,6 +271,7 @@ begin
|
||||
|
||||
supprime_route_train(indexTrainFR);
|
||||
maj_infos(indexTrainFR);
|
||||
close;
|
||||
end;
|
||||
|
||||
// Réserve les éléments s'ils ne sont pas déja réservés et positionne les aiguillages
|
||||
@@ -271,12 +279,12 @@ end;
|
||||
// en entrée : index du train ; detect=détecteur à partir duquel faire la réservation et le positionnement des aiguillages
|
||||
// en sortie : si erreur : -1 ou adresse du train qui a réservé le canton
|
||||
// phase 0 : si le détecteur detect est en fin de route, alors on active l'arret du train
|
||||
// phase 1 : tester si éléments réservés par train tiers jusqu'au signal suivant. Si oui, sortir.
|
||||
// phase 1 : tester si éléments réservés par train tiers jusqu'aux cantons suivants. Si oui, sortir.
|
||||
// phase 2 : positionner les aiguillages
|
||||
// phase 3 : réserver les aiguillages
|
||||
function aig_canton(idTrain,detect : integer) : integer;
|
||||
var AdrSig,n,i,ic,j,ideb,iFin,AdrTrain,etat,pointeur,voie1,voie2,indexSig1,indexSig2,
|
||||
Trainexistant,adr,pos,index,Ncanton,icanton,NumCanton,pr,det_arret,it,PointRoute,ElPrec,
|
||||
var AdrSig,n,i,ic,j,ideb,iFin,AdrTrain,etat,pointeur,voie1,voie2,indexSig1,indexSig2,AncPr,
|
||||
Trainexistant,adr,pos,index,Ncanton,icanton,NumCanton,det_arret,it,PointRoute,ElPrec,
|
||||
adr2 : integer;
|
||||
typ,tprec: tequipement;
|
||||
trainTiers,SigBonSens,trouve : boolean;
|
||||
@@ -284,7 +292,7 @@ var AdrSig,n,i,ic,j,ideb,iFin,AdrTrain,etat,pointeur,voie1,voie2,indexSig1,index
|
||||
begin
|
||||
//traceliste:=true;
|
||||
if ProcPrinc then AfficheDebug('Aig_canton '+intToSTR(idTrain)+' '+intToSTR(detect),clWhite);
|
||||
if not(diffusion) then Affiche('Aig_canton '+intToSTR(idTrain)+' '+intToSTR(detect),clWhite);
|
||||
if debugRoulage then Affiche('Aig_canton '+intToSTR(idTrain)+' '+intToSTR(detect),clWhite);
|
||||
result:=0;
|
||||
|
||||
If traceliste then
|
||||
@@ -303,7 +311,7 @@ begin
|
||||
i:=pointeur-1;
|
||||
if i=0 then i:=1; // on commence à 1
|
||||
|
||||
if traceListe then
|
||||
if DebugRoulage then
|
||||
begin
|
||||
Affiche('AC train @'+intToSTR(AdrTrain)+'Detecteur='+intToSTR(detect)+' Pointeur'+intToSTR(pointeur)+' ->'+intToSTR(trains[idTrain].route[i].adresse),clOrange);
|
||||
if i>=n then
|
||||
@@ -314,17 +322,18 @@ begin
|
||||
end;
|
||||
|
||||
j:=1;
|
||||
pr:=trains[idTrain].PointRout;
|
||||
AncPr:=trains[idTrain].PointRout;
|
||||
repeat
|
||||
if (trains[idTrain].route[j].adresse=detect) and (trains[idTrain].route[j].typ=det) and (j>pr) then
|
||||
|
||||
trouve:=(trains[idTrain].route[j].adresse=detect) and (trains[idTrain].route[j].typ=det) and (j>=AncPr);
|
||||
if trouve then
|
||||
begin
|
||||
trains[idTrain].PointRout:=j;
|
||||
PointRoute:=j;
|
||||
//Affiche('Le pointeur de route est '+intToSTR(j)+' au détecteur '+intToSTR(detect),clred);
|
||||
if DebugRoulage then Affiche('Le pointeur de route est '+intToSTR(j)+'/'+intToSTR(n)+' au détecteur '+intToSTR(detect),clWhite);
|
||||
end;
|
||||
inc(j);
|
||||
until j>n;
|
||||
|
||||
until trouve or (j>n);
|
||||
|
||||
// arrêt sur détecteur demandé
|
||||
trouve:=false;
|
||||
@@ -344,36 +353,42 @@ begin
|
||||
adr2:=aiguillage[j].DDroit; // homologue
|
||||
end;
|
||||
end;
|
||||
if not(diffusion) and (Det_arret<>0) then Affiche('Détecteur demande arrêt rencontré ('+intToSTR(det_arret)+')',clYellow);
|
||||
if debugRoulage and (Det_arret<>0) then Affiche('Détecteur demande arrêt rencontré ('+intToSTR(det_arret)+')',clYellow);
|
||||
// detecteur courant=arret
|
||||
if (det_arret=detect) and (detecteur[detect].etat) and (trains[idTrain].route[PointRoute-1].adresse=ElPrec) and (trains[idTrain].route[PointRoute-1].typ=tPrec) then
|
||||
if (det_arret=detect) and (detecteur[detect].etat) and
|
||||
(trains[idTrain].route[PointRoute-1].adresse=ElPrec) and (trains[idTrain].route[PointRoute-1].typ=tPrec) and
|
||||
(pointroute<n) then
|
||||
begin
|
||||
Affiche('Demande arrêt train '+trains[idTrain].nom_train+' '+intToSTR(trains[idTrain].DetecteurArret[it].temps)+'s sur détecteur '+inttoStr(detect)+' prec='+intToSTR(trains[idTrain].route[PointRoute-1].adresse),ClOrange);
|
||||
trains[idTrain].TempoArret:=50;
|
||||
//trains[idTrain].TempoArret:=2;
|
||||
trains[idTrain].TempoArretTemp:=trains[idTrain].DetecteurArret[it].temps*10;
|
||||
trains[idTrain].arret_det:=true;
|
||||
trains[idTrain].phase_arret:=0;
|
||||
trouve:=true;
|
||||
end;
|
||||
inc(it);
|
||||
until (it>NbDetArret) or trouve;
|
||||
|
||||
if (detect=trains[idTrain].route[n].adresse) and (trains[idTrain].route[n].typ=det) then
|
||||
if pointRoute>=n then
|
||||
begin
|
||||
// route traitée , arrêter le train
|
||||
trains[idTrain].TempoArretCour:=0;
|
||||
trains[idTrain].TempoArret:=50;
|
||||
if debugRoulage then Affiche('AC - Route terminée *****',clred);
|
||||
trains[idTrain].arret_det:=true;
|
||||
Trains[idTrain].phase_arret:=0;
|
||||
end;
|
||||
|
||||
traintiers:=false;
|
||||
icanton:=0;
|
||||
ncanton:=0;
|
||||
TrainExistant:=0;
|
||||
ideb:=i;
|
||||
ideb:=trains[idTrain].PointRout;
|
||||
AdrSig:=0;
|
||||
SigBonSens:=false;
|
||||
//TraceListe:=true;
|
||||
if traceliste then Affiche('Aiguillages',clOrange);
|
||||
with trains[idtrain] do
|
||||
begin
|
||||
// boucle de vérification de réservation des aiguillages par un train tiers, jusqu'à rencontrer n cantons
|
||||
// boucle de vérification de réservation des aiguillages par un train même lui même, jusqu'à rencontrer n cantons
|
||||
repeat
|
||||
typ:=route[i].typ;
|
||||
adr:=route[i].adresse;
|
||||
@@ -383,7 +398,244 @@ begin
|
||||
if TraceListe then Affiche(intToSTR(adr)+' ',clOrange);
|
||||
// vérifier si l'aiguillage est libre
|
||||
TrainExistant:=Aiguillage[index_aig(adr)].AdrTrain;
|
||||
if (trainexistant<>AdrTrain) and (TrainExistant<>0) then
|
||||
//if (trainexistant<>AdrTrain) and (TrainExistant<>0) then
|
||||
if (TrainExistant<>0) then
|
||||
begin
|
||||
result:=TrainExistant;
|
||||
trains[idtrain].roulage:=1;
|
||||
trainTiers:=true;
|
||||
if traceListe then Affiche('AC-Aiguillage '+intToSTR(adr)+' réservé par autre train : @='+intToSTR(result),clyellow);
|
||||
end;
|
||||
end;
|
||||
if (typ=det) then
|
||||
begin
|
||||
TrainExistant:=detecteur[adr].AdrTrainRes;
|
||||
if (TrainExistant<>AdrTrain) and (trainExistant<>0) then
|
||||
begin
|
||||
result:=TrainExistant;
|
||||
trains[idtrain].roulage:=1; // le roulage est arrêté
|
||||
traintiers:=true;
|
||||
if traceListe then Affiche('AC-Détecteur '+intToSTR(adr)+' réservé par autre train : @='+intToSTR(result),clyellow);
|
||||
//exit;
|
||||
end;
|
||||
// si détecteur comporte signal
|
||||
index_signal_det(adr,voie1,indexSig1,voie2,indexSig2);
|
||||
if indexSig1<>0 then
|
||||
begin
|
||||
AdrSig:=0;
|
||||
// si le signal est dans le bon sens
|
||||
if (i+1<=n) then // si on arrive pas en bout de route
|
||||
begin
|
||||
if (signaux[indexSig1].Adr_el_suiv1=route[i+1].adresse) then
|
||||
begin
|
||||
AdrSig:=signaux[indexSig1].adresse;
|
||||
if TraceListe then Affiche('AC-Trouvé signal '+intToSTR(AdrSig)+' dans bon sens',clYellow);
|
||||
inc(nCanton);
|
||||
icanton:=i;
|
||||
SigBonSens:=true;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if TraceListe then Affiche('AC-Trouvé signal '+intToSTR(signaux[indexSig1].adresse)+' dans mauvais sens',clYellow);
|
||||
end;
|
||||
|
||||
if indexSig2<>0 then
|
||||
begin
|
||||
if (signaux[indexSig2].Adr_el_suiv1=route[i+1].adresse) then
|
||||
begin
|
||||
AdrSig:=signaux[indexSig2].adresse;
|
||||
if TraceListe then Affiche('AC-Trouvé signal '+intToSTR(AdrSig)+' dans bon sens',clYellow);
|
||||
inc(nCanton);
|
||||
icanton:=i;
|
||||
SigBonSens:=true;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if TraceListe then Affiche('AC-Trouvé signal '+intToSTR(signaux[indexSig2].adresse)+' dans mauvais sens',clYellow);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
inc(i);
|
||||
until (i>n) or (SigBonSens and (nCanton=nCantonsRes+1)) or (trainTiers);
|
||||
|
||||
if traceliste then affiche('Phase 2-3',clWhite);
|
||||
// phases 2 et 3
|
||||
trains[idtrain].roulage:=2; // roulage effectif
|
||||
result:=AdrTrain;
|
||||
if not(traintiers) then iFin:=i-1 else iFin:=icanton;
|
||||
AdrTrain:=trains[idTrain].adresse;
|
||||
|
||||
// balayage du (des) cantons libres -------------------------------------------------------------
|
||||
if traceListe or debugRoulage then Affiche('Balayage de '+intToSTR(ideb)+' à '+intToSTR(ifin)+' pour positionner et réserver aiguillages',clYellow);
|
||||
for i:=iDeb to iFin do
|
||||
begin
|
||||
route[i].traite:=true;
|
||||
typ:=route[i].typ;
|
||||
adr:=route[i].adresse;
|
||||
if (typ=aig) or (typ=triple) or (typ=tjs) or (typ=tjd) or (typ=crois) then
|
||||
begin
|
||||
pos:=route[i].pos;
|
||||
index:=index_aig(adr);
|
||||
|
||||
if ((typ=aig) or (typ=triple) or (typ=tjs) or (typ=tjd)) then
|
||||
begin
|
||||
if aiguillage[index].AdrTrain=0 then
|
||||
begin
|
||||
pilote_acc(adr,pos,AdrTrain); // pilote l'aig si il est reservé par le train ou non réservé
|
||||
s:='AC-Pilote aiguillage '+intToSTR(adr)+'='+intToSTR(pos);
|
||||
case pos of
|
||||
const_devie : s:=s+' (dévié)';
|
||||
const_droit : s:=s+' (droit)';
|
||||
else
|
||||
s:=s+' non positionné';
|
||||
end;
|
||||
if debugRoulage then Affiche(s,clWhite);
|
||||
if portCommOuvert or parSocketLenz or CDM_connecte then sleep(Tempo_Aig);
|
||||
// réservation
|
||||
Affiche('Réservation Aig '+intToSTR(adr),clCyan);
|
||||
aiguillage[index].adrTrain:=AdrTrain;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if typ=det then
|
||||
begin
|
||||
detecteur[adr].AdrTrainRes:=adrTrain;
|
||||
end;
|
||||
Texte_aig_fond(adr);
|
||||
end;
|
||||
end;
|
||||
maj_signaux(false);
|
||||
//TraceListe:=false;
|
||||
end;
|
||||
|
||||
// Réserve les éléments s'ils ne sont pas déja réservés et positionne les aiguillages
|
||||
// jusqu'au signal suivant (soit 1 canton)
|
||||
// en entrée : index du train ; detect=détecteur à partir duquel faire la réservation et le positionnement des aiguillages
|
||||
// en sortie : si erreur : -1 ou adresse du train qui a réservé le canton
|
||||
// phase 0 : si le détecteur detect est en fin de route, alors on active l'arret du train
|
||||
// phase 1 : tester si éléments réservés par train tiers jusqu'aux cantons suivants. Si oui, sortir.
|
||||
// phase 2 : positionner les aiguillages
|
||||
// phase 3 : réserver les aiguillages
|
||||
function aig_cantonX(idTrain,detect : integer) : integer;
|
||||
var AdrSig,n,i,ic,j,ideb,iFin,AdrTrain,etat,pointeur,voie1,voie2,indexSig1,indexSig2,AncPr,
|
||||
Trainexistant,adr,pos,index,Ncanton,icanton,NumCanton,det_arret,it,PointRoute,ElPrec,
|
||||
adr2 : integer;
|
||||
typ,tprec: tequipement;
|
||||
trainTiers,SigBonSens,trouve : boolean;
|
||||
s : string;
|
||||
begin
|
||||
//traceliste:=true;
|
||||
if ProcPrinc then AfficheDebug('Aig_canton '+intToSTR(idTrain)+' '+intToSTR(detect),clWhite);
|
||||
if debugRoulage then Affiche('Aig_canton '+intToSTR(idTrain)+' '+intToSTR(detect),clWhite);
|
||||
result:=0;
|
||||
|
||||
If traceliste then
|
||||
begin
|
||||
if detecteur[detect].Etat then etat:=1 else etat:=0;
|
||||
affiche('Aig_canton Train id='+intToSTR(idtrain)+' '+intToSTR(detect)+' à '+intToSTR(etat)+'---------------Phase 1',clWhite);
|
||||
end;
|
||||
AdrTrain:=trains[idTrain].adresse;
|
||||
|
||||
pointeur:=0;
|
||||
n:=trains[idTrain].route[0].adresse;
|
||||
repeat
|
||||
inc(pointeur);
|
||||
until (trains[idTrain].route[pointeur].traite=false) or (pointeur+1>=n);
|
||||
|
||||
i:=pointeur-1;
|
||||
if i=0 then i:=1; // on commence à 1
|
||||
|
||||
if DebugRoulage then
|
||||
begin
|
||||
Affiche('AC train @'+intToSTR(AdrTrain)+'Detecteur='+intToSTR(detect)+' Pointeur'+intToSTR(pointeur)+' ->'+intToSTR(trains[idTrain].route[i].adresse),clOrange);
|
||||
if i>=n then
|
||||
begin
|
||||
affiche('La route a été complètement traitée (réservation)',clOrange);
|
||||
result:=0;
|
||||
end;
|
||||
end;
|
||||
|
||||
// mettre le pointeur de route j sur le détecteur "detect", après le pointeur 'AncPr'
|
||||
j:=1;
|
||||
AncPr:=trains[idTrain].PointRout;
|
||||
repeat
|
||||
trouve:=(trains[idTrain].route[j].adresse=detect) and (trains[idTrain].route[j].typ=det) and (j>=AncPr);
|
||||
if trouve then
|
||||
begin
|
||||
trains[idTrain].PointRout:=j; //<<<<<<<<< le pointeur est stocké
|
||||
PointRoute:=j;
|
||||
if DebugRoulage then Affiche('Le pointeur de route est '+intToSTR(j)+'/'+intToSTR(n)+' au détecteur '+intToSTR(detect),clWhite);
|
||||
end;
|
||||
inc(j);
|
||||
until trouve or (j>n);
|
||||
|
||||
// arrêt temporisé sur détecteur demandé
|
||||
trouve:=false;
|
||||
it:=1; // boucle de détecteurs dans les trains
|
||||
if roulage and (trains[idTrain].roulage>0) and (pointRoute>1) then
|
||||
repeat
|
||||
det_arret:=trains[idTrain].DetecteurArret[it].detecteur;
|
||||
elPrec:=trains[idTrain].DetecteurArret[it].prec;
|
||||
Tprec:=trains[idTrain].DetecteurArret[it].tprec;
|
||||
adr2:=0;
|
||||
// si le précédent est une TJD 4 états il faut tester les 2 adresses
|
||||
if Tprec=aig then
|
||||
begin
|
||||
j:=index_aig(elprec);
|
||||
if (aiguillage[j].modele=tjd) and (aiguillage[j].EtatTJD=4) then
|
||||
begin
|
||||
adr2:=aiguillage[j].DDroit; // homologue
|
||||
end;
|
||||
end;
|
||||
if debugRoulage and (Det_arret<>0) then Affiche('Détecteur demande arrêt rencontré ('+intToSTR(det_arret)+')',clYellow);
|
||||
// detecteur courant=arret
|
||||
if (det_arret=detect) and (detecteur[detect].etat) and
|
||||
(trains[idTrain].route[PointRoute-1].adresse=ElPrec) and (trains[idTrain].route[PointRoute-1].typ=tPrec) and
|
||||
(pointroute<n) then
|
||||
begin
|
||||
Affiche('Demande arrêt train '+trains[idTrain].nom_train+' '+intToSTR(trains[idTrain].DetecteurArret[it].temps)+'s sur détecteur '+inttoStr(detect)+' prec='+intToSTR(trains[idTrain].route[PointRoute-1].adresse),ClOrange);
|
||||
//trains[idTrain].TempoArret:=2;
|
||||
trains[idTrain].TempoArretTemp:=trains[idTrain].DetecteurArret[it].temps*10; // récupérer le temps d'arrêt sur le détecteur
|
||||
trains[idTrain].arret_det:=true;
|
||||
trains[idTrain].phase_arret:=0;
|
||||
trouve:=true;
|
||||
end;
|
||||
inc(it);
|
||||
until (it>NbDetArret) or trouve;
|
||||
|
||||
if pointRoute>=n then
|
||||
begin
|
||||
// route traitée , arrêter le train
|
||||
if debugRoulage then Affiche('AC - Route terminée *****',clred);
|
||||
trains[idTrain].arret_det:=true;
|
||||
Trains[idTrain].phase_arret:=0;
|
||||
end;
|
||||
|
||||
traintiers:=false;
|
||||
icanton:=0;
|
||||
ncanton:=0;
|
||||
TrainExistant:=0;
|
||||
ideb:=trains[idTrain].PointRout; // i; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
AdrSig:=0;
|
||||
SigBonSens:=false;
|
||||
//TraceListe:=true;
|
||||
if traceliste then Affiche('Aiguillages',clOrange);
|
||||
with trains[idtrain] do
|
||||
begin
|
||||
// boucle de vérification de réservation des aiguillages par un train même lui même, jusqu'à rencontrer n cantons
|
||||
repeat
|
||||
typ:=route[i].typ;
|
||||
adr:=route[i].adresse;
|
||||
typ:=route[i].typ;
|
||||
if (typ=Aig) or (typ=tjd) or (typ=tjs) or (typ=crois) or (typ=triple) then
|
||||
begin
|
||||
if TraceListe then Affiche(intToSTR(adr)+' ',clOrange);
|
||||
// vérifier si l'aiguillage est libre
|
||||
TrainExistant:=Aiguillage[index_aig(adr)].AdrTrain;
|
||||
//if (trainexistant<>AdrTrain) and (TrainExistant<>0) then
|
||||
if (TrainExistant<>0) then
|
||||
begin
|
||||
result:=TrainExistant;
|
||||
trains[idtrain].roulage:=1;
|
||||
@@ -448,7 +700,7 @@ begin
|
||||
// phases 2 et 3
|
||||
trains[idtrain].roulage:=2; // roulage effectif
|
||||
result:=AdrTrain;
|
||||
if not(traintiers) then iFin:=i-1 else iFin:=icanton;
|
||||
if not(traintiers) then iFin:=i-1 else iFin:=icanton; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
AdrTrain:=trains[idTrain].adresse;
|
||||
|
||||
// balayage du (des) cantons libres
|
||||
@@ -463,31 +715,38 @@ begin
|
||||
pos:=route[i].pos;
|
||||
index:=index_aig(adr);
|
||||
|
||||
if (typ=aig) or (typ=triple) or (typ=tjs) or (typ=tjd) then
|
||||
if ((typ=aig) or (typ=triple) or (typ=tjs) or (typ=tjd)) then
|
||||
begin
|
||||
pilote_acc(adr,pos,AdrTrain); // pilote l'aig si il est reservé par le train ou non réservé
|
||||
|
||||
s:='AC-Pilote aiguillage '+intToSTR(adr)+'='+intToSTR(pos);
|
||||
case pos of
|
||||
const_devie : s:=s+' (dévié)';
|
||||
const_droit : s:=s+' (droit)';
|
||||
else
|
||||
s:=s+' non positionné';
|
||||
if aiguillage[index].AdrTrain=0 then
|
||||
begin
|
||||
pilote_acc(adr,pos,AdrTrain); // pilote l'aig si il est reservé par le train ou non réservé
|
||||
s:='AC-Pilote aiguillage '+intToSTR(adr)+'='+intToSTR(pos);
|
||||
case pos of
|
||||
const_devie : s:=s+' (dévié)';
|
||||
const_droit : s:=s+' (droit)';
|
||||
else
|
||||
s:=s+' non positionné';
|
||||
end;
|
||||
if debugRoulage then Affiche(s,clWhite);
|
||||
if portCommOuvert or parSocketLenz or CDM_connecte then sleep(Tempo_Aig);
|
||||
// réservation
|
||||
Affiche('Réservation Aig '+intToSTR(adr),clCyan);
|
||||
aiguillage[index].adrTrain:=AdrTrain;
|
||||
end;
|
||||
if not(diffusion) then
|
||||
Affiche(s,clWhite);
|
||||
if portCommOuvert or parSocketLenz or CDM_connecte then sleep(Tempo_Aig);
|
||||
end;
|
||||
// réservation
|
||||
aiguillage[index].adrTrain:=AdrTrain;
|
||||
end;
|
||||
if typ=det then detecteur[adr].AdrTrainRes:=adrTrain;
|
||||
if typ=det then
|
||||
begin
|
||||
detecteur[adr].AdrTrainRes:=adrTrain;
|
||||
end;
|
||||
Texte_aig_fond(adr);
|
||||
end;
|
||||
end;
|
||||
maj_signaux(false);
|
||||
//TraceListe:=false;
|
||||
end;
|
||||
|
||||
|
||||
// bouton rouler 1 train
|
||||
procedure TFormRouteTrain.ButtonRouler1TrClick(Sender: TObject);
|
||||
var demarre : boolean;
|
||||
@@ -501,10 +760,11 @@ begin
|
||||
// si le train est doté d'une route
|
||||
if trains[indexTrainFR].route[0].adresse>0 then
|
||||
begin
|
||||
aig_canton(indexTrainFR,trains[indexTrainFR].route[1].adresse); // positionne aiguillage et fait les réservations
|
||||
demarre:=demarre_index_train(indexTrainFR); // met la mémoire de roulage du train à 1
|
||||
aig_canton(indexTrainFR,trains[indexTrainFR].route[1].adresse); // positionne aiguillage et fait les réservations
|
||||
if debugRoulage then Affiche_routes_brut;
|
||||
end;
|
||||
close;
|
||||
close; // efface la route du TCO
|
||||
end;
|
||||
|
||||
// bouton rouler tous les trains
|
||||
@@ -519,23 +779,31 @@ begin
|
||||
maj_signaux(true);
|
||||
|
||||
// positionner les aiguillages de la 1ère route
|
||||
idtrain:=1;
|
||||
repeat
|
||||
//si le train est doté d'une route
|
||||
if trains[idTrain].route[0].adresse>0 then
|
||||
begin
|
||||
aig_canton(idTrain,trains[idTrain].route[1].adresse);
|
||||
end;
|
||||
inc(idtrain);
|
||||
until (idtrain>ntrains);
|
||||
|
||||
for idtrain:=1 to ntrains do
|
||||
begin
|
||||
//si le train est doté d'une route
|
||||
if trains[idTrain].route[0].adresse>0 then demarre:=demarre_index_train(idtrain); // met la mémoire de roulage du train à 1
|
||||
if trains[idTrain].route[0].adresse>0 then
|
||||
begin
|
||||
if debugRoulage then Affiche_routes_brut;
|
||||
demarre:=demarre_index_train(idtrain); // met la mémoire de roulage du train à 1
|
||||
aig_canton(idTrain,trains[idTrain].route[1].adresse);
|
||||
end;
|
||||
end;
|
||||
close;
|
||||
end;
|
||||
|
||||
procedure TFormRouteTrain.ButtonSauveRouteClick(Sender: TObject);
|
||||
var n : integer;
|
||||
begin
|
||||
if (indexTrainFR<1) then exit;
|
||||
n:=trains[indexTrainFr].route[0].adresse;
|
||||
if n=0 then exit;
|
||||
|
||||
Trains[indexTrainFr].routePref:=Trains[IndexTrainFr].route;
|
||||
Sauve_config;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
|
||||
|
||||
+88
-73
@@ -38,7 +38,7 @@ procedure ouvre_simulation(nomfichier : string);
|
||||
var s: string;
|
||||
fte : text;
|
||||
i,k,erreur : integer;
|
||||
sortie : boolean;
|
||||
AvecTick,sortie : boolean;
|
||||
begin
|
||||
assignFile(fte,nomfichier);
|
||||
{$I+}
|
||||
@@ -48,96 +48,111 @@ begin
|
||||
Affiche('Fichier '+nomFichier+' incorrect',clred);
|
||||
exit;
|
||||
end;
|
||||
avecTick:=false;
|
||||
index_simule:=1;
|
||||
sortie:=false;
|
||||
k:=0;
|
||||
while not(eof(fte)) and not(sortie) do
|
||||
begin
|
||||
readln(fte,s);
|
||||
s:=Uppercase(s);
|
||||
i:=pos('TICK=',s);
|
||||
if i<>0 then
|
||||
if length(s)>0 then
|
||||
if s[1]<>'/' then
|
||||
begin
|
||||
Delete(s,1,i+4);
|
||||
val(s,k,erreur);
|
||||
//if intervalle<>0 then k:=Index_Simule*Intervalle+tick+30 else // démarre dans 3s
|
||||
// k:=Index_Simule+tick+30 ;
|
||||
Tablo_simule[index_simule].tick:=k;
|
||||
|
||||
// détecteur? Det=528=1 Train=BB16024
|
||||
i:=pos('DET',s);
|
||||
if i<>0 then
|
||||
s:=Uppercase(s);
|
||||
i:=pos('TICK=',s);
|
||||
if ((i<>0) and avecTick) or (not avecTick) then
|
||||
begin
|
||||
Delete(s,1,i+2);
|
||||
if s[1]='=' then delete(s,1,1);
|
||||
if s[1]=' ' then delete(s,1,1);
|
||||
val(s,k,erreur);
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
Tablo_simule[index_simule].modele:=det;
|
||||
i:=pos('=',s);
|
||||
if avecTick then
|
||||
begin
|
||||
Delete(s,1,i+4);
|
||||
val(s,k,erreur);
|
||||
//if intervalle<>0 then k:=Index_Simule*Intervalle+tick+30 else // démarre dans 3s
|
||||
//k:=Index_Simule+tick+30 ;
|
||||
end
|
||||
else inc(k);
|
||||
Tablo_simule[index_simule].tick:=k;
|
||||
|
||||
// détecteur? Det=528=1 Train=BB16024
|
||||
i:=pos('DET',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
Delete(s,1,i);
|
||||
Delete(s,1,i+2);
|
||||
if s[1]='=' then delete(s,1,1);
|
||||
if s[1]=' ' then delete(s,1,1);
|
||||
val(s,k,erreur);
|
||||
Tablo_simule[index_simule].etat:=k;
|
||||
if k<>0 then
|
||||
begin
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
Tablo_simule[index_simule].modele:=det;
|
||||
delete(s,1,erreur);
|
||||
val(s,k,erreur);
|
||||
Tablo_simule[index_simule].etat:=k;
|
||||
|
||||
i:=pos('=',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,1,i);
|
||||
Tablo_simule[index_simule].train:=s;
|
||||
end;
|
||||
inc(index_simule);
|
||||
end;
|
||||
end;
|
||||
i:=pos('=',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
Tablo_simule[index_simule].train:=s;
|
||||
|
||||
inc(index_simule);
|
||||
end;
|
||||
|
||||
// actionneur? Act=803/0=1 Train=CC406526
|
||||
i:=pos('ACT',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
Delete(s,1,i+2);
|
||||
if s[1]='=' then delete(s,1,1);
|
||||
if s[1]=' ' then delete(s,1,1);
|
||||
val(s,k,erreur);
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
|
||||
i:=pos('/',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
|
||||
i:=pos('=',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
|
||||
Tablo_simule[index_simule].modele:=act;
|
||||
Tablo_simule[index_simule].etat:=k;
|
||||
|
||||
i:=pos('=',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
Tablo_simule[index_simule].train:=s;
|
||||
inc(index_simule);
|
||||
end;
|
||||
|
||||
// aiguillage?
|
||||
i:=pos('AIG',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
Delete(s,1,i+2);
|
||||
if s[1]='=' then delete(s,1,1);
|
||||
if s[1]=' ' then delete(s,1,1);
|
||||
val(s,k,erreur);
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
Tablo_simule[index_simule].modele:=aig;
|
||||
i:=pos('=',s);
|
||||
// actionneur? Act=803/0=1 Train=CC406526
|
||||
i:=pos('ACT',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
Delete(s,1,i);
|
||||
Delete(s,1,i+2);
|
||||
if s[1]='=' then delete(s,1,1);
|
||||
if s[1]=' ' then delete(s,1,1);
|
||||
val(s,k,erreur);
|
||||
if (k=1) or (k=2) then Tablo_simule[index_simule].etat:=k
|
||||
else Affiche('Erreur 622 : Position aiguillage '+intToSTR(Tablo_simule[index_simule].adresse)+' inconnue dans le fichier de simulation',clred);
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
|
||||
i:=pos('/',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
|
||||
i:=pos('=',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
|
||||
Tablo_simule[index_simule].modele:=act;
|
||||
Tablo_simule[index_simule].etat:=k;
|
||||
|
||||
i:=pos('=',s);
|
||||
if i<>0 then delete(s,1,i);
|
||||
Tablo_simule[index_simule].train:=s;
|
||||
inc(index_simule);
|
||||
end;
|
||||
|
||||
// aiguillage?
|
||||
i:=pos('AIG',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,1,i+2);
|
||||
i:=pos(' ',s);
|
||||
if i=0 then i:=pos('=',s);
|
||||
delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
if k<>0 then
|
||||
begin
|
||||
Tablo_simule[index_simule].adresse:=k;
|
||||
Tablo_simule[index_simule].modele:=aig;
|
||||
i:=pos('=',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
Delete(s,1,i);
|
||||
val(s,k,erreur);
|
||||
if (k=1) or (k=2) then Tablo_simule[index_simule].etat:=k
|
||||
else Affiche('Erreur 622 : Position aiguillage '+intToSTR(Tablo_simule[index_simule].adresse)+' inconnue dans le fichier de simulation',clred);
|
||||
inc(index_simule);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Application.ProcessMessages;
|
||||
sortie:=eof(fte) or (index_simule>Max_Simule) or (pos('STOP',s)<>0);
|
||||
end;
|
||||
Application.ProcessMessages;
|
||||
sortie:=eof(fte) or (index_simule>Max_Simule) or (pos('STOP',s)<>0);
|
||||
end ;
|
||||
end;
|
||||
|
||||
if index_simule>Max_Simule then Affiche('Tableau maximal atteint',clred);
|
||||
Affiche('Intervalle='+intToSTR(intervalle),clyellow);
|
||||
|
||||
+13
-5
@@ -1,6 +1,6 @@
|
||||
object FormTCO: TFormTCO
|
||||
Left = 229
|
||||
Top = 65
|
||||
Left = 332
|
||||
Top = 73
|
||||
Width = 1013
|
||||
Height = 607
|
||||
VertScrollBar.Visible = False
|
||||
@@ -24,8 +24,8 @@ object FormTCO: TFormTCO
|
||||
OnKeyPress = FormKeyPress
|
||||
OnMouseWheel = FormMouseWheel
|
||||
DesignSize = (
|
||||
997
|
||||
549)
|
||||
1005
|
||||
556)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object LabelZoom: TLabel
|
||||
@@ -1537,6 +1537,10 @@ object FormTCO: TFormTCO
|
||||
object N8: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object rouverunlment1: TMenuItem
|
||||
Caption = 'Trouver un '#233'l'#233'ment'
|
||||
OnClick = rouverunlment1Click
|
||||
end
|
||||
object DessinerleTCO1: TMenuItem
|
||||
Caption = 'Dessiner le TCO'
|
||||
Hint = 'Dessine le TCO '#224' la souris'
|
||||
@@ -1575,8 +1579,12 @@ object FormTCO: TFormTCO
|
||||
end
|
||||
object Routes: TMenuItem
|
||||
Caption = 'Routes'
|
||||
object Optiondesroutes1: TMenuItem
|
||||
Caption = 'Option des routes'
|
||||
OnClick = Optiondesroutes1Click
|
||||
end
|
||||
object AffRoutes: TMenuItem
|
||||
Caption = 'Fen'#234'tre des routes'
|
||||
Caption = 'Fen'#234'tre des routes par trains'
|
||||
OnClick = AffRoutesClick
|
||||
end
|
||||
end
|
||||
|
||||
+1060
-346
File diff suppressed because it is too large
Load Diff
+48
-29
@@ -31,7 +31,7 @@ type
|
||||
var
|
||||
FormAig: TFormAig;
|
||||
aiguille,aiguille2 : integer;
|
||||
tjdC,aigC : boolean;
|
||||
tjdC,aigC,aigT : boolean;
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
@@ -72,11 +72,19 @@ var i : integer;
|
||||
s : string;
|
||||
begin
|
||||
i:=Index_aig(Aiguille);
|
||||
|
||||
aigC:=(aiguillage[i].modele=aig);
|
||||
tjdC:=(aiguillage[i].modele=tjd) or (aiguillage[i].modele=tjs);
|
||||
AigT:=aiguillage[i].modele=triple;
|
||||
|
||||
if tjdC then s:='Pilotage de la TJD/S '+intToSTR(aiguille);
|
||||
if aigC then s:='Pilotage de l''aiguillage '+intToSTR(aiguille);
|
||||
if aigT then s:='Pilotage de l''aiguillage triple '+intToSTR(aiguille);
|
||||
|
||||
Label1.Caption:=s;
|
||||
|
||||
if aiguillage[i].AdrTrain<>0 then
|
||||
begin
|
||||
tjdC:=(aiguillage[i].modele=tjd) or (aiguillage[i].modele=tjs);
|
||||
if tjdC then s:='Pilotage de la TJD/S '+intToSTR(aiguille) else s:='Pilotage de l''aiguillage '+intToSTR(aiguille);
|
||||
Label1.Caption:=s;
|
||||
if tjdC then s:='La TJD/S '+intToSTR(aiguille)+' est réservée ' else s:='L''aiguillage '+intToSTR(aiguille)+' est réservé ';
|
||||
labelAdr1.caption:=s+'par le train '+intToSTR(aiguillage[i].AdrTrain);
|
||||
labelAdr1.Visible:=true;
|
||||
@@ -85,44 +93,55 @@ begin
|
||||
buttonDev2.Visible:=false;
|
||||
buttonDroit2.Visible:=false;
|
||||
LabelAdr2.Visible:=false;
|
||||
if diffusion then exit;
|
||||
if diffusion then exit;
|
||||
end;
|
||||
|
||||
aigC:=(aiguillage[i].modele=aig);
|
||||
tjdC:=(aiguillage[i].modele=tjd) or (aiguillage[i].modele=tjs);
|
||||
if aigC then
|
||||
begin
|
||||
s:='Pilotage de l''aiguillage '+intToSTR(aiguille);
|
||||
commande_simple;
|
||||
end;
|
||||
if tjdC then
|
||||
|
||||
if (tjdC and (aiguillage[i].EtatTJD=4)) then
|
||||
begin
|
||||
s:='Pilotage de la TJD '+intToSTR(aiguille);
|
||||
LabelAdr1.Caption:='Adresse1: '+intToSTR(aiguille);
|
||||
aiguille2:=aiguillage[i].DDevie;
|
||||
LabelAdr2.Caption:='Adresse2: '+intToSTR(aiguille2);
|
||||
s:=s+'/'+intToSTR(aiguille2);
|
||||
LabelAdr2.Visible:=true;
|
||||
LabelAdr1.Visible:=true;
|
||||
ButtonDev2.Visible:=true;
|
||||
ButtonOk.Visible:=true;
|
||||
ButtonDroit2.Visible:=true;
|
||||
ButtonDev.Left:=8;
|
||||
ButtonDroit.Left:=88;
|
||||
|
||||
if aiguillage[i].EtatTJD=4 then
|
||||
begin
|
||||
LabelAdr1.Caption:='Adresse1: '+intToSTR(aiguille);
|
||||
aiguille2:=aiguillage[i].DDevie;
|
||||
LabelAdr2.Caption:='Adresse2: '+intToSTR(aiguille2);
|
||||
s:=s+'/'+intToSTR(aiguille2);
|
||||
LabelAdr2.Visible:=true;
|
||||
LabelAdr1.Visible:=true;
|
||||
ButtonDev2.Visible:=true;
|
||||
ButtonOk.Visible:=true;
|
||||
ButtonDroit2.Visible:=true;
|
||||
ButtonDev.Left:=8;
|
||||
ButtonDroit.Left:=88;
|
||||
|
||||
buttonDroit.Visible:=true;
|
||||
buttonDev.Visible:=true;
|
||||
|
||||
end;
|
||||
buttonDroit.Visible:=true;
|
||||
buttonDev.Visible:=true;
|
||||
end;
|
||||
if aiguillage[i].EtatTJD=2 then
|
||||
|
||||
if TjdC and (aiguillage[i].EtatTJD=2) then
|
||||
begin
|
||||
commande_simple;
|
||||
end;
|
||||
|
||||
if AigT then
|
||||
begin
|
||||
LabelAdr1.Caption:='Adresse1: '+intToSTR(aiguille);
|
||||
aiguille2:=aiguillage[i].Adrtriple;
|
||||
LabelAdr2.Caption:='Adresse2: '+intToSTR(aiguille2);
|
||||
s:=s+'/'+intToSTR(aiguille2);
|
||||
LabelAdr2.Visible:=true;
|
||||
LabelAdr1.Visible:=true;
|
||||
ButtonDev2.Visible:=true;
|
||||
ButtonOk.Visible:=true;
|
||||
ButtonDroit2.Visible:=true;
|
||||
ButtonDev.Left:=8;
|
||||
ButtonDroit.Left:=88;
|
||||
|
||||
buttonDroit.Visible:=true;
|
||||
buttonDev.Visible:=true;
|
||||
end;
|
||||
|
||||
Label1.Caption:=s;
|
||||
end;
|
||||
|
||||
|
||||
+52
-30
@@ -1,11 +1,9 @@
|
||||
object FormSelTrain: TFormSelTrain
|
||||
Left = 198
|
||||
Top = 117
|
||||
BorderIcons = [biSystemMenu]
|
||||
BorderStyle = bsDialog
|
||||
Left = 358
|
||||
Top = 131
|
||||
Width = 860
|
||||
Height = 370
|
||||
Caption = 'S'#233'lection train'
|
||||
ClientHeight = 311
|
||||
ClientWidth = 800
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
@@ -16,15 +14,16 @@ object FormSelTrain: TFormSelTrain
|
||||
OnActivate = FormActivate
|
||||
OnCreate = FormCreate
|
||||
DesignSize = (
|
||||
800
|
||||
311)
|
||||
844
|
||||
331)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object LabelInfo: TLabel
|
||||
Left = 104
|
||||
Top = 288
|
||||
Left = 125
|
||||
Top = 306
|
||||
Width = 44
|
||||
Height = 13
|
||||
Anchors = [akBottom]
|
||||
Caption = 'LabelInfo'
|
||||
end
|
||||
object Label1: TLabel
|
||||
@@ -329,11 +328,11 @@ object FormSelTrain: TFormSelTrain
|
||||
Height = 13
|
||||
end
|
||||
object ButtonOK: TButton
|
||||
Left = 41
|
||||
Top = 280
|
||||
Left = 29
|
||||
Top = 300
|
||||
Width = 75
|
||||
Height = 24
|
||||
Anchors = [akTop, akRight]
|
||||
Anchors = [akBottom]
|
||||
Caption = 'Ok'
|
||||
TabOrder = 0
|
||||
OnClick = ButtonOKClick
|
||||
@@ -347,29 +346,52 @@ object FormSelTrain: TFormSelTrain
|
||||
TabOrder = 1
|
||||
OnChange = ComboBoxCantonChange
|
||||
end
|
||||
object StringGridTrains: TStringGrid
|
||||
Left = 8
|
||||
Top = 64
|
||||
Width = 785
|
||||
Height = 209
|
||||
ColCount = 6
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goAlwaysShowEditor]
|
||||
ScrollBars = ssVertical
|
||||
TabOrder = 2
|
||||
OnDrawCell = StringGridTrainsDrawCell
|
||||
OnKeyDown = StringGridTrainsKeyDown
|
||||
OnSelectCell = StringGridTrainsSelectCell
|
||||
end
|
||||
object ButtonSauve: TButton
|
||||
Left = 624
|
||||
Top = 280
|
||||
Width = 129
|
||||
Left = 695
|
||||
Top = 300
|
||||
Width = 82
|
||||
Height = 25
|
||||
Hint = 'Sauvegarde le placement des trains dans les cantons'
|
||||
Anchors = [akBottom]
|
||||
Caption = 'Sauvegarder'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
TabOrder = 2
|
||||
OnClick = ButtonSauveClick
|
||||
end
|
||||
object ScrollBoxST: TScrollBox
|
||||
Left = 11
|
||||
Top = 49
|
||||
Width = 821
|
||||
Height = 240
|
||||
HorzScrollBar.Smooth = True
|
||||
HorzScrollBar.Tracking = True
|
||||
VertScrollBar.Increment = 21
|
||||
VertScrollBar.Tracking = True
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
TabOrder = 3
|
||||
object StringGridTrains: TStringGrid
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 793
|
||||
Height = 233
|
||||
ColCount = 8
|
||||
FixedCols = 0
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goAlwaysShowEditor]
|
||||
ScrollBars = ssNone
|
||||
TabOrder = 0
|
||||
OnDrawCell = StringGridTrainsDrawCell
|
||||
OnKeyDown = StringGridTrainsKeyDown
|
||||
OnSelectCell = StringGridTrainsSelectCell
|
||||
ColWidths = (
|
||||
43
|
||||
214
|
||||
172
|
||||
57
|
||||
105
|
||||
108
|
||||
32
|
||||
29)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+43
-19
@@ -17,8 +17,9 @@ type
|
||||
Imagegauche: TImage;
|
||||
ImageDroite: TImage;
|
||||
LabelCanton: TLabel;
|
||||
StringGridTrains: TStringGrid;
|
||||
ButtonSauve: TButton;
|
||||
ScrollBoxST: TScrollBox;
|
||||
StringGridTrains: TStringGrid;
|
||||
procedure ButtonOKClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure StringGridTrainsDrawCell(Sender: TObject; ACol,
|
||||
@@ -32,17 +33,20 @@ type
|
||||
procedure ButtonSauveClick(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
public
|
||||
{ Déclarations publiques }
|
||||
end;
|
||||
|
||||
const
|
||||
HauteurLigneSGT=30;
|
||||
|
||||
var
|
||||
FormSelTrain: TFormSelTrain;
|
||||
x,y,El,largC,hautC,indexTrainClic : Integer;
|
||||
x,y,El,largC,hautC,indexTrainClic,LargeurSGT : Integer;
|
||||
routeSav : TuneRoute;
|
||||
|
||||
procedure actualise_seltrains;
|
||||
procedure affecte_Train_canton(AdrTrain,idcanton : integer);
|
||||
procedure affecte_Train_canton(AdrTrain,idcanton,sens : integer);
|
||||
procedure raz_trains_Idcanton(idc : integer);
|
||||
procedure raz_cantons_train(AdrTrain : integer);
|
||||
procedure trouve_det_canton(idcanton : integer;var el1,el2 : integer);
|
||||
@@ -89,7 +93,7 @@ begin
|
||||
end;
|
||||
|
||||
// le détecteur considéré est le e2c
|
||||
if (e2c=adresse) and (t1=det) then
|
||||
if (e2c=adresse) and (t2=det) then
|
||||
begin
|
||||
case sens of
|
||||
sensGauche,sensHaut :
|
||||
@@ -233,7 +237,7 @@ end;
|
||||
// si adrTrain=9999 , train inconnu
|
||||
// si adrTrain=0 ; efface
|
||||
// et les pointeurs de trains de l'idTrain sont razés
|
||||
procedure affecte_Train_canton(AdrTrain,idcanton : integer);
|
||||
procedure affecte_Train_canton(AdrTrain,idcanton,sens : integer);
|
||||
var idTrain,t,el1,el2 : integer;
|
||||
t1,t2 : tequipement;
|
||||
begin
|
||||
@@ -247,6 +251,8 @@ begin
|
||||
raz_cantons_train(AdrTrain); // efface tous les cantons contenant le train Adrtrain
|
||||
|
||||
trains[idTrain].canton:=canton[idcanton].numero;
|
||||
trains[idTrain].sens:=sens;
|
||||
canton[IdCanton].SensLoco:=sens;
|
||||
canton[Idcanton].indexTrain:=idTrain;
|
||||
canton[Idcanton].NomTrain:=trains[idTrain].nom_train;
|
||||
canton[IdCanton].adresseTrain:=AdrTrain;
|
||||
@@ -404,17 +410,29 @@ end;
|
||||
procedure TFormSelTrain.FormCreate(Sender: TObject);
|
||||
var i : integer;
|
||||
begin
|
||||
|
||||
with ImageHaut do begin Width:=60;Height:=60;visible:=false; end;
|
||||
with ImageBas do begin Width:=60;Height:=60;visible:=false; end;
|
||||
with ImageDroite do begin Width:=60;Height:=60;visible:=false; end;
|
||||
with ImageGauche do begin Width:=60;Height:=60;visible:=false; end;
|
||||
|
||||
with ScrollBoxST do
|
||||
begin
|
||||
Anchors:=[akTop,AkLeft,akRight,AkBottom];
|
||||
VertScrollBar.Smooth:=false; // ne pas mettre true sinon çà plante quand on clique sur la ScrollBar
|
||||
VertScrollBar.tracking:=true;
|
||||
end;
|
||||
|
||||
hautC:=25;
|
||||
largC:=130;
|
||||
LabelInfo.caption:='';
|
||||
with StringGridTrains do
|
||||
begin
|
||||
Anchors:=[];
|
||||
Anchors:=[AkTop,AkLeft,akright];
|
||||
|
||||
Height:=nTrains*HauteurLigneSGT;
|
||||
Top:=0;
|
||||
Left:=0;
|
||||
//Options:=StringGridTrains.Options+[goEditing];
|
||||
Hint:='Sélection d''un train';
|
||||
ShowHint:=true;
|
||||
@@ -429,8 +447,11 @@ begin
|
||||
ColWidths[5]:=120;
|
||||
ColWidths[6]:=30;
|
||||
ColWidths[7]:=35;
|
||||
LargeurSGT:=0;
|
||||
for i:=0 to 7 do LargeurSGT:=LargeurSGT+ColWidths[i];
|
||||
width:=LargeurSGT+30;
|
||||
|
||||
Cells[0,0]:='N° / @';
|
||||
Cells[0,0]:='Train'+#13+'N° / @';
|
||||
Cells[1,0]:='Icône';
|
||||
Cells[2,0]:='Nom du train';
|
||||
Cells[3,0]:='Affectation'+#13+'au canton';
|
||||
@@ -439,7 +460,8 @@ begin
|
||||
Cells[6,0]:='Sens';
|
||||
Cells[7,0]:='Route';
|
||||
|
||||
RowHeights[0]:=30;
|
||||
for i:=0 to RowCount-1 do
|
||||
RowHeights[i]:=HauteurLigneSGT;
|
||||
end;
|
||||
|
||||
for i:=1 to ntrains do
|
||||
@@ -463,7 +485,7 @@ var indextrain,l,h,hautdest,largdest : integer;
|
||||
coul: Tcolor;
|
||||
s : string;
|
||||
begin
|
||||
// Affiche('DrawCell '+intToSTR(Acol)+'x'+intToSTR(Arow),clred);
|
||||
//Affiche('DrawCell '+intToSTR(Acol)+'x'+intToSTR(Arow),clred);
|
||||
|
||||
// titres sur 2 lignes
|
||||
if Arow=0 then
|
||||
@@ -471,12 +493,12 @@ begin
|
||||
begin
|
||||
if Pos(#13,Cells[ACol,ARow])>0 then
|
||||
begin
|
||||
Coul:=canvas.Pixels[5,5]; // trouver la couleur de la première ligne de la stringgrid, car elle change en fonction des styles
|
||||
Coul:=canvas.Pixels[3,1]; // trouver la couleur de la première ligne de la stringgrid, car elle change en fonction des styles
|
||||
Canvas.Brush.Color:=coul;
|
||||
Canvas.FillRect(Rect); // Efface la cellule qu'on va réécrire en mode WORDBREAK
|
||||
|
||||
Inc(Rect.Left, 2);
|
||||
Inc(Rect.Top, 2);
|
||||
// rectangle du texte
|
||||
Inc(Rect.Left,2);
|
||||
Inc(Rect.Top,2);
|
||||
DrawText(Canvas.Handle,PChar(Cells[ACol, ARow]),-1,Rect,DT_NOPREFIX or DT_WORDBREAK);
|
||||
end;
|
||||
end;
|
||||
@@ -564,7 +586,7 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
// cliqué sur cellule pour changer la sélection du train ou voir la route ou la flèche
|
||||
// cliqué ou roulé la molette souris sur cellule pour changer la sélection du train ou voir la route ou la flèche
|
||||
procedure TFormSelTrain.StringGridTrainsSelectCell(Sender: TObject; ACol,
|
||||
ARow: Integer; var CanSelect: Boolean);
|
||||
var f,AutreTrain,AutreCanton,idAutrecanton,i,ancienSens,AdrTrain,IdTrain,sensloco : integer;
|
||||
@@ -641,8 +663,8 @@ begin
|
||||
|
||||
if (canton[IdCantonSelect].sensCirc<>0) then sensLoco:=canton[IdCantonSelect].sensCirc ;
|
||||
|
||||
canton[IdCantonSelect].SensLoco:=sensLoco;
|
||||
affecte_Train_canton(trains[indexTrainClic].adresse,IdCantonSelect); // le train affecté contient la route du train razé
|
||||
//canton[IdCantonSelect].SensLoco:=sensLoco;
|
||||
affecte_Train_canton(trains[indexTrainClic].adresse,IdCantonSelect,sensLoco); // le train affecté contient la route du train razé
|
||||
|
||||
maj_signaux(true);
|
||||
end;
|
||||
@@ -691,8 +713,7 @@ begin
|
||||
end;
|
||||
|
||||
renseigne_canton(IdAutreCanton);
|
||||
canton[IdAutreCanton].SensLoco:=f;
|
||||
affecte_Train_canton(AdrTrain,idAutreCanton);
|
||||
affecte_Train_canton(AdrTrain,idAutreCanton,f);
|
||||
//Affiche('Et 3',clYellow);
|
||||
maj_signaux(true);
|
||||
end;
|
||||
@@ -785,6 +806,7 @@ begin
|
||||
// trouver si le train est dans la grille
|
||||
with StringGridTrains do
|
||||
begin
|
||||
Height:=nTrains*HauteurLigneSGT+HauteurLigneSGT; // actualiser la taille de la stringGrig en fonction du nombre de trains
|
||||
i:=1;n:=RowCount;
|
||||
repeat
|
||||
trouve:=cells[2,i]=nomTrain;
|
||||
@@ -816,5 +838,7 @@ begin
|
||||
Sauve_config;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
|
||||
|
||||
+14
-13
@@ -25,15 +25,16 @@ var
|
||||
chemin_Dest,chemin_src,date_creation,nombre_tel : string;
|
||||
f : text;
|
||||
|
||||
Const VersionSC ='9.1'; // sert à la comparaison de la version publiée
|
||||
SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace
|
||||
// pour unzip
|
||||
SHCONTCH_NOPROGRESSBOX = 4;
|
||||
SHCONTCH_AUTORENAME = 8;
|
||||
SHCONTCH_RESPONDYESTOALL = 16;
|
||||
SHCONTF_INCLUDEHIDDEN = 128;
|
||||
SHCONTF_FOLDERS = 32;
|
||||
SHCONTF_NONFOLDERS = 64;
|
||||
Const
|
||||
VersionSC ='9.3'; // sert à la comparaison de la version publiée
|
||||
SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace
|
||||
// pour unzip
|
||||
SHCONTCH_NOPROGRESSBOX=4;
|
||||
SHCONTCH_AUTORENAME=8;
|
||||
SHCONTCH_RESPONDYESTOALL=16;
|
||||
SHCONTF_INCLUDEHIDDEN=128;
|
||||
SHCONTF_FOLDERS=32;
|
||||
SHCONTF_NONFOLDERS=64;
|
||||
|
||||
function GetCurrentProcessEnvVar(const VariableName: string): string;
|
||||
function verifie_version : real;
|
||||
@@ -92,10 +93,10 @@ begin
|
||||
i:=getLastError;
|
||||
if i<>0 then
|
||||
case i of
|
||||
12007 : Affiche('Erreur de résolution DNS',clred);
|
||||
12037 : Affiche('Erreur validité de certificat - Mettre windows à jour ou version windows obsolète',clred);
|
||||
12157 : Affiche('Erreur canal sécurisé SSL 2.0 - Mettre windows à jour ou version windows obsolète',clred);
|
||||
else affiche('Erreur '+intToSTR(i),clred);
|
||||
12007 : Affiche('Réseau: Erreur de résolution DNS',clred);
|
||||
12037 : Affiche('Réseau: Erreur validité de certificat - Mettre windows à jour ou version windows obsolète',clred);
|
||||
12157 : Affiche('Réseau: Erreur canal sécurisé SSL 2.0 - Mettre windows à jour ou version windows obsolète',clred);
|
||||
else affiche('Erreur réseau '+intToSTR(i),clred);
|
||||
end;
|
||||
if Assigned(hService) then
|
||||
try
|
||||
|
||||
@@ -267,5 +267,10 @@ version 9.2 : Utilisation de l'unit
|
||||
Arrets temporisés sur les détecteurs en mode autonome/roulage pour les routes de canton à canton.
|
||||
Correction connexion à la GENLI.
|
||||
Version x64 D12 disponible.
|
||||
version 9.3 : Amélioration de la proposition des routes en mode autonome.
|
||||
Renforcement de la vérification des TJD.
|
||||
Amélioration des aiguillages triples, et de leur représentation dans le TCO.
|
||||
Gestion des erreurs de vérification d'étendue.
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user