diff --git a/Notice d'utilisation des signaux_complexes_GL_V8.41.pdf b/Notice d'utilisation des signaux_complexes_GL_V8.42.pdf similarity index 76% rename from Notice d'utilisation des signaux_complexes_GL_V8.41.pdf rename to Notice d'utilisation des signaux_complexes_GL_V8.42.pdf index 3f22c05..5df227b 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V8.41.pdf and b/Notice d'utilisation des signaux_complexes_GL_V8.42.pdf differ diff --git a/Signaux_complexes_GL.cfg b/Signaux_complexes_GL.cfg index 8d97c47..bcc5ab2 100644 --- a/Signaux_complexes_GL.cfg +++ b/Signaux_complexes_GL.cfg @@ -14,8 +14,8 @@ -$N+ -$O- -$P+ --$Q- --$R- +-$Q+ +-$R+ -$S- -$T- -$U- diff --git a/Signaux_complexes_GL.dof b/Signaux_complexes_GL.dof index 5ccec48..454559d 100644 --- a/Signaux_complexes_GL.dof +++ b/Signaux_complexes_GL.dof @@ -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 diff --git a/Signaux_complexes_GL.map b/Signaux_complexes_GL.map index 84c2cec..3ad16ae 100644 --- a/Signaux_complexes_GL.map +++ b/Signaux_complexes_GL.map @@ -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 diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 386a5d0..d4db304 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -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 diff --git a/UnitConfig.pas b/UnitConfig.pas index 650a594..5d9c44d 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -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 ; diff --git a/UnitConfigCellTCO.pas b/UnitConfigCellTCO.pas index f48fbd0..72427ea 100644 --- a/UnitConfigCellTCO.pas +++ b/UnitConfigCellTCO.pas @@ -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); diff --git a/UnitConfigTCO.pas b/UnitConfigTCO.pas index e772b4e..363013c 100644 --- a/UnitConfigTCO.pas +++ b/UnitConfigTCO.pas @@ -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; diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index 9a79465..db6affb 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -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 diff --git a/UnitPrinc.pas b/UnitPrinc.pas index 6fc3e8e..e8a0541 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -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 (det10 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 i0 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. diff --git a/UnitTCO.pas b/UnitTCO.pas index 1acf971..83c36c4 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -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; diff --git a/Unit_Pilote_aig.pas b/Unit_Pilote_aig.pas index b90cb44..614be14 100644 --- a/Unit_Pilote_aig.pas +++ b/Unit_Pilote_aig.pas @@ -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; diff --git a/Unitplace.pas b/Unitplace.pas index 44c2e35..0e84a16 100644 --- a/Unitplace.pas +++ b/Unitplace.pas @@ -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); diff --git a/verif_version.pas b/verif_version.pas index 075a734..7c18f33 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -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. diff --git a/versions.txt b/versions.txt index 3e39bc3..dadb3d3 100644 --- a/versions.txt +++ b/versions.txt @@ -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.