This commit is contained in:
f1iwq2
2024-02-10 10:47:29 +01:00
parent 039f66ed6f
commit b4d968c6ea
15 changed files with 1176 additions and 476 deletions
+2 -2
View File
@@ -14,8 +14,8 @@
-$N+
-$O-
-$P+
-$Q-
-$R-
-$Q+
-$R+
-$S-
-$T-
-$U-
+2 -2
View File
@@ -17,8 +17,8 @@ M=0
N=1
O=0
P=1
Q=0
R=0
Q=1
R=1
S=0
T=0
U=0
+127 -126
View File
@@ -1,104 +1,104 @@
Start Length Name Class
0001:00000000 00193814H .text CODE
0002:00000000 00002C58H .data DATA
0002:00002C58 045E3399H .bss BSS
0001:00000000 001AF198H .text CODE
0002:00000000 00002CB0H .data DATA
0002:00002CB0 045E33F1H .bss BSS
Detailed map of segments
0001:00000000 00005EC7 C=CODE S=.text G=(none) M=System ACBP=A9
0001:00005EC8 00000140 C=CODE S=.text G=(none) M=SysInit ACBP=A9
0001:00006008 00000108 C=CODE S=.text G=(none) M=Types ACBP=A9
0001:00006110 00000F10 C=CODE S=.text G=(none) M=Windows ACBP=A9
0001:00007020 00000038 C=CODE S=.text G=(none) M=Messages ACBP=A9
0001:00007058 00000338 C=CODE S=.text G=(none) M=SysConst ACBP=A9
0001:00007390 00006E28 C=CODE S=.text G=(none) M=SysUtils ACBP=A9
0001:0000E1B8 0000081B C=CODE S=.text G=(none) M=VarUtils ACBP=A9
0001:0000E9D4 0000809A C=CODE S=.text G=(none) M=Variants ACBP=A9
0001:00016A70 000001A0 C=CODE S=.text G=(none) M=RTLConsts ACBP=A9
0001:00016C10 0000083C C=CODE S=.text G=(none) M=TypInfo ACBP=A9
0001:0001744C 00000358 C=CODE S=.text G=(none) M=ActiveX ACBP=A9
0001:000177A4 0000A7EA C=CODE S=.text G=(none) M=Classes ACBP=A9
0001:00021F90 00000370 C=CODE S=.text G=(none) M=Consts ACBP=A9
0001:00022300 00009BFB C=CODE S=.text G=(none) M=Graphics ACBP=A9
0001:0002BEFC 00000124 C=CODE S=.text G=(none) M=Math ACBP=A9
0001:0002C020 000002B8 C=CODE S=.text G=(none) M=Contnrs ACBP=A9
0001:0002C2D8 00000198 C=CODE S=.text G=(none) M=CommCtrl ACBP=A9
0001:0002C470 00000787 C=CODE S=.text G=(none) M=MultiMon ACBP=A9
0001:0002CBF8 00000038 C=CODE S=.text G=(none) M=Imm ACBP=A9
0001:0002CC30 00000FF8 C=CODE S=.text G=(none) M=HelpIntfs ACBP=A9
0001:0002DC28 00000058 C=CODE S=.text G=(none) M=WinSpool ACBP=A9
0001:0002DC80 000010C8 C=CODE S=.text G=(none) M=Printers ACBP=A9
0001:0002ED48 0000031F C=CODE S=.text G=(none) M=FlatSB ACBP=A9
0001:0002F068 000003F0 C=CODE S=.text G=(none) M=SyncObjs ACBP=A9
0001:0002F458 000009BB C=CODE S=.text G=(none) M=UxTheme ACBP=A9
0001:0002FE14 00000038 C=CODE S=.text G=(none) M=RichEdit ACBP=A9
0001:0002FE4C 00000038 C=CODE S=.text G=(none) M=ToolWin ACBP=A9
0001:0002FE84 00000040 C=CODE S=.text G=(none) M=ShellAPI ACBP=A9
0001:0002FEC4 00000038 C=CODE S=.text G=(none) M=RegStr ACBP=A9
0001:0002FEFC 00000058 C=CODE S=.text G=(none) M=WinInet ACBP=A9
0001:0002FF54 00000038 C=CODE S=.text G=(none) M=UrlMon ACBP=A9
0001:0002FF8C 0000006C C=CODE S=.text G=(none) M=ShlObj ACBP=A9
0001:0002FFF8 00000060 C=CODE S=.text G=(none) M=CommDlg ACBP=A9
0001:00030058 00000038 C=CODE S=.text G=(none) M=Dlgs ACBP=A9
0001:00030090 000036D1 C=CODE S=.text G=(none) M=Dialogs ACBP=A9
0001:00033764 00004ADA C=CODE S=.text G=(none) M=ExtCtrls ACBP=A9
0001:00038240 00000090 C=CODE S=.text G=(none) M=ComStrs ACBP=A9
0001:000382D0 000007A0 C=CODE S=.text G=(none) M=Clipbrd ACBP=A9
0001:00038A70 00000128 C=CODE S=.text G=(none) M=StrUtils ACBP=A9
0001:00038B98 00003821 C=CODE S=.text G=(none) M=Buttons ACBP=A9
0001:0003C3BC 00000038 C=CODE S=.text G=(none) M=ExtDlgs ACBP=A9
0001:0003C3F4 00000068 C=CODE S=.text G=(none) M=IniFiles ACBP=A9
0001:0003C45C 00000068 C=CODE S=.text G=(none) M=Registry ACBP=A9
0001:0003C4C4 0000006C C=CODE S=.text G=(none) M=Mapi ACBP=A9
0001:0003C530 00000058 C=CODE S=.text G=(none) M=ExtActns ACBP=A9
0001:0003C588 00000038 C=CODE S=.text G=(none) M=ListActns ACBP=A9
0001:0003C5C0 00009948 C=CODE S=.text G=(none) M=ComCtrls ACBP=A9
0001:00045F08 00000EA0 C=CODE S=.text G=(none) M=Themes ACBP=A9
0001:00046DA8 0000C698 C=CODE S=.text G=(none) M=StdCtrls ACBP=A9
0001:00053440 00000168 C=CODE S=.text G=(none) M=StdActns ACBP=A9
0001:000535A8 00000D1F C=CODE S=.text G=(none) M=WinHelpViewer ACBP=A9
0001:000542C8 00011403 C=CODE S=.text G=(none) M=Controls ACBP=A9
0001:000656CC 00001292 C=CODE S=.text G=(none) M=ActnList ACBP=A9
0001:00066960 00001B9C C=CODE S=.text G=(none) M=ImgList ACBP=A9
0001:000684FC 000066E1 C=CODE S=.text G=(none) M=Menus ACBP=A9
0001:0006EBE0 0000CF8C C=CODE S=.text G=(none) M=Forms ACBP=A9
0001:0007BB6C 00000060 C=CODE S=.text G=(none) M=ComConst ACBP=A9
0001:0007BBCC 00001259 C=CODE S=.text G=(none) M=ComObj ACBP=A9
0001:0007CE28 00000038 C=CODE S=.text G=(none) M=StdVCL ACBP=A9
0001:0007CE60 00001793 C=CODE S=.text G=(none) M=AxCtrls ACBP=A9
0001:0007E5F4 00000060 C=CODE S=.text G=(none) M=OleConst ACBP=A9
0001:0007E654 00003519 C=CODE S=.text G=(none) M=OleCtrls ACBP=A9
0001:00081B70 00000050 C=CODE S=.text G=(none) M=JConsts ACBP=A9
0001:00081BC0 000133EC C=CODE S=.text G=(none) M=jpeg ACBP=A9
0001:00094FAC 00000314 C=CODE S=.text G=(none) M=TlHelp32 ACBP=A9
0001:000952C0 00000128 C=CODE S=.text G=(none) M=WinSock ACBP=A9
0001:000953E8 00003A78 C=CODE S=.text G=(none) M=ScktComp ACBP=A9
0001:00098E60 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9
0001:0009974C 00000598 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9
0001:00099CE4 00000040 C=CODE S=.text G=(none) M=MMSystem ACBP=A9
0001:00099D24 00000038 C=CODE S=.text G=(none) M=Nb30 ACBP=A9
0001:00099D5C 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9
0001:0009A774 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9
0001:0009C87C 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9
0001:000A5AC8 0000191C C=CODE S=.text G=(none) M=UnitPilote ACBP=A9
0001:000A73E4 00000574 C=CODE S=.text G=(none) M=Importation ACBP=A9
0001:000A7958 000192C0 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9
0001:000C0C18 00002D2C C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9
0001:000C3944 00000D10 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9
0001:000C4654 00004F10 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9
0001:000C9564 00045880 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9
0001:0010EDE4 000031F0 C=CODE S=.text G=(none) M=UnitSR ACBP=A9
0001:00111FD4 00002950 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9
0001:00114924 0003ADE0 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9
0001:0014F704 00001863 C=CODE S=.text G=(none) M=verif_version ACBP=A9
0001:00150F68 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9
0001:00152138 00002B74 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9
0001:00154CAC 00000D2C C=CODE S=.text G=(none) M=UnitSimule ACBP=A9
0001:001559D8 0000269C C=CODE S=.text G=(none) M=Unitplace ACBP=A9
0001:00158074 0003B2DF C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9
0001:00193354 000004C0 C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9
0001:00000000 00005F07 C=CODE S=.text G=(none) M=System ACBP=A9
0001:00005F08 00000140 C=CODE S=.text G=(none) M=SysInit ACBP=A9
0001:00006048 00000108 C=CODE S=.text G=(none) M=Types ACBP=A9
0001:00006150 00000F38 C=CODE S=.text G=(none) M=Windows ACBP=A9
0001:00007088 00000038 C=CODE S=.text G=(none) M=Messages ACBP=A9
0001:000070C0 00000338 C=CODE S=.text G=(none) M=SysConst ACBP=A9
0001:000073F8 00006FF8 C=CODE S=.text G=(none) M=SysUtils ACBP=A9
0001:0000E3F0 0000081B C=CODE S=.text G=(none) M=VarUtils ACBP=A9
0001:0000EC0C 0000809E C=CODE S=.text G=(none) M=Variants ACBP=A9
0001:00016CAC 000001A0 C=CODE S=.text G=(none) M=RTLConsts ACBP=A9
0001:00016E4C 0000083C C=CODE S=.text G=(none) M=TypInfo ACBP=A9
0001:00017688 00000358 C=CODE S=.text G=(none) M=ActiveX ACBP=A9
0001:000179E0 0000A7EA C=CODE S=.text G=(none) M=Classes ACBP=A9
0001:000221CC 00000370 C=CODE S=.text G=(none) M=Consts ACBP=A9
0001:0002253C 00009BFB C=CODE S=.text G=(none) M=Graphics ACBP=A9
0001:0002C138 00000124 C=CODE S=.text G=(none) M=Math ACBP=A9
0001:0002C25C 000002B8 C=CODE S=.text G=(none) M=Contnrs ACBP=A9
0001:0002C514 00000198 C=CODE S=.text G=(none) M=CommCtrl ACBP=A9
0001:0002C6AC 00000787 C=CODE S=.text G=(none) M=MultiMon ACBP=A9
0001:0002CE34 00000038 C=CODE S=.text G=(none) M=Imm ACBP=A9
0001:0002CE6C 00000FF8 C=CODE S=.text G=(none) M=HelpIntfs ACBP=A9
0001:0002DE64 00000058 C=CODE S=.text G=(none) M=WinSpool ACBP=A9
0001:0002DEBC 000010C8 C=CODE S=.text G=(none) M=Printers ACBP=A9
0001:0002EF84 0000031F C=CODE S=.text G=(none) M=FlatSB ACBP=A9
0001:0002F2A4 000003F0 C=CODE S=.text G=(none) M=SyncObjs ACBP=A9
0001:0002F694 000009BB C=CODE S=.text G=(none) M=UxTheme ACBP=A9
0001:00030050 00000038 C=CODE S=.text G=(none) M=RichEdit ACBP=A9
0001:00030088 00000038 C=CODE S=.text G=(none) M=ToolWin ACBP=A9
0001:000300C0 00000048 C=CODE S=.text G=(none) M=ShellAPI ACBP=A9
0001:00030108 00000038 C=CODE S=.text G=(none) M=RegStr ACBP=A9
0001:00030140 00000058 C=CODE S=.text G=(none) M=WinInet ACBP=A9
0001:00030198 00000038 C=CODE S=.text G=(none) M=UrlMon ACBP=A9
0001:000301D0 0000007C C=CODE S=.text G=(none) M=ShlObj ACBP=A9
0001:0003024C 00000060 C=CODE S=.text G=(none) M=CommDlg ACBP=A9
0001:000302AC 00000038 C=CODE S=.text G=(none) M=Dlgs ACBP=A9
0001:000302E4 000036D1 C=CODE S=.text G=(none) M=Dialogs ACBP=A9
0001:000339B8 00004ADA C=CODE S=.text G=(none) M=ExtCtrls ACBP=A9
0001:00038494 00000090 C=CODE S=.text G=(none) M=ComStrs ACBP=A9
0001:00038524 000007A0 C=CODE S=.text G=(none) M=Clipbrd ACBP=A9
0001:00038CC4 00000128 C=CODE S=.text G=(none) M=StrUtils ACBP=A9
0001:00038DEC 00003821 C=CODE S=.text G=(none) M=Buttons ACBP=A9
0001:0003C610 00000038 C=CODE S=.text G=(none) M=ExtDlgs ACBP=A9
0001:0003C648 00000068 C=CODE S=.text G=(none) M=IniFiles ACBP=A9
0001:0003C6B0 00000068 C=CODE S=.text G=(none) M=Registry ACBP=A9
0001:0003C718 0000006C C=CODE S=.text G=(none) M=Mapi ACBP=A9
0001:0003C784 00000058 C=CODE S=.text G=(none) M=ExtActns ACBP=A9
0001:0003C7DC 00000038 C=CODE S=.text G=(none) M=ListActns ACBP=A9
0001:0003C814 00009948 C=CODE S=.text G=(none) M=ComCtrls ACBP=A9
0001:0004615C 00000EA0 C=CODE S=.text G=(none) M=Themes ACBP=A9
0001:00046FFC 0000C698 C=CODE S=.text G=(none) M=StdCtrls ACBP=A9
0001:00053694 00000168 C=CODE S=.text G=(none) M=StdActns ACBP=A9
0001:000537FC 00000D1F C=CODE S=.text G=(none) M=WinHelpViewer ACBP=A9
0001:0005451C 00011403 C=CODE S=.text G=(none) M=Controls ACBP=A9
0001:00065920 00001292 C=CODE S=.text G=(none) M=ActnList ACBP=A9
0001:00066BB4 00001B9C C=CODE S=.text G=(none) M=ImgList ACBP=A9
0001:00068750 000066E1 C=CODE S=.text G=(none) M=Menus ACBP=A9
0001:0006EE34 0000CF8C C=CODE S=.text G=(none) M=Forms ACBP=A9
0001:0007BDC0 00000060 C=CODE S=.text G=(none) M=ComConst ACBP=A9
0001:0007BE20 00001259 C=CODE S=.text G=(none) M=ComObj ACBP=A9
0001:0007D07C 00000038 C=CODE S=.text G=(none) M=StdVCL ACBP=A9
0001:0007D0B4 00001793 C=CODE S=.text G=(none) M=AxCtrls ACBP=A9
0001:0007E848 00000060 C=CODE S=.text G=(none) M=OleConst ACBP=A9
0001:0007E8A8 00003519 C=CODE S=.text G=(none) M=OleCtrls ACBP=A9
0001:00081DC4 00000050 C=CODE S=.text G=(none) M=JConsts ACBP=A9
0001:00081E14 000133EC C=CODE S=.text G=(none) M=jpeg ACBP=A9
0001:00095200 00000314 C=CODE S=.text G=(none) M=TlHelp32 ACBP=A9
0001:00095514 00000128 C=CODE S=.text G=(none) M=WinSock ACBP=A9
0001:0009563C 00003A78 C=CODE S=.text G=(none) M=ScktComp ACBP=A9
0001:000990B4 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9
0001:000999A0 00000598 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9
0001:00099F38 00000040 C=CODE S=.text G=(none) M=MMSystem ACBP=A9
0001:00099F78 00000038 C=CODE S=.text G=(none) M=Nb30 ACBP=A9
0001:00099FB0 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9
0001:0009A9C8 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9
0001:0009CAD0 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9
0001:000A5D1C 0000191C C=CODE S=.text G=(none) M=UnitPilote ACBP=A9
0001:000A7638 00000574 C=CODE S=.text G=(none) M=Importation ACBP=A9
0001:000A7BAC 000192C0 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9
0001:000C0E6C 00002D2C C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9
0001:000C3B98 00000D78 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9
0001:000C4910 00004FA0 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9
0001:000C98B0 00045960 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9
0001:0010F210 000031F0 C=CODE S=.text G=(none) M=UnitSR ACBP=A9
0001:00112400 00002950 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9
0001:00114D50 000029E7 C=CODE S=.text G=(none) M=verif_version ACBP=A9
0001:00117738 000011D0 C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9
0001:00118908 00046C78 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9
0001:0015F580 00002B74 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9
0001:001620F4 00000D2C C=CODE S=.text G=(none) M=UnitSimule ACBP=A9
0001:00162E20 000029DC C=CODE S=.text G=(none) M=Unitplace ACBP=A9
0001:001657FC 000494DB C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9
0001:001AECD8 000004C0 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
@@ -109,28 +109,29 @@ Detailed map of segments
0002:00000518 00000080 C=DATA S=.data G=DGROUP M=Classes ACBP=A9
0002:00000598 0000030C C=DATA S=.data G=DGROUP M=Graphics ACBP=A9
0002:000008A4 00000004 C=DATA S=.data G=DGROUP M=Printers ACBP=A9
0002:000008A8 00000180 C=DATA S=.data G=DGROUP M=Dialogs ACBP=A9
0002:00000A28 0000018C C=DATA S=.data G=DGROUP M=ExtCtrls ACBP=A9
0002:00000BB4 0000009E C=DATA S=.data G=DGROUP M=Buttons ACBP=A9
0002:00000C54 00000008 C=DATA S=.data G=DGROUP M=IniFiles ACBP=A9
0002:00000C5C 00000008 C=DATA S=.data G=DGROUP M=Registry ACBP=A9
0002:00000C64 00000008 C=DATA S=.data G=DGROUP M=Mapi ACBP=A9
0002:00000C6C 000000B9 C=DATA S=.data G=DGROUP M=ComCtrls ACBP=A9
0002:00000D28 00000068 C=DATA S=.data G=DGROUP M=Themes ACBP=A9
0002:00000D90 00000154 C=DATA S=.data G=DGROUP M=StdCtrls ACBP=A9
0002:00000EE4 0000013C C=DATA S=.data G=DGROUP M=Controls ACBP=A9
0002:00001020 00000020 C=DATA S=.data G=DGROUP M=ImgList ACBP=A9
0002:00001040 000000EC C=DATA S=.data G=DGROUP M=Menus ACBP=A9
0002:0000112C 00000124 C=DATA S=.data G=DGROUP M=Forms ACBP=A9
0002:00001250 00000030 C=DATA S=.data G=DGROUP M=ComObj ACBP=A9
0002:00001280 0000002C C=DATA S=.data G=DGROUP M=OleCtrls ACBP=A9
0002:000012AC 00000908 C=DATA S=.data G=DGROUP M=jpeg ACBP=A9
0002:00001BB4 00000058 C=DATA S=.data G=DGROUP M=MSCommLib_TLB ACBP=A9
0002:00001C0C 00000009 C=DATA S=.data G=DGROUP M=MaskUtils ACBP=A9
0002:00001C18 00000004 C=DATA S=.data G=DGROUP M=Mask ACBP=A9
0002:00001C1C 00000006 C=DATA S=.data G=DGROUP M=Grids ACBP=A9
0002:00001C24 000000D4 C=DATA S=.data G=DGROUP M=UnitTCO ACBP=A9
0002:00001CF8 0000060D C=DATA S=.data G=DGROUP M=UnitPrinc ACBP=A9
0002:000008A8 00000010 C=DATA S=.data G=DGROUP M=ShlObj ACBP=A9
0002:000008B8 00000180 C=DATA S=.data G=DGROUP M=Dialogs ACBP=A9
0002:00000A38 0000018C C=DATA S=.data G=DGROUP M=ExtCtrls ACBP=A9
0002:00000BC4 0000009E C=DATA S=.data G=DGROUP M=Buttons ACBP=A9
0002:00000C64 00000008 C=DATA S=.data G=DGROUP M=IniFiles ACBP=A9
0002:00000C6C 00000008 C=DATA S=.data G=DGROUP M=Registry ACBP=A9
0002:00000C74 00000008 C=DATA S=.data G=DGROUP M=Mapi ACBP=A9
0002:00000C7C 000000B9 C=DATA S=.data G=DGROUP M=ComCtrls ACBP=A9
0002:00000D38 00000068 C=DATA S=.data G=DGROUP M=Themes ACBP=A9
0002:00000DA0 00000154 C=DATA S=.data G=DGROUP M=StdCtrls ACBP=A9
0002:00000EF4 0000013C C=DATA S=.data G=DGROUP M=Controls ACBP=A9
0002:00001030 00000020 C=DATA S=.data G=DGROUP M=ImgList ACBP=A9
0002:00001050 000000EC C=DATA S=.data G=DGROUP M=Menus ACBP=A9
0002:0000113C 00000124 C=DATA S=.data G=DGROUP M=Forms ACBP=A9
0002:00001260 00000030 C=DATA S=.data G=DGROUP M=ComObj ACBP=A9
0002:00001290 0000002C C=DATA S=.data G=DGROUP M=OleCtrls ACBP=A9
0002:000012BC 00000908 C=DATA S=.data G=DGROUP M=jpeg ACBP=A9
0002:00001BC4 00000080 C=DATA S=.data G=DGROUP M=MSCommLib_TLB ACBP=A9
0002:00001C44 00000009 C=DATA S=.data G=DGROUP M=MaskUtils ACBP=A9
0002:00001C50 00000004 C=DATA S=.data G=DGROUP M=Mask ACBP=A9
0002:00001C54 00000006 C=DATA S=.data G=DGROUP M=Grids ACBP=A9
0002:00001C5C 000000D4 C=DATA S=.data G=DGROUP M=UnitTCO ACBP=A9
0002:00001D30 0000060D C=DATA S=.data G=DGROUP M=UnitPrinc ACBP=A9
0002:00003000 00000664 C=BSS S=.bss G=DGROUP M=System ACBP=A9
0002:00003664 00000010 C=BSS S=.bss G=DGROUP M=SysInit ACBP=A9
0002:00003674 00000004 C=BSS S=.bss G=DGROUP M=Types ACBP=A9
@@ -215,13 +216,13 @@ Detailed map of segments
0002:00018770 00418700 C=BSS S=.bss G=DGROUP M=UnitTCO ACBP=A9
0002:00430E70 00000010 C=BSS S=.bss G=DGROUP M=UnitSR ACBP=A9
0002:00430E80 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9
0002:00430E94 0000050C C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9
0002:004313A0 00000018 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9
0002:004313B8 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9
0002:004313BC 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9
0002:004313E8 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9
0002:004313F4 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9
0002:004313FC 041B4F9C C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9
0002:00430E94 00000020 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9
0002:00430EB4 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9
0002:00430EB8 00000558 C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9
0002:00431410 0000002C C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9
0002:0043143C 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9
0002:00431448 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9
0002:00431450 041B4FA0 C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9
Bound resource files
@@ -237,8 +238,8 @@ UnitConfigCellTCO.dfm
UnitTCO.dfm
UnitSR.dfm
UnitCDF.dfm
UnitConfig.dfm
verif_version.dfm
UnitConfig.dfm
UnitDebug.dfm
UnitSimule.dfm
Unitplace.dfm
@@ -247,4 +248,4 @@ Signaux_complexes_GL.res
Signaux_complexes_GL.drf
Program entry point at 0001:00193664
Program entry point at 0001:001AEFE8
+98 -142
View File
@@ -1,6 +1,6 @@
object FormConfig: TFormConfig
Left = 230
Top = 120
Left = 347
Top = 101
Hint = 'Modifie la configuration selon les s'#233'lections choisies'
BorderStyle = bsDialog
Caption = 'Configuration g'#233'n'#233'rale'
@@ -681,7 +681,7 @@ object FormConfig: TFormConfig
Top = 8
Width = 633
Height = 505
ActivePage = TabSheetCDM
ActivePage = TabSheetAct
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
@@ -706,7 +706,7 @@ object FormConfig: TFormConfig
Left = 16
Top = 8
Width = 273
Height = 81
Height = 105
Caption = 'Socket de comm. CDM Rail <--> Signaux complexes'
TabOrder = 0
object Label1: TLabel
@@ -739,10 +739,24 @@ object FormConfig: TFormConfig
TabStop = False
TabOrder = 1
end
object ButtonPFCDM: TButton
Left = 16
Top = 72
Width = 241
Height = 25
Hint =
'Ajoute une r'#232'gle d'#39'autorisation de communication du socket vers ' +
'CDM rail dans le pare-feu'
Caption = 'Ajouter les autorisations au pare-feu windows'
ParentShowHint = False
ShowHint = True
TabOrder = 2
OnClick = ButtonPFCDMClick
end
end
object GroupBox5: TGroupBox
Left = 16
Top = 96
Top = 120
Width = 273
Height = 225
Caption = 'Au d'#233'marrage de Signaux_Complexes '
@@ -985,7 +999,7 @@ object FormConfig: TFormConfig
end
object GroupBox8: TGroupBox
Left = 16
Top = 328
Top = 352
Width = 273
Height = 97
Caption = 'Services CommIP CDM Rail'
@@ -1047,77 +1061,42 @@ object FormConfig: TFormConfig
Left = 312
Top = 224
Width = 297
Height = 201
Height = 161
Caption = 'Divers'
TabOrder = 5
object Label31: TLabel
Left = 8
Top = 22
Width = 204
Height = 13
Caption = 'Seuil du nombre de d'#233'tecteurs trop distants'
end
object Label41: TLabel
Left = 8
Top = 64
Top = 24
Width = 188
Height = 13
Caption = 'Taille de la fonte de la fen'#234'tre principale'
end
object Label44: TLabel
Left = 8
Top = 43
Width = 223
Height = 13
Caption = 'Nombre de cantons pr'#233'sence train avant signal'
end
object Label55: TLabel
Left = 8
Top = 86
Top = 46
Width = 32
Height = 13
Caption = 'Debug'
end
object Label28: TLabel
Left = 8
Top = 110
Top = 78
Width = 182
Height = 13
Caption = 'Port du serveur de Signaux Complexes'
end
object EditNbDetDist: TEdit
object EditFonte: TEdit
Left = 240
Top = 18
Top = 22
Width = 25
Height = 21
ParentShowHint = False
ShowHint = False
TabOrder = 0
end
object EditFonte: TEdit
Left = 240
Top = 62
Width = 25
Height = 21
ParentShowHint = False
ShowHint = False
TabOrder = 1
end
object EditNbCantons: TEdit
Left = 240
Top = 39
Width = 25
Height = 21
Hint =
'Nombre de cantons pr'#233'sence train avant un signal pour le d'#233'clar' +
'er verrouill'#233
ParentShowHint = False
ShowHint = True
TabOrder = 2
end
object EditDebug: TEdit
Left = 240
Top = 86
Top = 46
Width = 25
Height = 21
Hint =
@@ -1125,11 +1104,11 @@ object FormConfig: TFormConfig
'par '#233'tape ; 3=Dynamique)'
ParentShowHint = False
ShowHint = True
TabOrder = 3
TabOrder = 1
end
object CheckBoxVerifXpressNet: TCheckBox
Left = 8
Top = 150
Top = 102
Width = 233
Height = 17
Hint =
@@ -1138,24 +1117,24 @@ object FormConfig: TFormConfig
Caption = 'V'#233'rification des adresses XpressNet'
ParentShowHint = False
ShowHint = True
TabOrder = 4
TabOrder = 2
OnClick = CheckBoxVerifXpressNetClick
end
object EditPortServeur: TEdit
Left = 216
Top = 110
Top = 72
Width = 49
Height = 21
Hint = 'Port de 1 '#224' 65535'
ParentShowHint = False
ShowHint = True
TabOrder = 5
TabOrder = 3
OnChange = EditPortServeurChange
OnExit = EditPortServeurExit
end
object CheckBoxSombre: TCheckBox
Left = 8
Top = 132
Top = 124
Width = 137
Height = 17
Hint =
@@ -1164,34 +1143,20 @@ object FormConfig: TFormConfig
Caption = 'Affichage mode sombre'
ParentShowHint = False
ShowHint = True
TabOrder = 6
TabOrder = 4
end
object ButtonCouleur: TButton
Left = 144
Top = 130
Top = 122
Width = 25
Height = 17
Caption = '...'
ParentShowHint = False
ShowHint = True
TabOrder = 7
TabOrder = 5
OnClick = ButtonCouleurClick
end
end
object ButtonPFCDM: TButton
Left = 336
Top = 430
Width = 241
Height = 25
Hint =
'Ajoute une r'#232'gle d'#39'autorisation de communication du socket vers ' +
'CDM rail dans le pare-feu'
Caption = 'Ajouter les autorisations au pare-feu windows'
ParentShowHint = False
ShowHint = True
TabOrder = 6
OnClick = ButtonPFCDMClick
end
end
object TabSheetAutonome: TTabSheet
Caption = 'Mode autonome'
@@ -1464,7 +1429,7 @@ object FormConfig: TFormConfig
end
object GroupBox22: TGroupBox
Left = 312
Top = 320
Top = 256
Width = 297
Height = 65
Caption = 'Protocole de connexion '#224' la centrale ou '#224' l'#39'interface'
@@ -1492,31 +1457,6 @@ object FormConfig: TFormConfig
TabOrder = 1
end
end
object GroupBox25: TGroupBox
Left = 312
Top = 248
Width = 297
Height = 65
Caption = 'Divers'
TabOrder = 8
object Label58: TLabel
Left = 16
Top = 24
Width = 155
Height = 13
Caption = 'Filtrage des d'#233'tecteurs (x100 ms)'
end
object EditFiltrDet: TEdit
Left = 224
Top = 20
Width = 25
Height = 21
Hint = 'Temps de filtrage des d'#233'tecteurs qui passent '#224' 0'
ParentShowHint = False
ShowHint = True
TabOrder = 0
end
end
end
object TabSheetAig: TTabSheet
Caption = 'Aiguillages'
@@ -2047,7 +1987,7 @@ object FormConfig: TFormConfig
Left = 0
Top = 56
Width = 305
Height = 353
Height = 409
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clAqua
@@ -2155,7 +2095,7 @@ object FormConfig: TFormConfig
Top = 104
Width = 75
Height = 20
Hint = 'Cherche une chaine'
Hint = 'Cherche une chaine ; recliquer pour le suivant.'
Caption = 'Cherche'
ParentShowHint = False
ShowHint = True
@@ -2955,7 +2895,7 @@ object FormConfig: TFormConfig
end
object GroupBoxAct: TGroupBox
Left = 8
Top = 120
Top = 112
Width = 249
Height = 321
Caption = 'Action fonction de locomotive '
@@ -3024,7 +2964,7 @@ object FormConfig: TFormConfig
TabOrder = 2
OnChange = EditTrainDeclChange
end
object RadioGroup1: TRadioGroup
object RadioGroupDecl: TRadioGroup
Left = 8
Top = 16
Width = 217
@@ -3069,8 +3009,8 @@ object FormConfig: TFormConfig
end
end
object GroupBox19: TGroupBox
Left = 32
Top = 168
Left = 48
Top = 144
Width = 233
Height = 137
Caption = 'Destinataire de l'#39'action '
@@ -3263,7 +3203,7 @@ object FormConfig: TFormConfig
Height = 21
Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"'
Style = csDropDownList
ItemHeight = 0
ItemHeight = 13
ParentShowHint = False
ShowHint = True
TabOrder = 6
@@ -3284,8 +3224,8 @@ object FormConfig: TFormConfig
end
end
object GroupBoxPNA: TGroupBox
Left = 64
Top = 96
Left = 152
Top = 240
Width = 169
Height = 121
Caption = 'Actionneurs PN simples'
@@ -3300,7 +3240,7 @@ object FormConfig: TFormConfig
TabOrder = 3
end
object GroupBoxPN: TGroupBox
Left = 8
Left = 152
Top = 24
Width = 249
Height = 193
@@ -3444,7 +3384,7 @@ object FormConfig: TFormConfig
Height = 21
Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"'
Style = csDropDownList
ItemHeight = 0
ItemHeight = 13
ParentShowHint = False
ShowHint = True
TabOrder = 10
@@ -3556,7 +3496,7 @@ object FormConfig: TFormConfig
ShowHint = False
object Label10: TLabel
Left = 8
Top = 41
Top = 57
Width = 317
Height = 13
Caption = 'Liste des commandes envoy'#233'es '#224' l'#39'interface DCC++ '#224' la connexion'
@@ -3695,24 +3635,31 @@ object FormConfig: TFormConfig
object Label19: TLabel
Left = 8
Top = 8
Width = 531
Height = 26
Caption =
'Configuration de l'#39'interface DCC++ pour le mode autonome (n'#233'cess' +
'ite de cocher le protocole DCC++ dans l'#39'onglet "Mode autonome")'
Width = 404
Height = 16
Caption = 'Configuration de l'#39'interface DCC++ pour le mode autonome'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
WordWrap = True
end
object Label39: TLabel
Left = 8
Top = 32
Width = 351
Height = 13
Caption =
'(N'#233'cessite de cocher le protocole DCC++ dans l'#39'onglet "Mode auto' +
'nome")'
end
object RichCdeDccpp: TRichEdit
Left = 8
Top = 64
Top = 80
Width = 577
Height = 217
Height = 201
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clAqua
@@ -3782,21 +3729,19 @@ object FormConfig: TFormConfig
object Label54: TLabel
Left = 16
Top = 8
Width = 475
Height = 13
Caption =
'Liste des trains d'#233'clar'#233's du r'#233'seau - Pour utilisation en mode a' +
'utonome uniquement'
Width = 244
Height = 16
Caption = 'Liste des trains d'#233'clar'#233's du r'#233'seau'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object LabelInfVitesse: TLabel
Left = 320
Top = 240
Top = 248
Width = 256
Height = 26
Caption =
@@ -3923,9 +3868,16 @@ object FormConfig: TFormConfig
FFFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00}
Transparent = True
end
object Label31: TLabel
Left = 288
Top = 10
Width = 223
Height = 13
Caption = ' Pour utilisation en mode autonome uniquement'
end
object GroupBox24: TGroupBox
Left = 312
Top = 64
Top = 72
Width = 297
Height = 161
Caption = 'Trains'
@@ -4022,8 +3974,8 @@ object FormConfig: TFormConfig
end
end
object ButtonNT: TButton
Left = 0
Top = 32
Left = 8
Top = 48
Width = 73
Height = 17
Caption = 'Nouveau'
@@ -4032,7 +3984,7 @@ object FormConfig: TFormConfig
end
object ButtonSupprime: TButton
Left = 88
Top = 32
Top = 48
Width = 75
Height = 17
Caption = 'Supprime'
@@ -4041,9 +3993,9 @@ object FormConfig: TFormConfig
end
object ListBoxTrains: TListBox
Left = 8
Top = 64
Top = 72
Width = 281
Height = 345
Height = 337
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clAqua
@@ -4065,12 +4017,12 @@ object FormConfig: TFormConfig
object Label73: TLabel
Left = 8
Top = 8
Width = 208
Height = 13
Width = 252
Height = 16
Caption = 'P'#233'riph'#233'riques COM/USB ou Sockets'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
@@ -4084,7 +4036,7 @@ object FormConfig: TFormConfig
end
object SBMonte: TSpeedButton
Left = 240
Top = 176
Top = 184
Width = 25
Height = 33
Hint =
@@ -4108,7 +4060,7 @@ object FormConfig: TFormConfig
end
object SBDesc: TSpeedButton
Left = 240
Top = 216
Top = 224
Width = 25
Height = 33
Hint =
@@ -4132,7 +4084,7 @@ object FormConfig: TFormConfig
end
object Label23: TLabel
Left = 8
Top = 28
Top = 36
Width = 606
Height = 26
Caption =
@@ -4144,7 +4096,7 @@ object FormConfig: TFormConfig
end
object ListBoxPeriph: TListBox
Left = 8
Top = 88
Top = 96
Width = 233
Height = 273
Color = clBlack
@@ -4165,17 +4117,17 @@ object FormConfig: TFormConfig
end
object ButtonAjAccCom: TButton
Left = 8
Top = 64
Width = 65
Top = 72
Width = 73
Height = 17
Caption = 'Nouveau'
TabOrder = 1
OnClick = ButtonAjAccComClick
end
object ButtonSupAccCom: TButton
Left = 80
Top = 64
Width = 65
Left = 88
Top = 72
Width = 73
Height = 17
Caption = 'Supprime'
TabOrder = 2
@@ -4220,6 +4172,10 @@ object FormConfig: TFormConfig
OnClick = ButtonOuvreComClick
end
end
object TabAvance: TTabSheet
Caption = 'Avanc'#233
ImageIndex = 10
end
end
object ButtonEnregistre: TButton
Left = 472
+283 -40
View File
@@ -123,8 +123,6 @@ type
RadioButtonAccess: TRadioButton;
CheckFenEt: TCheckBox;
GroupBoxDivers: TGroupBox;
EditNbDetDist: TEdit;
Label31: TLabel;
CheckBoxInitAig: TCheckBox;
EditAdrSig: TEdit;
Label32: TLabel;
@@ -213,7 +211,7 @@ type
Label35: TLabel;
Label36: TLabel;
ButtonTestAct: TButton;
RadioGroup1: TRadioGroup;
RadioGroupDecl: TRadioGroup;
RadioButtonActDet: TRadioButton;
RadioButtonZones: TRadioButton;
EditAct2: TEdit;
@@ -224,8 +222,6 @@ type
Label42: TLabel;
Label43: TLabel;
CheckBandeauTCO: TCheckBox;
EditNbCantons: TEdit;
Label44: TLabel;
CheckPosAig: TCheckBox;
ButtonEnregistre: TButton;
CheckBoxDemarUSB: TCheckBox;
@@ -270,9 +266,6 @@ type
EditVitNom: TEdit;
LabelInfVitesse: TLabel;
CheckRoulage: TCheckBox;
GroupBox25: TGroupBox;
Label58: TLabel;
EditFiltrDet: TEdit;
CheckBoxVerifXpressNet: TCheckBox;
ImageTrain: TImage;
PopupMenuRichedit: TPopupMenu;
@@ -353,7 +346,6 @@ type
Label23: TLabel;
Label28: TLabel;
EditPortServeur: TEdit;
ButtonPFCDM: TButton;
CheckBoxZ21: TCheckBox;
RadioButtonDCCpp: TRadioButton;
CheckBoxSombre: TCheckBox;
@@ -361,6 +353,10 @@ type
ColorDialogFond: TColorDialog;
LabelD11: TLabel;
ButtonPropage: TButton;
ButtonPFCDM: TButton;
TabAvance: TTabSheet;
Label31: TLabel;
Label39: TLabel;
procedure ButtonAppliquerEtFermerClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
@@ -574,7 +570,10 @@ PortServeur_ch='Port_Serveur';
AntiTimeoutEthLenz_ch='AntiTimeoutEthLenz';
Verif_AdrXpressNet_ch='Verif_AdrXpressNet';
Filtrage_det_ch='Filtrage_det';
nCantons_Res_ch='nCantonsRes';
MaxSignalSens_ch='Max_Signal_Sens';
Algo_localisation_ch='Algo_localisation';
mode_reserve_ch='Mode_reservation';
Avec_roulage_ch='Avec_roulage';
nb_det_dist_ch='nb_det_dist';
IpV4_PC_ch='IpV4_PC';
@@ -648,7 +647,7 @@ var
ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,IndexSignalclic,NumTrameCDM,
Algo_localisation,Verif_AdrXpressNet,ligneclicTrain,AncligneclicTrain,AntiTimeoutEthLenz,
ligneDCC,decCourant,AffMemoFenetre,ligneClicAccPeriph,AncligneClicAccPeriph,ligneCherche,
compt_Ligne,Style_aff,Ancien_Style,Ecran_SC : integer;
compt_Ligne,Style_aff,Ancien_Style,Ecran_SC,Mode_reserve,Max_Signal_Sens,nCantonsRes : integer;
ack_cdm,clicliste,config_modifie,clicproprietes,confasauver,trouve_MaxPort,
modif_branches,ConfigPrete,trouve_section_dccpp,trouve_section_trains,trouve_section_acccomusb,
@@ -657,7 +656,7 @@ var
fichier : text;
// composants dynamiques
Gp1 : TGroupBox;
Gp1,GroupBoxAvance,GroupBoxExpert : TGroupBox;
CheckBoxCR,Cb1,Cb2,Cb3,CbVis : TCheckBox;
@@ -668,13 +667,19 @@ var
EditZdet1V2F,EditZdet2V2F,EditZdet1V2O,EditZdet2V2O,
EditZdet1V3F,EditZdet2V3F,EditZdet1V3O,EditZdet2V3O,
EditZdet1V4F,EditZdet2V4F,EditZdet1V4O,EditZdet2V4O,
EditZdet1V5F,EditZdet2V5F,EditZdet1V5O,EditZdet2V5O,EditOuvreEcran : Tedit;
EditZdet1V5F,EditZdet2V5F,EditZdet1V5O,EditZdet2V5O,EditOuvreEcran,
EditNbDetDist,EditNbCantons,EditFiltrDet,EditAlgo,
EditMaxSignalSens,EditnCantonsRes : Tedit;
EditT : Array[1..10] of Tedit;
TextBoxCde : array[1..19] of Tedit;
LabelPortCde,LbPnVoie1,LbAPnVoie1,LbAPnVoie2,LbAPnVoie3,LbAPnVoie4,LbAPnVoie5,LbATitre,
LbZTitre,LbZPnVoie1,LbZPnVoie2,LbZPnVoie3,LbZPnVoie4,LbZPnVoie5,LabelMP,LabelNumeroP,
LabelStyle,LabelOuvreEcran : Tlabel;
LabelStyle,LabelOuvreEcran,LabelAvance1,LabelAvance2,
LabelTD,LabelNC,LabelFiltre,LabelAlgo,LabelNbSignBS,LabelnCantonsRes : Tlabel;
RadioReserve : TradioGroup;
LabelDecCde : array[1..19] of TLabel;
@@ -1037,7 +1042,7 @@ begin
30 : s:=s+',V30';
60 : s:=s+',V60';
else begin
s:=s+',V'+formconfig.EditSpecifique.Text;
s:=s+',V'+intToSTR(aiguillage[index].vitesse);
end;
end;
@@ -1725,6 +1730,10 @@ begin
writeln(fichierN,AvecVerifIconesTCO_ch+'=',AvecVerifIconesTCO);
writeln(fichierN,Algo_localisation_ch+'=',Algo_localisation);
writeln(fichierN,MaxSignalSens_ch+'=',Max_Signal_Sens);
writeln(fichierN,mode_reserve_ch+'=',mode_reserve);
writeln(fichierN,Avec_roulage_ch+'=',avecRoulage);
writeln(fichierN,debug_ch+'=',debug);
if sombre then s:='1' else s:='0';
@@ -1734,6 +1743,7 @@ begin
writeln(fichierN,serveurIPCDM_Touche_ch+'='+s);
writeln(fichierN,PortServeur_ch+'=',PortServeur);
writeln(fichierN,Filtrage_det_ch+'=',filtrageDet0);
writeln(fichierN,nCantons_Res_ch+'=',nCantonsRes);
writeln(fichierN,AntiTimeoutEthLenz_ch+'=',AntiTimeoutEthLenz);
// taille de la fonte
writeln(fichierN,Fonte_ch+'=',TailleFonte);
@@ -3171,6 +3181,15 @@ var s,sa,SOrigine: string;
val(s,filtrageDet0,erreur);
end;
sa:=uppercase(nCantons_Res_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
delete(s,i,length(sa));
if (i<1) or (i>5) then i:=2;
val(s,nCantonsRes,erreur);
end;
sa:=uppercase(AntiTimeoutEthLenz_ch)+'=';
i:=pos(sa,s);
if i=1 then
@@ -3188,6 +3207,26 @@ var s,sa,SOrigine: string;
if Algo_localisation<>1 then Affiche('Avertissement: Algo_localisation='+intToSTR(algo_localisation)+' est expérimental et non garanti',clorange);
end;
sa:=uppercase(MaxSignalSens_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
delete(s,i,length(sa));
if (i<0) or (i>50) then i:=5;
val(s,Max_Signal_Sens,erreur);
end;
sa:=uppercase(mode_reserve_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
delete(s,i,length(sa));
if (i<0) or (i>1) then i:=0;
val(s,mode_reserve,erreur);
end;
sa:=uppercase(Avec_roulage_ch)+'=';
i:=pos(sa,s);
if i=1 then
@@ -3987,6 +4026,10 @@ begin
if (i<0) or (i>10) then i:=3;
filtrageDet0:=i;
val(EditnCantonsRes.Text,i,erreur);
if (i<1) or (i>5) then i:=2;
nCantonsRes:=i;
Val(editTempoAig.Text,i,erreur);
if i>3000 then begin labelInfo.Caption:='Temporisation de séquencement incorrecte ';ok:=false;end;
Tempo_Aig:=i;
@@ -4110,6 +4153,14 @@ begin
val(EditBase.Text,AdrBaseDetDccpp,erreur);
if (AdrBaseDetDccpp<0) or (AdrBaseDetDccpp>2048) then AdrBaseDetDccpp:=513;
mode_Reserve:=RadioReserve.ItemIndex; // 0 = par canton - 1=par détecteurs
val(EditAlgo.Text,i,erreur);
Algo_localisation:=i;
val(EditMaxSignalSens.Text,i,erreur);
Max_Signal_Sens:=i;
end;
if change_srv then services_CDM;
verifie_panneau_config:=ok;
@@ -4132,7 +4183,7 @@ procedure clicListeSignal(index : integer);
var AncAdresse,adresse,erreur : integer;
s : string;
begin
if index<1 then exit;
if (index<1) or (index>FormConfig.ListBoxSig.Items.Count) then exit;
s:=Uppercase(FormConfig.ListBoxSig.Items[index-1]); // ligne cliquée
if s='' then
begin
@@ -4200,6 +4251,7 @@ begin
EditportLenz.text:=IntToSTR(PortInterface);
EditTempoAig.Text:=IntToSTR(Tempo_Aig);
EditFiltrDet.text:=intToSTR(filtrageDet0);
EditnCantonsRes.Text:=intToSTR(nCantonsRes);
{$IF CompilerVersion >= 28.0}
ComboStyle.itemIndex:=Style_Aff;
@@ -4290,6 +4342,9 @@ begin
end;
ListBoxAig.itemindex:=0;
RadioReserve.ItemIndex:=mode_Reserve;
editAlgo.Text:=intToSTR(Algo_localisation);
EditMaxSignalSens.Text:=intToSTR(Max_Signal_Sens);
end;
@@ -4739,6 +4794,13 @@ begin
c:=TabSheetPeriph.Components[i];
composant(c,couleurfond,couleurTexte);
end;
// avancé
for i:=0 to TabAvance.ComponentCount-1 do
begin
c:=TabAvance.Components[i];
composant(c,couleurfond,couleurTexte);
end;
end;
end;
@@ -4759,10 +4821,11 @@ begin
end;
procedure TFormConfig.FormCreate(Sender: TObject);
var i,j,y,l,LongestLength,PixelLength : integer;
var i,j,x,y,l,LongestLength,PixelLength : integer;
cs,s,LongestString : string;
begin
if debug=1 then Affiche('Création fenêtre config',clLime);
clicListe:=true;
position:=poMainFormCenter;
cs:='ColorA='+IntToHex(couleurFond,6); // pour rajouter aux couleurs personnalisées de la fenetre couleur
@@ -4790,7 +4853,7 @@ begin
if debug=1 then Affiche('Fin création fenêtre config',clLime);
EditNbreAdr.Text:='2';
// création des champs dynamiques de l'onglet CDM Rail
EditOuvreEcran:=TEdit.create(GroupBox5);
with EditOuvreEcran do
@@ -5487,7 +5550,6 @@ begin
// positionne une scrollbar dans la listbox - pour l'enlever, envoyer 0 dans pixelLength
SendMessage(ListBoxSig.Handle,LB_SETHORIZONTALEXTENT,PixelLength,0);
//comboBoxNation.Items.addObject('Française',Formprinc.Image9feux.Picture.Graphic);
//comboBoxNation.Items.addObject('Belge',Formprinc.ImageSignal20.Picture.Graphic);
//https://www.developpez.net/forums/d487670/environnements-developpement/delphi/composants-vcl/combobox-image-devant-ligne/
@@ -5574,7 +5636,7 @@ begin
// composants dynamiques car on ne peut plus ajouter de composants en mode conception!
// onglet périphériques COM/USB/Socket
//--------- groupbox
//--------- groupbox
gp1:=TgroupBox.Create(FormConfig.TabSheetPeriph);
with gp1 do
begin
@@ -5590,7 +5652,7 @@ begin
cb2:=TCheckBox.Create(FormConfig.TabSheetPeriph);
with cb2 do
begin
Left:=10;Top:=25;Width:=100;Height:=12;
Left:=10;Top:=25;Width:=100;Height:=17;
caption:='Détecteurs';
name:='cbDet';
parent:=gp1;
@@ -5601,7 +5663,7 @@ begin
cb3:=TCheckBox.Create(FormConfig.TabSheetPeriph);
with cb3 do
begin
Left:=10;Top:=45;Width:=100;Height:=12;
Left:=10;Top:=45;Width:=100;Height:=17;
caption:='Actionneurs';
name:='cbAct';
parent:=gp1;
@@ -5613,7 +5675,7 @@ begin
cb1:=TCheckBox.Create(FormConfig.TabSheetPeriph);
with cb1 do
begin
Left:=10;Top:=65;Width:=170;Height:=12;
Left:=10;Top:=65;Width:=170;Height:=17;
caption:='Aiguillages et accessoires';
name:='cbAig';
parent:=gp1;
@@ -5700,7 +5762,7 @@ begin
CheckBoxCR:=TCheckBox.Create(FormConfig.TabSheetPeriph);
with CheckBoxCR do
begin
Left:=10;Top:=LabelPortCde.Top+30;width:=150;Height:=12;
Left:=10;Top:=LabelPortCde.Top+30;width:=150;Height:=17;
caption:='Envoyer CR (retour chariot)';
name:='CheckBoxCR';
parent:=GroupBoxDesc;
@@ -5713,7 +5775,7 @@ begin
with cbVis do
begin
parent:=groupBoxDesc;
Left:=10;Top:=CheckBoxCR.top+20;Width:=100;Height:=12;
Left:=10;Top:=CheckBoxCR.top+20;Width:=100;Height:=17;
caption:='Mode visible';
name:='cbVis';
hint:='Affiche le texte à l''écran lors des envois';
@@ -5728,7 +5790,7 @@ begin
LabelStyle:=TLabel.Create(FormConfig.GroupBoxDivers);
with LabelStyle do
begin
Left:=10;Top:=CheckBoxVerifXpressNet.top+24;Width:=170;Height:=12;
Left:=10;Top:=130;Width:=170;Height:=12;
caption:='Styles d''affichage';
name:='LabelStyle';
parent:=GroupBoxDivers;
@@ -5756,7 +5818,6 @@ begin
ComboStyle.Items.Add(s);
ComboStyle.itemIndex:=Style_Aff;
CheckBoxSombre.Visible:=false;
ButtonCouleur.Visible:=false;
@@ -5765,6 +5826,172 @@ begin
GroupBoxDivers.Height:=180;
{$IFEND}
// onglet avancé
LabelAvance1:=TLabel.Create(FormConfig.TabAvance);
with LabelAvance1 do
begin
Left:=10;Top:=10;Width:=170;Height:=12;
caption:='Paramètres avancés et experts';
name:='LabelAvance1';
Font.Style:=[fsBold];
Font.Size:=10;
parent:=TabAvance;
end;
GroupBoxAvance:=TGroupBox.Create(FormConfig.TabAvance);
with GroupBoxAvance do
begin
Left:=20;Top:=40;Width:=350;Height:=120; // maxi=580
caption:='Jeu de paramètres avancés';
name:='GroupBoxAvance';
parent:=TabAvance;
end;
x:=GroupBoxAvance.width-50;
LabelTD:=TLabel.Create(FormConfig.TabAvance);
with LabelTD do
begin
Left:=10;Top:=30;Width:=170;Height:=12;
caption:='Seuil du nombre de détecteurs trop distants';
name:='LabelTD';
Font.Size:=9;
parent:=GroupBoxAvance;
end;
EditNbDetDist:=TEdit.Create(FormConfig.TabAvance);
with EditNbDetDist do
begin
Left:=x;Top:=28;Width:=30;Height:=15;
name:='EditNbDetDist';
text:='';
parent:=GroupBoxAvance;
hint:='Nombre de détecteurs considérés comme trop distants'+#13+
'Cette valeur dépend de la taille du réseau';
ShowHint:=true;
end;
LabelNC:=TLabel.Create(FormConfig.TabAvance);
with LabelNC do
begin
Left:=10;Top:=50;Width:=170;Height:=12;
caption:='Nombre de cantons présence train avant signal';
name:='LabelNC';
parent:=GroupBoxAvance;
end;
EditNbCantons:=TEdit.Create(TabAvance);
with EditNbCantons do
begin
Left:=x;Top:=48;Width:=30;Height:=15;
name:='EditNbCantons';
text:='';
parent:=GroupBoxAvance;
hint:='Nombre de cantons présence train avant un signal pour le déclarer verrouillé';
ShowHint:=true;
end;
LabelFiltre:=TLabel.Create(FormConfig.TabAvance);
with LabelFiltre do
begin
Left:=10;Top:=70;Width:=170;Height:=12;
caption:='Filtrage des détecteurs (x100 ms)';
name:='LabelFiltre';
parent:=GroupBoxAvance;
end;
EditFiltrDet:=TEdit.Create(TabAvance);
with EditFiltrDet do
begin
Left:=x;Top:=68;Width:=30;Height:=15;
name:='EditFiltrDet';
text:='';
parent:=GroupBoxAvance;
hint:='Temps de filtrage des détecteurs qui passent à 0';
ShowHint:=true;
end;
LabelnCantonsRes:=TLabel.Create(FormConfig.TabAvance);
with LabelnCantonsRes do
begin
Left:=10;Top:=90;Width:=170;Height:=12;
caption:='Nombre de cantons à réserver en avant du train';
name:='LabelnCantonsRes';
parent:=GroupBoxAvance;
end;
EditnCantonsRes:=TEdit.Create(TabAvance);
with EditnCantonsRes do
begin
Left:=x;Top:=88;Width:=30;Height:=15;
name:='EditnCantonsRes';
text:='';
parent:=GroupBoxAvance;
hint:='Nombre de cantons à réserver (1 à 5) en avant du train.'+#13+
'Utilisé en mode roulage ou réservation [sous mode réservation par canton (ci-dessous)].'+#13+
'Cette valeur dépend de la taille du réseau.';
ShowHint:=true;
end;
RadioReserve:=TRadioGroup.Create(TabAvance);
with RadioReserve do
begin
Left:=20;Top:=GroupBoxAvance.top+GroupBoxAvance.Height+20;Width:=GroupBoxAvance.width;Height:=60;
name:='RadioReserve';
Caption:='Réservation des aiguillages';
parent:=TabAvance;
hint:='Choix du mode de réservation des aiguillages par les trains.'+#13+
'La réservation des aiguillages est fonctionelle en mode roulage (mode autonome) ou en mode réservation';
ShowHint:=true;
items.Add('Réservation par canton');
items.Add('Réservation par détecteurs');
end;
GroupBoxExpert:=TGroupBox.Create(FormConfig.TabAvance);
with GroupBoxExpert do
begin
Left:=20;;Width:=350;Height:=100; // maxi=580
Top:=RadioReserve.Top+RadioReserve.Height+20 ;
caption:='Jeu de paramètres experts';
name:='GroupBoxExpert';
parent:=TabAvance;
end;
LabelAlgo:=TLabel.Create(FormConfig.TabAvance);
with LabelAlgo do
begin
Left:=10;Top:=30;Width:=170;Height:=12;
caption:='Algorithme de localisation des trains';
name:='LabelAlgo';
Font.Size:=9;
parent:=GroupBoxExpert;
end;
EditAlgo:=TEdit.Create(FormConfig.TabAvance);
with EditAlgo do
begin
Left:=x;Top:=28;Width:=30;Height:=15;
name:='EditAlgo';
text:='';
parent:=GroupBoxExpert;
hint:='Algorithme de localisation des trains';
ShowHint:=true;
end;
LabelNbSignBS:=TLabel.Create(FormConfig.TabAvance);
with LabelNbSignBS do
begin
Left:=10;Top:=50;Width:=100;Height:=30;
caption:='Nombre maxi d''éléments de recherche lors'+#13+'d''un signal dans le bon sens';
name:='LabelNbSignBS';
Font.Size:=9;
wordwrap:=true;
parent:=GroupBoxExpert;
end;
EditMaxSignalSens:=TEdit.Create(FormConfig.TabAvance);
with EditMaxSignalSens do
begin
Left:=x;Top:=48;Width:=30;Height:=15;
name:='EditMaxSignalSens';
text:='';
parent:=GroupBoxExpert;
hint:='Nombre maxi d''éléments de recherche lors d''un signal dans le bon sens';
ShowHint:=true;
end;
// oui
{if FileExists('Image_Signaux.jpg') then ImageSignaux.Picture.LoadFromFile('Image_Signaux.jpg')
else
Affiche('Manque fichier "Image_Signaux.jpg"',clOrange);
@@ -5826,13 +6053,14 @@ begin
B:='Z';
end;
// Affiche les utilisateurs des périphériques en fonction de la sélection du périphérique
// renvoie les utilisateurs des périphériques en fonction de la sélection du périphérique
function utilisateurs_peripheriques : string;
var i,j,n : integer;
s : string;
begin
n:=0;
s:='Périphérique '+intToSTR(ligneClicAccPeriph+1)+' : '+Tablo_periph[ligneClicAccPeriph+1].nom+#13;
s:=s+'------------------------'+#13;
for i:=1 to maxTablo_act do
begin
if tablo_actionneur[i].periph then
@@ -5907,7 +6135,7 @@ procedure Aff_champs_aig_tablo(index : integer);
var Adresse,Adr2,ind,id2,erreur,position : integer;
tjd,tri,tjs,croi : boolean;
s,ss : string;
i : integer;
i,vitesse : integer;
begin
if index<1 then exit;
s:=Uppercase(formConfig.ListBoxAig.items[index-1]);
@@ -6040,10 +6268,18 @@ begin
CheckInverse.checked:=aiguillage[Index_Aig(adresse)].inversionCDM=1;
if aiguillage[Index_Aig(adresse)].vitesse=0 then begin RadioButtonSans.checked:=true; RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end;
if aiguillage[Index_Aig(adresse)].vitesse=30 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=true; RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end;
if aiguillage[Index_Aig(adresse)].vitesse=40 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=true ;RadioButton60kmh.checked:=false;end;
if aiguillage[Index_Aig(adresse)].vitesse=60 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=true;end;
vitesse:=aiguillage[Index_Aig(adresse)].vitesse;
EditSpecifique.text:=intToSTR(vitesse);
if vitesse=0 then begin RadioButtonSans.checked:=true; RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
else
if vitesse=30 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=true; RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
else
if vitesse=60 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=true;end
else
begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=true ;RadioButton60kmh.checked:=false;
end;
end;
if croi then
@@ -6090,13 +6326,16 @@ begin
Label18.Visible:=false;
CheckInverse.checked:=aiguillage[Index_Aig(adresse)].inversionCDM=1;
if aiguillage[Index].vitesse=0 then begin RadioButtonSans.checked:=true;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
vitesse:=aiguillage[Index].vitesse;
EditSpecifique.text:=intToSTR(vitesse);
if vitesse=0 then begin RadioButtonSans.checked:=true;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
else
if aiguillage[Index].vitesse=30 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=true;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
if vitesse=30 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=true;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=false;end
else
if aiguillage[Index].vitesse=60 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=true;end
if vitesse=60 then begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=false;RadioButton60kmh.checked:=true;end
else
begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=true;RadioButton60kmh.checked:=false;end ;
begin RadioButtonSans.checked:=false;RadioButton30kmh.checked:=false;RadioButtonSpecifique.checked:=true;RadioButton60kmh.checked:=false;
end ;
EditPointe_BG.Text:=intToSTR(aiguillage[index].Apointe)+aiguillage[index].ApointeB;
EditPointe_BG.Hint:=TypeElAIg_to_char(aiguillage[index].Apointe,aiguillage[index].ApointeB);
@@ -6197,8 +6436,12 @@ begin
GroupBox19.Height:=96;
ButtonTestAct.Top:=GroupBox19.Top+GroupBox19.Height+8;
RadioGroup1.Width:=GroupBox18.width-15;
RadioGroup1.Height:=74;
with RadioGroupDecl do
begin
top:=GroupBox18.Top;
Width:=GroupBox18.width-15;
Height:=74;
end;
end;
end;
@@ -6575,7 +6818,7 @@ begin
checkBoxFB.Checked:=Signaux[index].FeuBlanc;
checkFVC.Checked:=Signaux[index].checkFV;
checkFRC.Checked:=Signaux[index].checkFR;
// conditions supplémentaires du carré par aiguillages
// conditions supplémentaires du carré par aiguillages
l:=1;
repeat
nc:=Length(Signaux[index].condcarre[l])-1 ;
@@ -6594,7 +6837,7 @@ begin
// scrolle le MemoCarre sur la première ligne
MemoCarre.SelStart:=0;
MemoCarre.Perform(EM_SCROLLCARET,0,0);
// conditions supplémentaires du feu blanc par aiguillages
// conditions supplémentaires du feu blanc par aiguillages
l:=1;
repeat
nc:=Length(Signaux[index].condFeuBlanc[l])-1 ;
+1
View File
@@ -237,6 +237,7 @@ begin
FormTCO[indexTCO].EdittypeImage.Text:=IntToSTR(BImage);
FormTCO[indexTCO].ComboRepr.ItemIndex:=tco[indexTCO,XclicCell[indexTCO],YclicCell[indexTCO]].repr;
FormTCO[indexTCO].ShapeCoulFond.Brush.Color:=tco[indexTCO,XclicCell[indexTCO],YclicCell[indexTCO]].CouleurFond;
FormTCO[indexTCO].CheckPinv.Checked:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].inverse;
s:='El='+intToSTR(tco[indexTCO,XclicCell[indexTCO],YclicCell[indexTCO]].BImage);
if tco[indexTCO,XclicCell[indexTCO],YclicCell[indexTCO]].adresse<>0 then s:=s+' Adr='+intToSTR(tco[indexTCO,XclicCell[indexTCO],YclicCell[indexTCO]].adresse);
+1
View File
@@ -98,6 +98,7 @@ uses UnitPrinc,unitconfig ;
{$R *.dfm}
// icone exemple
procedure icone_aig;
var r : Trect;
x1,y1,x2,y2,x3,y3,x4,y4 : integer;
+6 -6
View File
@@ -1,6 +1,6 @@
object FormPrinc: TFormPrinc
Left = 113
Top = 196
Left = 114
Top = 237
Width = 1149
Height = 699
Anchors = [akLeft, akTop, akRight]
@@ -18,8 +18,8 @@ object FormPrinc: TFormPrinc
OnCreate = FormCreate
OnResize = FormResize
DesignSize = (
1133
641)
1141
648)
PixelsPerInch = 96
TextHeight = 13
object LabelTitre: TLabel
@@ -1428,8 +1428,8 @@ object FormPrinc: TFormPrinc
end
object StatusBar1: TStatusBar
Left = 0
Top = 619
Width = 1133
Top = 626
Width = 1141
Height = 22
Panels = <
item
+324 -129
View File
@@ -1,5 +1,5 @@
Unit UnitPrinc;
// 27/1 10
// 09/2 10h
(********************************************
Programme signaux complexes Graphique Lenz
Delphi 7 + activeX Tmscomm + clientSocket
@@ -381,6 +381,7 @@ type
procedure proc_checkBoxFB(Sender : Tobject);
procedure proc_checkBoxFV(Sender : Tobject);
procedure proc_checkBoxFR(Sender : Tobject);
procedure procAide(Sender : Tobject);
end;
@@ -591,7 +592,7 @@ var
FormPrinc: TFormPrinc;
Enregistrement,chaine_Envoi,chaine_recue,Id_CDM,Af,version_Interface,entete,suffixe,Lay,
CheminProgrammes,cheminWin : string;
CheminProgrammes,cheminWin,fichierAide : string;
Ancien_detecteur : array[0..NbMaxDet] of boolean; // anciens état des détecteurs et adresses des détecteurs et leur état
detecteur : array[0..NbMaxDet] of // détecteurs indexés par l'adresse
@@ -913,7 +914,11 @@ begin
FormDebug.RichDebug.StyleName:='Windows';
formDebug.MemoEvtDet.StyleName:='Windows';
end;
if formConfig<>nil then FormConfig.RichBranche.StyleName:='Windows';
if formConfig<>nil then
begin
FormConfig.RichBranche.StyleName:='Windows';
FormConfig.RichCdeDccpp.StyleName:='Windows';
end;
for i:=1 to NbreTCO do
begin
if FormTCO[i]<>nil then FormTCO[i].ScrollBox.StyleName:='Windows';
@@ -1113,7 +1118,7 @@ procedure cercle(ACanvas : Tcanvas;x,y,rayon : integer;couleur : Tcolor);
begin
with Acanvas do
begin
//brush.Style:=bsSolid; &&&&
//brush.Style:=bsSolid;
brush.Color:=couleur;
pen.Color:=clBlack;
pen.Width:=1;
@@ -2194,7 +2199,19 @@ begin
until (i=0);
end;
// trouve l'index d'un train par son nom
function indexbrut_train_adresse(adr : integer) : integer;
var i : integer;
trouve : boolean;
begin
i:=1;
repeat
trouve:=TrainZone[i].adrTrain=adr;
inc(i);
until trouve or (i>MaxTrainZone);
if trouve then result:=i-1 else result:=0;
end;
// trouve l'index d'un train par son nom dans le tableau trains
function index_train_nom(nom : string) : integer;
var i : integer;
trouve : boolean;
@@ -5034,7 +5051,7 @@ begin
// faire la réservation du canton
if Signaux[i].Btype_suiv1<>det then detSuiv:=detecteur_suivant(detect,det,Signaux[i].Adr_el_suiv1,Signaux[i].Btype_suiv1,1)
else detSuiv:=Signaux[i].Adr_el_suiv1;
if detSuiv<9990 then reserve_canton(detect,detSuiv,Adrtrain,0,2);
if detSuiv<9990 then reserve_canton(detect,detSuiv,Adrtrain,0,nCantonsRes);
// démarrage d'un train
j:=index_train_adresse(adrtrain);
trains[j].tempoDemarre:=20; // armer la tempo à 2s
@@ -5068,38 +5085,46 @@ begin
Dessine_signal_mx(Signaux[i].Img.Canvas,0,0,1,1,adr,1);
// allume les feux du signal dans le TCO
if TCOACtive then
if TCOActive then
begin
indexTCO:=1;
for y:=1 to NbreCellY[indexTCO] do
for x:=1 to NbreCellX[indexTCO] do
for indexTCO:=1 to NbreTCO do
begin
if TCO[indexTCO,x,y].Bimage=Id_signal then
if formTCO[indexTCO]<>nil then
begin
adresse:=TCO[IndexTCO,x,y].adresse; // vérifie si le signal existe dans le TCO
aspect:=Signaux[Index_Signal(adresse)].Aspect;
case aspect of
2 : ImageSignal:=Formprinc.Image2feux;
3 : ImageSignal:=Formprinc.Image3feux;
4 : ImageSignal:=Formprinc.Image4feux;
5 : ImageSignal:=Formprinc.Image5feux;
7 : ImageSignal:=Formprinc.Image7feux;
9 : ImageSignal:=Formprinc.Image9feux;
12 : ImageSignal:=Formprinc.Image2Dir;
13 : ImageSignal:=Formprinc.Image3Dir;
14 : ImageSignal:=Formprinc.Image4Dir;
15 : ImageSignal:=Formprinc.Image5Dir;
16 : ImageSignal:=Formprinc.Image6Dir;
20 : ImageSignal:=formprinc.ImageSignal20;
else ImageSignal:=Formprinc.Image3feux;
for y:=1 to NbreCellY[indexTCO] do
for x:=1 to NbreCellX[indexTCO] do
begin
if TCO[indexTCO,x,y].Bimage=Id_signal then
begin
adresse:=TCO[IndexTCO,x,y].adresse; // vérifie si le signal existe dans le TCO
if adresse=adr then
begin
aspect:=Signaux[Index_Signal(adresse)].Aspect;
case aspect of
2 : ImageSignal:=Formprinc.Image2feux;
3 : ImageSignal:=Formprinc.Image3feux;
4 : ImageSignal:=Formprinc.Image4feux;
5 : ImageSignal:=Formprinc.Image5feux;
7 : ImageSignal:=Formprinc.Image7feux;
9 : ImageSignal:=Formprinc.Image9feux;
12 : ImageSignal:=Formprinc.Image2Dir;
13 : ImageSignal:=Formprinc.Image3Dir;
14 : ImageSignal:=Formprinc.Image4Dir;
15 : ImageSignal:=Formprinc.Image5Dir;
16 : ImageSignal:=Formprinc.Image6Dir;
20 : ImageSignal:=formprinc.ImageSignal20;
else ImageSignal:=Formprinc.Image3feux;
end;
TailleY:=ImageSignal.picture.BitMap.Height; // taille du signal d'origine
TailleX:=ImageSignal.picture.BitMap.Width;
Orientation:=tco[indextco,x,y].FeuOriente;
// réduction variable en fonction de la taille des cellules
calcul_reduction(frx,fry,LargeurCell[indexTCO],HauteurCell[indexTCO]);
// décalage en X pour mettre la tete du signal alignée sur le bord droit de la cellule pour les signaux tournés à 90G
Dessine_signal_mx(PCanvasTCO[indexTCO],tco[indexTCO,x,y].x,tco[indextco,x,y].y,frx,fry,adresse,orientation);
end;
end;
end;
TailleY:=ImageSignal.picture.BitMap.Height; // taille du signal d'origine
TailleX:=ImageSignal.picture.BitMap.Width;
Orientation:=tco[indextco,x,y].FeuOriente;
// réduction variable en fonction de la taille des cellules
calcul_reduction(frx,fry,LargeurCell[indexTCO],HauteurCell[indexTCO]);
// décalage en X pour mettre la tete du signal alignée sur le bord droit de la cellule pour les signaux tournés à 90G
Dessine_signal_mx(PCanvasTCO[indexTCO],tco[indexTCO,x,y].x,tco[indextco,x,y].y,frx,fry,adresse,orientation);
end;
end;
end;
@@ -5367,7 +5392,7 @@ end;
// 9998: arret sur aiguillage en talon mal positionnée
// 9997: arrêt sur aiguillage dévié
// 9996: arrêt sur position inconnue d'aiguillage
// 9995: arrêt anormal sur buttoir
// 9995: arrêt sur buttoir
// 9994: arrêt sur aiguillage réservé
// la variable "actuel" peut etre changée en cas de TJD!
function suivant_alg3(prec : integer;typeELprec : TEquipement;actuel : integer;typeElActuel : TEquipement;alg : integer) : integer;
@@ -6746,7 +6771,10 @@ begin
Adr:=suivant_alg3(AdrPrec,BtypePrec,AdrFonc,BtypeFonc,2); // élément suivant mais arret sur aiguillage en talon mal positionnée
end
else
begin Adr:=AdrFonc;TypeGen:=BtypeFonc;end;
begin
Adr:=AdrFonc;
TypeGen:=BtypeFonc;
end;
if Adr>9990 then typeGen:=det;
if (NivDebug=3) then AfficheDebug('trouvé '+intToSTR(Adr)+' '+BTypeToChaine(typeGen),clorange);
AdrPrec:=AdrFonc;BtypePrec:=BtypeFonc;
@@ -7157,6 +7185,7 @@ begin
end;
detecteur_suivant_El:=9999;exit;
end;
IndexBranche_det2:=IndexBranche_trouve;
branche_trouve_det2:=branche_trouve;
j:=1; // J=1 test en incrément J=2 test en décrément
@@ -7165,12 +7194,16 @@ begin
repeat
//préparer les variables
IdEl:=1;
AdrPrec:=el1;TypePrec:=typeDet1;
if j=1 then i1:=IndexBranche_det1+1;
if j=2 then i1:=IndexBranche_det1-1;
// les suivants dansla branche sont:
AdrFonc:=BrancheN[branche_trouve_det1,i1].adresse;
typeFonc:=BrancheN[branche_trouve_det1,i1].Btype ;
typeFonc:=BrancheN[branche_trouve_det1,i1].Btype;
IdEl:=1;
elements[idEl].adresse:=adrFonc;
elements[idEl].typ:=TypeFonc;
if NivDebug=3 then
begin
@@ -7190,7 +7223,6 @@ begin
begin
Adr:=9999;
end;
//AfficheDebug('Sortie Alg3: '+IntToSTR(Adr)+'/'+intToSTR(typeGen),clyellow);
if TypeGen=det then inc(N_Det);
if NivDebug=3 then
@@ -7221,6 +7253,10 @@ begin
if (typeDet2=TypeGen) and (Adr=el2) and (N_Det<>Nb_det_dist) then
begin
if Nivdebug=3 then AfficheDebug('614 - Trouvé '+intToSTR(el2),clYellow);
inc(idEl);
elements[idEl].adresse:=el2;
elements[idEl].typ:=Typedet2;
i:=0;
repeat
//AfficheDebug('Engage '+IntToSTR(AdrPrec)+','+IntToSTR(typePrec)+'/'+IntToSTR(AdrFonc)+','+IntToSTR(typeFonc),clyellow);
@@ -7232,6 +7268,9 @@ begin
s:='615 : trouvé='+intToSTR(Adr)+BTypeToChaine(typeGen);
AfficheDebug(s,clorange);
end;
inc(idEl);
elements[idEl].adresse:=adr;
elements[idEl].typ:=TypeGen;
AdrPrec:=AdrFonc;TypePrec:=TypeFonc;
AdrFonc:=Adr;TypeFonc:=typeGen;
@@ -7712,7 +7751,7 @@ begin
det_contigu(det2,det1,i,Typ);
if i=0 then
begin
affiche('Erreur 65 : Signal_suivant_det('+intToSTR(det1)+','+intToSTR(det2)+') ne sont pas liés ',clred);
//affiche('Erreur 65 : Signal_suivant_det('+intToSTR(det1)+','+intToSTR(det2)+') ne sont pas liés ',clred);
signal_suivant_det:=0;
exit;
end;
@@ -8146,7 +8185,8 @@ begin
end;
// renvoie vrai si une mémoire de zone est occupée après le signal "adresse" jusqu'au signal suivant (=canton)
// renvoie vrai si une mémoire de zone est occupée après le signal "adresse" jusqu'au
// nombre de signaux suivants défini par NSigMax=1, 2 ou 3.. (=canton)
// sort de suite si on trouve un train
// adresse=adresse du signal
function test_memoire_zones(adresse : integer) : boolean;
@@ -8276,7 +8316,7 @@ begin
end;
if (AdrSignal<>0) then // si l'adresse est <>0
begin
if (Signaux[isi].Adr_el_suiv1<>prec) then // le feu est-il dans le bon sens de progression?
if (Signaux[isi].Adr_el_suiv1<>prec) then // le signal est-il dans le bon sens de progression?
begin
inc(NSignaux);
j:=0;
@@ -8486,7 +8526,7 @@ begin
end;
if (AdrSignal<>0) then // si l'adresse est <>0
begin
if (Signaux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression?
if (Signaux[ifd].Adr_el_suiv1=prec) then // le signal est-il dans le bon sens de progression?
begin
inc(Nsignaux);
s:='Trouvé signal '+IntToSTR(AdrSignal);
@@ -8512,7 +8552,7 @@ begin
end;
// présence train précédent les n (NbCtSig) cantons du signal Adresse, dans le sens d'avance vers le signal.
// detecteur=true si on doit contrôler aussi sur les détecteurs
// detect=true si on doit contrôler aussi sur les détecteurs
// renvoie vrai si présence train
// dans AdrTrain: renvoie 0 si pas de train
// si on est en mode AvecRESA, renvoie l'index du train
@@ -8703,7 +8743,7 @@ begin
end;
if (AdrSignal<>0) then // si l'adresse est <>0
begin
if (Signaux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression?
if (Signaux[ifd].Adr_el_suiv1=prec) then // le signal est-il dans le bon sens de progression?
begin
inc(Nsignaux);
j:=0;
@@ -8893,8 +8933,8 @@ begin
else detSuiv:=Signaux[index].Adr_el_suiv1;
if detSuiv<9990 then
begin
if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else
if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ;
if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,nCantonsRes) else
if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,nCantonsRes) ;
end;
end;
end;
@@ -8990,7 +9030,7 @@ begin
PresTrain:=false;
// détecteurs précédent le signal , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré
//if (Signaux[index].VerrouCarre) and (modele>=4) then
presTrain:=PresTrainPrec(AdrSignal,Nb_cantons_Sig,false,AdrTrainLoc,voie); //etape A // présence train par adresse train ; renvoie l'adresse du train dans AdrTrainLoc
presTrain:=PresTrainPrec(AdrSignal,Nb_cantons_Sig,detect,AdrTrainLoc,voie); //etape A // présence train par adresse train ; renvoie l'adresse du train dans AdrTrainLoc
if AffSignal and roulage then AfficheDebug('L''@ du train avant le signal est '+intToSTR(AdrTrainLoc),clYellow);
// si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou aig réservé ou que pas présence train avant signal et signal
// verrouillable au carré, afficher un carré
@@ -9003,7 +9043,8 @@ begin
car:=cond_carre(AdrSignal) or car;
//if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow);
if AffSignal and Signaux[index].VerrouCarre then AfficheDebug('le signal est verrouillé au carré',clYellow);
if (modele>=4) and ((not(PresTrain) and Signaux[index].Verroucarre) or car ) then Maj_Etat_Signal(AdrSignal,carre)
if (modele>=4) and ((not(PresTrain) and Signaux[index].Verroucarre) or car ) then Maj_Etat_Signal(AdrSignal,carre)
else
begin
// si on quitte le détecteur on affiche un sémaphore : tester le sens de circulation
@@ -9041,7 +9082,7 @@ begin
Affiche(s,clred);
if AffSignal then AfficheDebug(s,clred);
end;
// si signal suivant affiche rappel ou rouge
// si signal suivant affiche rappel ou rouge (etat=signal suivant)
if TestBit(etat,rappel_60) or testBit(etat,rappel_30) or signal_rouge(AdrSignalSuivant)
then Maj_Etat_Signal(AdrSignal,jaune)
else
@@ -9051,12 +9092,17 @@ begin
begin
Maj_Etat_Signal(AdrSignal,jaune_cli);
//if AffSignal then AfficheDebug('400.Mise du signal au jaune cli',clyellow);
end;
end
else
//sinon si signal suivant=ral30 ou 60
if TestBit(etat,ral_30) or TestBit(etat,ral_60) then
begin
Maj_Etat_Signal(AdrSignal,jaune_cli);
end
end;
end
else
// aiguille locale non déviée ou aspect signal<9
// si le signal suivant est rouge
begin
if AffSignal then AfficheDebug('pas d''aiguille déviée',clYellow);
// effacer la signalisation combinée
@@ -9097,7 +9143,7 @@ begin
begin
// si le signal suivant est jaune
//if affsignal then AfficheDebug('test 404',clyellow);
if TestBit(etat,jaune) then
if TestBit(etat,jaune) or TestBit(etat,ral_30) or TestBit(etat,ral_60) then
begin
Maj_Etat_Signal(AdrSignal,jaune_cli);
//if affsignal then AfficheDebug('401.Mise du feu au jaune cli',clyellow);
@@ -9153,8 +9199,8 @@ begin
else detSuiv:=Signaux[index].Adr_el_suiv1;
if detSuiv<9990 then
begin
if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,2) else
if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,2) ;
if roulage then reserve_canton(Signaux[index].Adr_det1,detSuiv,AdrtrainLoc,0,nCantonsRes) else
if AvecResa then reserve_canton(Signaux[index].Adr_det1,detSuiv,0,AdrtrainLoc,nCantonsRes) ;
end;
end;
end;
@@ -9238,27 +9284,70 @@ begin
// parcourir les éléments jusque detecteur2
// oui, est-il dans le bon sens?
succ:=suivant_alg3(actuel,typeAct,suiv,typSuiv,1);
if (succ>9990) then
begin
Affiche('Erreur 154',clred);
end;
actuel:=suiv;typeact:=typSuiv;
suiv:=succ;typSuiv:=typeGen;
inc(it);
until (succ=det2) or (it>7);
until (succ=det2) or (succ=0) or (it>Max_Signal_Sens);
if debug=3 then formprinc.Caption:='';
signal_sens:=succ=det2;
end;
// libère la portion de det1 à detecteur2
Procedure libere_detecteur(detecteur1,detecteur2 : integer);
var i,j,det3 : integer;
typ : tEquipement;
begin
if not(roulage) and not(avecResa) then exit;
//if traceliste or ProcPrinc then
Affiche('Libère_Detecteur '+intToSTR(detecteur1)+' '+intToSTR(detecteur2),clLime);
if ProcPrinc then AfficheDebug('Libère_Detecteur '+intToSTR(detecteur1)+' '+intToSTR(detecteur2),clLime);
det3:=detecteur_suivant_El(detecteur1,det,detecteur2,det,1); // arret sur suivant
if traceListe then AfficheDebug('Libération portion det '+IntToSTR(detecteur1)+' '+intToSTR(detecteur2)+' : ',clLime);
for i:=1 to idEl do
begin
j:=elements[i].adresse;
typ:=elements[i].typ;
if (typ=Aig) or (typ=tjd) or (typ=tjs) or (typ=crois) or (typ=triple) then
begin
if traceListe then Affichedebug_Suivi(intToSTR(j)+' ',clLime);
Aiguillage[index_aig(j)].AdrTrain:=0; // libère l'aiguillage
end;
end;
Maj_Signaux(false);
end;
// libère le canton avant detecteur2 comportant un signal et le signal précédent
// attention le détecteur 2 n'est pas forcément associé à un signal (et dans le bon sens)
Procedure libere_canton(detecteur1,detecteur2 : integer);
var sd2,i,j: integer;
typ : tEquipement;
begin
// mode_reserve 0 = par canton - 1=par détecteurs
if mode_reserve=1 then
begin
libere_detecteur(detecteur1,detecteur2);
exit;
end;
if not(roulage) and not(avecResa) then exit;
if traceliste or ProcPrinc then afficheDebug('Libère_canton '+intToSTR(detecteur1)+' '+intToSTR(detecteur2),clorange);
//if traceliste or ProcPrinc then
affiche('Libère_canton '+intToSTR(detecteur1)+' '+intToSTR(detecteur2),clLime);
if ProcPrinc then AfficheDebug('Libère_Canton '+intToSTR(detecteur1)+' '+intToSTR(detecteur2),clLime);
// est-on en limite de canton du detecteur 2 pour le libérer?
sd2:=signal_detecteur(detecteur2); // trouve le signal associé au detecteur2
if sd2=0 then exit; // pas de signal associé
if sd2=0 then
begin
if traceliste then affiche('le détecteur '+intToSTR(detecteur2)+' n''est pas pas associé à un signal - pas de libération du canton',clorange);
exit; // pas de signal associé
end;
// ce signal sd2 est il dans le bon sens
i:=signal_suivant_det(detecteur1,detecteur2); // adresse du signal dans le bon sens associé au détecteur
if i<>sd2 then exit;
@@ -9280,6 +9369,35 @@ begin
Maj_Signaux(false);
end;
// reserve les aiguillages du det1 au det2 et au suivant de det2
procedure reserve_detecteur(det1,det2,adrTrain,NumTrain : integer);
var det3,i,j : integer;
typ : tEQuipement;
begin
det3:=detecteur_suivant_El(det1,det,det2,det,1);
Affiche('Réserve détecteur '+intToSTR(det1)+' '+intToSTR(det2)+' '+intToSTR(det3),clYellow);
for i:=1 to idEl do
begin
j:=elements[i].adresse;
//Affiche(intToSTR(j),clOrange);
typ:=elements[i].typ;
if (typ=Aig) or (typ=tjd) or (typ=tjs) or (typ=crois) or (typ=triple) then
begin
if TraceListe then AfficheDebug_Suivi(intToSTR(j)+' ',clOrange);
if AvecResa then
begin
if (Aiguillage[index_aig(j)].AdrTrain=0) then Aiguillage[index_aig(j)].AdrTrain:=numtrain;
end;
if roulage then
begin
if (Aiguillage[index_aig(j)].AdrTrain)=0 then Aiguillage[index_aig(j)].AdrTrain:=AdrTrain;
end;
Texte_aig_fond(j);
end;
end;
Maj_Signaux(false); //sans_Maj
end;
// réserve le nombre de cantons "nCantons" du detecteur1 (non compris) équipé du signal ou le prochain suivant si le signal n'est pas au rouge
// la réservation consiste à marquer un aiguillage avec l'adresse du train "adrTrain" ou "NumTrain"
@@ -9293,12 +9411,13 @@ var nc,AdrSig,i,j,etat,etatSuiv,AdrSignalsuivant : integer;
s : string;
begin
if not(roulage) and not(avecResa) then exit;
if traceliste or ProcPrinc then
begin
s:='Réservation '+intToSTR(nCantons)+' cantons après détecteur '+intToSTR(detecteur1)+' '+intToSTR(detecteur2)+' pour train ';
if roulage then s:=s+'@'+intToSTR(adrtrain)
else if avecResa then s:=s+intToSTR(NumTrain);
afficheDebug(s,clorange);
if traceliste or ProcPrinc then afficheDebug(s,clorange);
Affiche(s,ClOrange);
end;
if (detecteur1>NbMaxDet) or (detecteur2>NbMaxDet) then
@@ -9307,19 +9426,40 @@ begin
exit;
end;
idEl:=0;
// y a t-il un signal sur le détecteur1
cas2:=false;
AdrSig:=signal_detecteur(detecteur1); // trouve le signal associé au detecteur1
if adrSig<>0 then
begin
// si le signal est dans le bon sens
if signal_sens(AdrSig,detecteur1,detecteur2) then cas2:=true; // oui
// si le signal est dans le bon sens
if signal_sens(AdrSig,detecteur1,detecteur2) then
begin
cas2:=true; // oui
if TraceListe then AfficheDebug('Trouvé signal '+intToSTR(adrSig)+' dans bon sens',clYellow);
end
else if TraceListe then AfficheDebug('Trouvé signal '+intToSTR(adrSig)+' dans mauvais sens',clYellow);
end;
if not(cas2) then AdrSig:=signal_suivant_det(detecteur1,detecteur2); // signal suivant dans le bon sens
if traceListe then afficheDebug('Le signal est '+intToSTR(AdrSig)+' ',clyellow);
// pas de signal !!
if adrSig=0 then
begin
//Affiche('Absence de signal après '+intToSTR(detecteur2)+', réservation pour train @'+intToStr(AdrTrain)+' '+intToSTR(detecteur1)+' '+intToSTR(detecteur2)+' impossible',clred);
i:=indexbrut_train_adresse(AdrTrain); // numéro de train
if i<>0 then
begin
reserve_detecteur(detecteur1,detecteur2,adrTrain,i);
end;
exit;
end;
etat:=Signaux[Index_Signal(AdrSig)].etatSignal;
rouge:=signal_rouge(AdrSig);
if rouge then
@@ -9413,7 +9553,7 @@ begin
inc(nc);
until (nc>Ncantons);
Maj_Signaux(false);
Maj_Signaux(false); // sans_maj
end;
// pilote le train sur le détecteur det2, d'adresse adrtrain
@@ -9427,6 +9567,7 @@ var entree_signal,jauneC,rappel30C,rappel60C,rouge : boolean;
s : string;
begin
if not(roulage) or (adrtrain=0) then exit;
Affiche('Pilote train '+intToSTR(det1)+' '+intToSTR(det2),clYellow);
i:=index_signal_det(det2,voie,i2); // index du signal associé au det2 j:=signal_detecteur(det3);
if i=0 then exit;
@@ -9434,7 +9575,7 @@ begin
couleur:=CouleurTrain[i2];
index_train:=index_train_adresse(adrTrain); // index du tableau trains
adresse:=Signaux[i].adresse; //voir si il est dans le bon sens
adresse:=Signaux[i].adresse; // voir si il est dans le bon sens
adresse2:=signal_suivant_det(det1,det2); // renvoie le signal suivant dans le sens det1 det2
if adresse<>adresse2 then exit; // non pas dans le bon sens
@@ -9604,7 +9745,7 @@ begin
begin
if adrsuiv=9996 then affiche_evt('Erreur position inconnue aiguillage ',clred)
else
Affiche_evt('Erreur 1-0 '+intToSTR(AdrSuiv)+' : pas de suivant detecteur_suivant_el '+intToSTR(det1)+' '+intToSTR(det3),clred);
Affiche_evt('Info 1-0 '+intToSTR(AdrSuiv)+' : pas de suivant detecteur_suivant_el '+intToSTR(det1)+' '+intToSTR(det3),clWhite);
exit;
end;
@@ -9646,12 +9787,12 @@ begin
AdrTrain:=AdrTrainLoc
end;
end;
reserve_canton(det3,AdrSuiv,AdrTrainLoc,i,2); // si feu réserve canton courant
reserve_canton(det3,AdrSuiv,AdrTrainLoc,i,nCantonsRes); // si feu réserve canton courant
libere_canton(det1,det3); // on quitte det3
Maj_Signaux(false);
Maj_Signaux(false);
det4:=detecteur_suivant_EL(det3,det,AdrSuiv,det,1);
if det4<9990 then reserve_canton(AdrSuiv,det4,AdrTrainLoc,i,2) // réserve canton suivant après maj signaux
if det4<9990 then reserve_canton(AdrSuiv,det4,AdrTrainLoc,i,nCantonsRes) // réserve canton suivant après maj signaux
else Affiche_evt('Réservation canton après '+intToSTR(det3)+' '+intToSTR(ADrSuiv)+' impossible (pos? aig)',clOrange);
event_act(det1,det3,1,''); // évènement actionneur
@@ -9716,7 +9857,8 @@ begin
until (j>6) or trouve;
dec(j);
//si début de démarrage train i
if trouve and (TrainZone[i].Nbre=0) and (det1<NbMaxDet) and (det3<NbMaxDet) then
//if trouve and (TrainZone[i].Nbre=0) and (det1<NbMaxDet) and (det3<NbMaxDet) then
if (TrainZone[i].Nbre=0) and (det1<NbMaxDet) and (det3<NbMaxDet) then
begin
//Affiche('on a trouvé le train '+intToSTR(j),clYellow);
detecteur[det3].train:=train_ch; // affecter le nom du train au détecteur
@@ -9735,7 +9877,7 @@ begin
// test si on peut réserver le canton suivant
det_suiv:=det_suiv_cont(det1,det3,1);
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,2) else
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,nCantonsRes) else
begin
if det_suiv=9996 then affiche_evt('Erreur 1-1 position inconnue aiguillage ',clred)
else Affiche_evt('Erreur 1-1 '+intToSTR(Det_Suiv)+' : pas de suivant detecteur_suivant_el '+intToSTR(det1)+' '+intToSTR(det3),clred);
@@ -9756,8 +9898,8 @@ begin
end;
pilote_train(det1,det3,adrtrainLoc,i); // pilote le train sur det3
//event_act(det1,det3,1,''); // activation zone
event_act(det1,det3,1,''); // activation zone
maj_signaux(false);
// actualiser le signal du det3
j:=signal_detecteur(det3);
if j<>0 then Maj_Signal_P(j,false);
@@ -9856,17 +9998,17 @@ begin
libere_canton(det2,det3);
reserve_canton(det3,AdrSuiv,adrTrainLoc,i,2);
reserve_canton(det3,AdrSuiv,adrTrainLoc,i,nCantonsRes);
det4:=detecteur_suivant_EL(det3,det,AdrSuiv,det,1);
if det4>9990 then
begin
if det4=9996 then affiche_evt('Erreur 2-0 position inconnue aiguillage ',clred)
else Affiche_evt('Erreur 2-0 '+intToSTR(Det4)+' : pas de suivant detecteur_suivant_el '+intToSTR(det3)+' '+intToSTR(AdrSuiv),clred);
if det4=9996 then affiche_evt('Erreur: 2-0 position inconnue aiguillage ',clred)
else Affiche_evt('Info: 2-0 '+intToSTR(Det4)+' : pas de suivant detecteur_suivant_el '+intToSTR(det3)+' '+intToSTR(AdrSuiv),clyellow);
end
else
reserve_canton(AdrSuiv,det4,adrTrainLoc,i,2);
reserve_canton(AdrSuiv,det4,adrTrainLoc,i,nCantonsRes);
Maj_Signaux(false);
//Maj_Signaux(false); sans_maj
// stockage dans historique de zones
if i<MaxTrainZone then
begin
@@ -9978,7 +10120,6 @@ begin
begin
//*** route validée ***
// on ne dévalide pas la zone précédente car sinon ne marche pas quand 2 trains se suivent
MemZone[det2,det3].etat:=TRUE; // valide la nouvelle zone
MemZone[det3,det2].etat:=False; // on dévalide la zone inverse
Train_ch:=MemZone[det2,det3].train;
@@ -9998,7 +10139,7 @@ begin
pilote_train(det2,det3,adrtrainLoc,i); // pilote le train sur det3
// test si on peut réserver le canton suivant
det_suiv:=det_suiv_cont(det2,det3,1);
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,2)
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,nCantonsRes)
else
begin
if det_suiv=9996 then affiche_evt('Erreur 2-0 position inconnue aiguillage ',clred)
@@ -10050,25 +10191,35 @@ begin
end
else
begin
if TraceListe then AfficheDebug('La route est invalide car les détecteurs '+intToSTR(det2)+' '+intToSTR(det3)+' ne sont pas contigus',clOrange);
s:='2-1 Train n°'+intToSTR(i)+' Route nok de '+intToSTR(det2)+' à '+IntToSTR(det3);
Affiche_evt(s,couleur);
for tco:=1 to nbreTCO do
if (det1=det3) and false then
begin
// désactivation du morceau avant l'aiguillage
efface_trajet(det3,i);
s:='Demi-tour train '+intToSTR(i);
if TraceListe then AfficheDebug(s,clOrange);
Affiche_evt(s,clOrange);
MemZone[det2,det_Suiv].etat:=false;
MemZone[det2,det3].etat:=true;
efface_trajet(det2,i);
with event_det_train[i] do
begin
det[1].adresse:=det_suiv;
det[1].etat:=false;
det[2].adresse:=det2;
det[2].etat:=false;
NbEl:=2;
end;
end
else
begin
if TraceListe then AfficheDebug('La route est invalide car les détecteurs '+intToSTR(det1)+' '+intToSTR(det2)+' n''ont pas le '+intToSTR(det3)+' attendu',clOrange);
s:='2-1 Train n°'+intToSTR(i)+' Route nok de '+intToSTR(det2)+' à '+IntToSTR(det3);
Affiche_evt(s,couleur);
for tco:=1 to nbreTCO do
begin
// désactivation du morceau avant l'aiguillage
efface_trajet(det3,i);
end;
end;
//if rebond and (event_det_train[i].det[2].adresse=det3) then
//begin
// s:='7. Rebond dét. '+intToSTR(det3)+' déjà affecté au train '+IntToSTR(i);
// FormDebug.MemoEvtDet.lines.add(s);
// if dupliqueEvt then AfficheDebug(s,clyellow);
// désaffecter la zone
// memzone[det2,det_suiv].etat:=false;
// memZone[det1,det2].etat:=true;
// exit; // rebond :sortir
//end;
end;
traite:=true; // non traité: train suivant
end;
@@ -10079,10 +10230,10 @@ begin
if etat then
begin
Maj_Signaux(true); // les autres signaux , avec détecteurs
Maj_Signaux(false); // les autres signaux , avec détecteurs
// mettre à jour le feu du détecteur
i2:=signal_detecteur(det3); // trouve le signal associé au detecteur2
if i2<>0 then Maj_Signal_P(i2,true); // avec détecteur
if i2<>0 then Maj_Signal_P(i2,false); // avec détecteur
for i:=1 to N_trains do
begin
@@ -10111,7 +10262,7 @@ begin
pilote_train(i2,det3,adrtrainLoc,i); // pilote le train sur det3
// test si on peut réserver le canton suivant
det_suiv:=det_suiv_cont(i2,det3,1);
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,2);
if det_suiv<9990 then reserve_canton(det3,det_suiv,AdrTrainLoc,i,nCantonsRes);
// libère canton
libere_canton(i2,det3);
exit;
@@ -10203,6 +10354,7 @@ begin
AfficheDebug('0-0 Création train '+intToStr(N_trains)+' '+detecteur[det3].train+'--------',clyellow);
AfficheDebug(s,clyellow);
end;
Maj_Signaux(false);
exit;
end;
@@ -12721,15 +12873,7 @@ begin
if TCOActive then affiche_TCO(index);
end;
{ ralentit au démarrage
for i:=1 to NbreFeux do
begin
typeFeu:=Signaux[i].aspect;
if TypeFeu=2 then Signaux[i].EtatSignal:=violet_F;
if TypeFeu=3 then Signaux[i].EtatSignal:=semaphore_F;
if (TypeFeu>3) and (TypeFeu<10) then Signaux[i].EtatSignal:=carre_F;
envoi_signal(Signaux[i].adresse);
end; }
Maj_signaux(false);
end;
// positionnement des aiguillages au démarrage : seulement en mode autonome
@@ -13066,15 +13210,34 @@ begin
result:=Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
end;
procedure Tformprinc.procAide(Sender : Tobject);
var i : integer;
begin
i:=ShellExecute(Formprinc.Handle,'open',
Pchar(FichierAide),
nil, // paramètre
nil // répertoire
,SW_SHOWNORMAL);
if i<=32 then Affiche('Impossible d''afficher l''aide '+FichierAide,clred);
end;
// démarrage principal du programme signaux_complexes
procedure TFormPrinc.FormCreate(Sender: TObject);
var n,t,i,index,OrgMilieu : integer;
s : string;
trouve : boolean;
Sr : TSearchRec;
tmP,tmA : tMenuItem;
begin
af:='Client TCP-IP ou USB CDM Rail - système XpressNet DCC++ Version '+Version+sousVersion;
{$IF CompilerVersion >= 28.0}
af:=af+' D11';
{$IFEND}
for index:=1 to 10 do
begin
formTCO[index]:=nil;
end;
Caption:=af;
TraceSign:=True;
configPrete:=false; // form config prete
@@ -13082,6 +13245,8 @@ begin
sauve_tco:=false;
pasChgTBV:=false;
ntrains:=0;
mode_reserve:=0; // mode_reserve 0 = par canton - 1=par détecteurs
ntrains_cdm:=0;
protocole:=1;
filtrageDet0:=3;
@@ -13132,8 +13297,10 @@ begin
affevt:=false;
EvtClicDet:=false;
Algo_localisation:=1; // normal
nCantonsRes:=2;
AntiTimeoutEthLenz:=0;
Verif_AdrXpressNet:=1;
Max_Signal_Sens:=5;
portServeur:=4500;
avecRoulage:=0;
formatY:=-1;
@@ -13144,7 +13311,6 @@ begin
Diffusion:=AvecInit; // mode diffusion publique + debug mise au point etc
roulage1.visible:=false;
FenRich.MaxLength:=$7FFFFFF0;
NbDecodeur:= 11;
NbDecodeurdeBase:=NbDecodeur;
Decodeur[0]:='Rien';Decodeur[1]:='Digital Bahn';Decodeur[2]:='CDF';Decodeur[3]:='LS-DEC-SNCF';Decodeur[4]:='LEB';
@@ -13165,6 +13331,39 @@ begin
cheminWin:=GetCurrentProcessEnvVar('windir')+'\System32';
end;
//DirList:=TStringList.Create;
if FindFirst(chemin_dest+ '*.*', faAnyFile, SR) = 0 then
begin
repeat
s:=sr.Name;
if (s<>'.') and (s<>'..') then
begin
FichierAide:=lowercase(SR.Name);
trouve:=pos('.pdf',FichierAide)<>0;
end;
until (FindNext(sr)<>0) or (trouve);
FindClose(sr);
end;
if trouve then
begin
// menu principal
tmP:=TmenuItem.Create(MainMenu1);
tmP.Caption:='Aide';
tmP.Name:='MiAide';
tmP.Hint:=FichierAide;
MainMenu1.items.Add(tmP);
// 1ere entrée
i:=MainMenu1.Items.Count;
tmA:=TmenuItem.Create(MainMenu1);
tmA.Caption:='Fichier d''aide';
tmA.Name:='MiAidePDF';
tmA.Hint:=FichierAide;
MainMenu1.Items[i-1].Add(tmA);
MainMenu1.Items[i-1].Items[0].OnClick:=ProcAide;
end;
// vérifier ocx tmscomm
i:=filesize(cheminwin+'\mscomm32.ocx');
if (i<>103744) and (i<>-1) then Affiche('Version fichier '+cheminwin+'\mscomm32.ocx incorrecte',clred);
@@ -13346,10 +13545,6 @@ begin
positionne_elements(PosSplitter);
end;
for index:=1 to 10 do
begin
formTCO[index]:=nil;
end;
// positionnement de la fenêtre principale
show;
@@ -13465,19 +13660,15 @@ begin
begin
if maxaiguillage>0 then
begin
Affiche('Positionnement des aiguillages',clYellow);
Affiche('Positionnement des aiguillages',clcyan);
init_aiguillages; // initialisation des aiguillages
end;
if NbreSignaux>0 then
begin
Affiche('Positionnement des signaux',clyellow);
envoi_signauxCplx; // initialisation des signaux
end;
end;
if not(AvecInitAiguillages) and not(ferme) and (parSocketLenz or portCommOuvert)
and AvecDemandeAiguillages then
begin
procetape('demande etats accessoires');
procetape('Demande etats accessoires');
demande_etat_acc; // demande l'état des accessoires (position des aiguillages)
end;
//Menu_interface(valide);
@@ -15658,9 +15849,9 @@ begin
end;
end;
Affiche('Liste des zones actuellement occupées:',clWhite);
i:=1;
i:=0;
repeat
j:=1;
j:=0;
repeat
aff:=MemZone[i,j].etat;
if aff then
@@ -16079,7 +16270,6 @@ end;
procedure TFormPrinc.TrackBarVitChange(Sender: TObject);
var s : string;
i,adr,vit,erreur : integer;
sens : boolean;
begin
if affEvt then Affiche('Changement TrackBarVit',clyellow);
if pasChgTBV then exit;
@@ -16099,9 +16289,10 @@ begin
end;
//Affiche('Commande vitesse train '+s+' ('+intToSTR(adr)+') à '+IntToSTR(vit)+'%',cllime);
sens:=vit>0;
vitesse_loco(s,i,adr,vit,sens,true);
if s='' then s:=intToSTR(adr);
// ne pas commander la vitesse car la rétro met à jour la track bar!!!
//sens:=vit>0;
//vitesse_loco(s,i,adr,vit,sens,true);
//if s='' then s:=intToSTR(adr);
end;
procedure TFormPrinc.EditVitesseChange(Sender: TObject);
@@ -16318,10 +16509,13 @@ begin
end;
procedure TFormPrinc.RazResaClick(Sender: TObject);
var i : integer;
begin
Affiche('Mise à 0 de la réservation des aiguillages',clYellow);
Raz_reservations;
Maj_Signaux(false);
//Maj_Signaux(false);
for i:=1 to nbreTCO do
Affiche_tco(i);
end;
procedure TFormPrinc.SBMarcheArretLocoClick(Sender: TObject);
@@ -17530,7 +17724,8 @@ begin
if n>1 then affiche(intToSTR(n)+' clients connectés',clyellow);
end;
begin
end.
begin
end.
+18 -7
View File
@@ -556,7 +556,7 @@ var
OldBmp : TBitMap;
PScrollBoxTCO : TScrollBox;
// liste des variables par tco
// liste des variables par tco de 1 à 10
largeurCelld2,HauteurCelld2,NbCellulesTCO,NbreCellX,NbreCellY,LargeurCell,HauteurCell,
Xentoure,Yentoure,XclicCell,YclicCell,EcranTCO,clGrille,clFond,ClAllume,ClVoies,
ClCanton,clPiedSignal,ClQuai,ClBarriere,ZoomInit,Xinit,Yinit : array[1..10] of integer;
@@ -8485,14 +8485,18 @@ begin
2 : yt:=hauteurCell[indexTCO]-round(17*fryGlob[indexTCO]); // bas
end; }
i:=detecteur[adresse].AdrTrain;
if i<>0 then
begin
i:=index_train_adresse(i);
if i<>0 then s:=s+' '+trains[i].nom_train;
i:=detecteur[adresse].AdrTrain;
if i<>0 then
begin
i:=index_train_adresse(i); // trouve le nom du train par son adresse
if i<>0 then s:=s+' '+trains[i].nom_train;
end
else if roulage then s:=s+' ';
//PCanvasTCO[indexTCO].font.Size:=(LargeurCell[indexTCO] div 13)+4 ;
TextOut(xOrg+xt,Yorg+yt,s+' ');
end;
//PCanvasTCO[indexTCO].font.Size:=(LargeurCell[indexTCO] div 13)+4 ;
TextOut(xOrg+xt,Yorg+yt,s+' ');
end;
end;
@@ -8966,6 +8970,12 @@ procedure efface_trajet(det,train : integer);
var i,j,t,n,Bimage,x,y : integer;
trouve : boolean;
begin
if Train>Max_Trains then
begin
Affiche('Erreur 85: paramètre maximal train atteint',clred);
exit;
end;
for t:=1 to NbreTCO do
begin
n:=Trace_Train[t].train[train].nombre;
@@ -12608,6 +12618,7 @@ begin
YclicCellInserer:=YClic;
EditAdrElement.Text:=IntToSTR(tco[indextco,XClicCellInserer,YClicCellInserer].Adresse);
EditTypeImage.Text:=IntToSTR(tco[indextco,XClicCellInserer,YClicCellInserer].Bimage);
CheckPinv.Checked:=tco[indextco,XClicCellInserer,YClicCellInserer].inverse;
end;
end;
+14
View File
@@ -37,6 +37,7 @@ implementation
{$R *.dfm}
procedure commande_simple;
var i : integer;
begin
with formAig do
begin
@@ -50,9 +51,22 @@ begin
ButtonDev.Left:=48;
ButtonDroit.Left:=216;
i:=Index_aig(Aiguille);
i:=aiguillage[i].position;
if i=const_devie then
begin
buttonDev.SetFocus;
end;
if i=const_droit then
begin
buttonDroit.SetFocus;
end;
end;
end;
// activation de la form, l'aiguillage à piloter est dans la variable globale "Aiguille"
procedure TFormAig.FormActivate(Sender: TObject);
var i : integer;
s : string;
+9 -9
View File
@@ -177,36 +177,36 @@ begin
if (prec<9990) then
begin
inc(it);
{
detecteur[detect].etat:=true;
detecteur[detect].AdrTrain:=trains[i].adresse;
detecteur[detect].train:=placement[i].train;
detecteur[detect].IndexTrain:=i;
// valider zone précédente
MemZone[prec,detect].etat:=true;
MemZone[prec,detect].train:=placement[i].train;
MemZone[prec,detect].Adrtrain:=trains[i].adresse;
MemZone[prec,detect].NumTrain:=i;
MemZone[prec,detect].IndexTrain:=i;
//Affiche(inttostr(prec)+' '+intToSTR(detect),clorange);
// remplir 1er élément du tableau
event_det_train[it].NbEl:=1 ;
event_det_train[it].AdrTrain:=trains[i].adresse;
event_det_train[it].det[1].adresse:=prec;
event_det_train[it].det[1].etat:=false;
event_det_train[it].nom_train:=placement[i].train;
inc(N_trains);
}
inc(N_trains);
// essai-------------------------
Event_Detecteur(detect,true,nomtrain);
detecteur[detect].AdrTrain:=trains[i].adresse;
// -----------------------------
Affiche('Positionnement train '+detecteur[detect].train+' sur détecteur '+intToSTR(detect)+' vers '+Ssuiv,clLime);
end
else
begin
@@ -384,7 +384,7 @@ begin
s:='Lancement du train '+detecteur[adrDet].train+' depuis détecteur '+intToSTR(adrDet);
Affiche(s,clYellow);
if traceListe then AfficheDebug(s,clyellow);
reserve_canton(AdrDet,placement[j].detdir,adrtrain,0,2);
reserve_canton(AdrDet,placement[j].detdir,adrtrain,0,nCantonsRes);
end
Else Affiche('Le signal '+intToSTR(AdrSignal)+' étant rouge, le train '+detecteur[adrDet].train+' @'+intToSTR(AdrTrain)+' ne démarre pas',clyellow);
+287 -12
View File
@@ -5,7 +5,7 @@ interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls , ComCtrls ,WinInet, ExtCtrls , StrUtils, unitPrinc,
ShellAPI;
ShellAPI , comObj , ShlObj , ActiveX ;
type
TFormVersion = class(TForm)
@@ -22,15 +22,23 @@ type
var
FormVersion: TFormVersion;
Lance_verif : integer;
verifVersion,notificationVersion : boolean;
date_creation,nombre_tel : string;
verifVersion,notificationVersion,essai : boolean;
chemin_Dest,chemin_src,date_creation,nombre_tel : string;
Const Version='8.41'; // sert à la comparaison de la version publiée
Const Version='8.42'; // 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;
function DownloadURL_NOCache(aUrl: string;s : string;var taille : longint): Boolean;
function Unzip(zipfile : oleVariant): boolean;
implementation
@@ -114,11 +122,195 @@ begin
end;
end;
procedure copie_fichier(s : string);
var fs,fd : string;
i : integer;
begin
fd:=chemin_dest+s;
fs:=chemin_src+s;
//Affiche(fd,clOrange);
//Affiche(fs,clOrange);
if not(copyfile(pchar(fs),pchar(fd),false)) then
begin
fs:=' non copié'; // true évite de le recopier
i:=getLastError;
Affiche('Erreur '+s,clred);
Affiche('non copié. Erreur '+intToSTR(i)+': '+SysErrorMessage(i),clred);
end
else
Affiche(s+' copié',clLime);
end;
procedure cree_raccourci(nom_exe : string);
var
LinkName : WideString;
TargetName : String;
IObject : IUnknown;
ISLink : IShellLink;
IPFile : IPersistFile;
PIDL : PItemIDList;
InFolder : array[0..MAX_PATH] of Char;
begin
TargetName:=CheminProgrammes+'\Signaux_complexes\'+nom_exe;
IObject:=CreateComObject(CLSID_ShellLink);
ISLink:=IObject as IShellLink;
IPFile:=IObject as IPersistFile;
with ISLink do begin
SetPath(pChar(TargetName));
SetWorkingDirectory(pChar(ExtractFilePath(TargetName)));
end;
// on veut placer le lien sur le bureau
SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL);
SHGetPathFromIDList(PIDL,InFolder);
if nom_exe='signaux_complexes_gl.exe' then LinkName:=InFolder + '\Signaux Complexes.lnk';
if nom_exe='signaux_complexes_gl_d11.exe' then LinkName:=InFolder + '\Signaux Complexes D11.lnk';
IPFile.Save(PWChar(LinkName),false);
end;
// dézipe copie les fichiers et lance la nouvelle version
procedure dezipe_copie(s : string);
var fichier,nomPDF : string;
dirList : tStrings;
SR : TSearchRec;
nombre,i,attributes : integer;
pdf,ok : boolean;
begin
Aff('Téléchargement réussi, décompression');
formVersion.close;
Affiche('Décompression du zip '+s,clLime);
if not(unzip(s)) then
begin
Affiche('Erreur à la décompression du zip',clred);
exit;
end;
chemin_src:=s;
i:=pos('.zip',chemin_src);
if i=0 then
begin
affiche('Zip invalide',clred);
exit;
end;
delete(chemin_src,i,4);
// Vérifier si répertoire dest existe
chemin_Dest:=CheminProgrammes+'\Signaux_complexes';
if not(directoryExists(chemin_Dest)) then
begin
Affiche('Création du répertoire '+chemin_dest,clLime);
mkDir(chemin_dest);
end;
chemin_dest:=chemin_dest+'\';
chemin_src:=chemin_src+'\';
// remplit dirlist avec les noms de fichiers du chemin dest
nombre:=0;
DirList:=TStringList.Create;
if FindFirst(chemin_dest+ '*.*', faAnyFile, SR) = 0 then
begin
repeat
s:=sr.Name;
if (s<>'.') and (s<>'..') then
begin
DirList.Add(SR.Name); //Fill the list
inc(nombre);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
// supprimer les fichiers signaux_complexes_gl.Exe et versions.txt et pdf
nomPdf:='';
for i:=0 to nombre-1 do
begin
s:=DirList.Strings[i];
s:=lowercase(s);
pdf:=pos('.pdf',s)<>0;
if pdf then
nomPDF:=s;
//Affiche(s,clyellow);
// fichiers à supprimer dans répertoire destination
if (pos('.exe',s)<>0) or (s='versions.txt') or (s='signaux_complexes_gl_d11.exe') or pdf then
begin
fichier:=chemin_dest+s;
if sysutils.FileExists((fichier)) then
begin
Affiche('Suppression de '+fichier,clorange);
Attributes:=FileGetAttr(pchar(fichier));
Attributes := Attributes and not (faReadOnly or faHidden);
SetFileAttributes(pchar(fichier),Attributes);
ok:=sysutils.DeleteFile(pchar(fichier));
if not(OK) then Affiche('Erreur : Pas réussi à supprimer '+fichier,clred);
end;
end;
end;
// copie les fichiers du répertoire zip vers le rep installé
copie_fichier('signaux_complexes_gl.exe');
copie_fichier('signaux_complexes_gl_d11.exe');
copie_fichier('versions.txt');
// trouver du nom du pdf
nombre:=0;
// remplit dirlist avec les noms de fichiers du chemin src
if FindFirst(chemin_src+ '*.*', faAnyFile, SR) = 0 then
begin
repeat
s:=sr.Name;
if (s<>'.') and (s<>'..') then
begin
DirList.Add(SR.Name); //Fill the list
if pos('.pdf',sr.Name)<>0 then NomPdf:=sr.name;
inc(nombre);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
DirList.Destroy;
if nomPdf<>'' then copie_fichier(nomPdf);
Affiche('Création des raccourcis sur le bureau',cllime);
cree_raccourci('signaux_complexes_gl.exe');
cree_raccourci('signaux_complexes_gl_d11.exe');
if essai then exit;
s:='';
Affiche('Lancement de la nouvelle version',clyellow);
Application.processMessages;
Sleep(3000);
i:=ShellExecute(Formprinc.Handle,'open',
Pchar('signaux_complexes_gl_d11.exe'),
Pchar(s), // paramètre
PChar(chemin_dest) // répertoire
,SW_SHOWNORMAL);
if i>32 then
begin
Affiche('lancement ok',cllime);
Application.Terminate;
end
else
begin
Affiche('Erreur '+intToSTR(i),clred);
exit;
end;
end;
// renvoie le numéro de version depuis le site github
// si 0
function verifie_version : real;
var description,s,s2,s3,Version_p,Url,LocalFile,nomfichier,date_creation_ang
: string;
var description,s,s2,s3,Version_p,Url,LocalFile,nomfichier,date_creation_ang : string;
trouve_version,trouve_zip,zone_comm,LocZip : boolean;
fichier : text;
i,j,erreur,Ncomm,i2,l : integer;
@@ -301,21 +493,34 @@ begin
aff(' ');
for i:=1 to ncomm do aff(comm[i]);
end;
if MessageDlg(s+'. Voulez-vous la télécharger?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
if MessageDlg(s+#13+'Voulez-vous la télécharger, l''installer et l''exécuter?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
// récupérer depuis la variable d'environnement windows USERPROFILE le repertoire de la session ouverte
s:=GetCurrentProcessEnvVar('USERPROFILE')+'\Downloads\'+Nomfichier;
Aff('Téléchargement de '+s3+' dans ');
Aff(s);
essai:=false;
if not(essai) then
begin
Aff('Téléchargement de '+s3+' dans ');
Aff(s);
Affiche('Téléchargement de '+s3+' dans '+s,clLime);
end;
if essai then
begin
Affiche('*** mode essai ***',clOrange);
dezipe_copie(s);
exit;
end;
if DownloadURL_NOCache(s3,s,taille) then
begin
if taille>700000 then
begin
Aff('Téléchargement réussi');
Aff('Vous pouvez ouvrir le dossier de téléchargement, décomprimer le zip et l''installer');
dezipe_copie(s);
end
else Aff('Echec 2 de téléchargement');
else Aff('Echec 2 de téléchargement - taille invalide');
end
else Aff('Echec 1 de téléchargement');
end
@@ -368,5 +573,75 @@ begin
end;
end;
procedure DeleteDirectory(const DirName: string);
var
FileFolderOperation: TSHFileOpStruct;
begin
FillChar(FileFolderOperation, SizeOf(FileFolderOperation), 0);
FileFolderOperation.wFunc := FO_DELETE;
FileFolderOperation.pFrom := PChar(ExcludeTrailingPathDelimiter(DirName) + #0);
FileFolderOperation.fFlags := FOF_SILENT or FOF_NOERRORUI or FOF_NOCONFIRMATION;
SHFileOperation(FileFolderOperation);
end;
// https://github.com/sx2008/Delphi-Test-Apps/blob/master/ShellZipTest/ShellZipTool.pas
function Unzip(zipfile : oleVariant): boolean;
var
shellobj,srcfldr, destfldr, shellfldritems,repertoire: Olevariant;
filtre: string;
i : integer;
erreur : integer;
begin
filtre:='';
zipfile:=lowercase(zipfile);
i:=pos('.zip',zipfile);
if i=0 then exit;
filtre:=zipfile;
delete(filtre,i,4);
if directoryExists(filtre) then DeleteDirectory(filtre);
{$I-}
MkDir(filtre);
erreur:=IoResult;
{$I+}
if erreur<>0 then
begin
Affiche('Impossible de créer répertoire',clred);
exit;
end;
repertoire:=filtre; // mettre dans olevariant
filtre:='';
shellobj:=CreateOleObject('Shell.Application');
srcfldr:=ShellObj.NameSpace(Zipfile);
if not ((VarType(srcfldr)=varDispatch) and Assigned(TVarData(srcfldr).VDispatch)) then
begin
Affiche(zipfile+ ' invalide ou absent',clred);
result:=false;
exit;
end;
destfldr:=ShellObj.NameSpace(repertoire);
if not ((VarType(destfldr)=varDispatch) and Assigned(TVarData(destfldr).VDispatch)) then
begin
Affiche(' répertoire destination invalide : '+ repertoire,clred);
result:=false;
exit;
end;
shellfldritems:=srcfldr.Items;
if (filtre<>'') then shellfldritems.Filter(SHCONTF_INCLUDEHIDDEN or SHCONTF_NONFOLDERS or SHCONTF_FOLDERS,filtre);
//destfldr.CopyHere(shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL);
destfldr.CopyHere(shellfldritems, SHCONTCH_RESPONDYESTOALL);
result:=true;
end;
begin
end.
+4 -1
View File
@@ -227,6 +227,9 @@ version 8.38 : Ajout de l'importation depuis le r
Amélioration du traitement des trames inconnues en XpressNet.
version 8.4 : Création de la version D11 (deux exécutables disponibles après installation) qui permet de choisir des styles d'affichage.
Lire la documentation pages 6 et 7.
version 8.41 : Améliorations diverses dans les traitements
version 8.41 : Améliorations diverses dans les traitements.
Possibilité d'ouvrir signaux_complexes sur un écran au choix.
Auto-installation des nouvelles versions au choix.
version 8.42 : Création d'un onglet de paramètres avancés.
Fichier d'aide affichable depuis le menu.