This commit is contained in:
f1iwq2
2026-01-17 11:19:04 +01:00
parent 4b997f5de1
commit 7daf7e28aa
24 changed files with 1157 additions and 2334 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
object FormAnalyseCDM: TFormAnalyseCDM object FormAnalyseCDM: TFormAnalyseCDM
Left = 206 Left = 210
Top = 145 Top = 94
AutoScroll = False AutoScroll = False
Caption = 'Fen'#234'tre r'#233'seau CDM' Caption = 'Fen'#234'tre r'#233'seau CDM'
ClientHeight = 596 ClientHeight = 596
@@ -62,7 +62,7 @@ object FormAnalyseCDM: TFormAnalyseCDM
object Label5: TLabel object Label5: TLabel
Left = 1005 Left = 1005
Top = 528 Top = 528
Width = 24 Width = 12
Height = 13 Height = 13
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Caption = '+ -' Caption = '+ -'
+36 -17
View File
@@ -73,7 +73,6 @@ type
procedure ImageCDMMouseMove(Sender: TObject; Shift: TShiftState; X, procedure ImageCDMMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); Y: Integer);
procedure ButtonAnimeClick(Sender: TObject); procedure ButtonAnimeClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ImageCDMMouseDown(Sender: TObject; Button: TMouseButton; procedure ImageCDMMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure ImageCDMMouseUp(Sender: TObject; Button: TMouseButton; procedure ImageCDMMouseUp(Sender: TObject; Button: TMouseButton;
@@ -220,6 +219,8 @@ function isole_valeur(var s : string; chercher : string;afficheErr : boolean) :
var i : integer; var i : integer;
serr : string; serr : string;
begin begin
chercher:=lowercase(chercher);
s:=lowercase(s);
i:=pos(chercher,s); i:=pos(chercher,s);
if i=0 then if i=0 then
begin begin
@@ -235,8 +236,8 @@ begin
delete(s,1,i+length(chercher)-1); delete(s,1,i+length(chercher)-1);
repeat repeat
if s[1]=' ' then delete(s,1,1); if (s[1]=' ') or (s[1]='=') then delete(s,1,1);
until (s[1]<>' ') or (length(s)=0); until ((s[1]<>' ') and (s[1]<>'=')) or (length(s)=0);
i:=pos(' ',s); i:=pos(' ',s);
if i<>0 then isole_valeur:=copy(s,1,i-1) else isole_valeur:=s; if i<>0 then isole_valeur:=copy(s,1,i-1) else isole_valeur:=s;
@@ -301,7 +302,28 @@ begin
Segment[nSeg-1].periph[nperiph-1].location:=i; Segment[nSeg-1].periph[nperiph-1].location:=i;
s:=AnsiLowerCase(lignes[nligne]); s:=AnsiLowerCase(lignes[nligne]);
// ne pas faire inc(nligne) car on va regarder la ligne suivante en indiçant en +1 inc(nligne);
{non utilisé mais doit être pris en compte
Actionneurs Tickets horaire ou gestionnaire de voie unique,
tickets = le type de l'actionneur, soit :
0 = ACT_STD, Actionneur standard.
1 = ACT_MANO, Actionneur manuel, non actionné par les trains mais par un clic souris.
2 = ACT_VUH Actionneur Voie Unique ou Tickets Horaire, actionné dans les deux sens par les trains. Ils vont toujours par paire.
Twined = RefIndex de l'actionneur associé en cas d'un ACT_VUH.
}
s2:=isole_valeur(s,'tckets',false); // nouveau
if s2<>'' then
begin
s:=AnsiLowerCase(lignes[nligne]);
inc(nLigne);
end;
s2:=isole_valeur(s,'tickets',false); // nouveau Tickets = 0 Twined = 0
if s2<>'' then
begin
s:=AnsiLowerCase(lignes[nligne]);
inc(nLigne);
end;
s2:=isole_valeur(s,'address',true); s2:=isole_valeur(s,'address',true);
val(s2,i,erreur); val(s2,i,erreur);
@@ -325,7 +347,7 @@ begin
val(s2,i,erreur); val(s2,i,erreur);
Segment[nSeg-1].periph[nperiph-1].status:=i; Segment[nSeg-1].periph[nperiph-1].status:=i;
// peut être suivi de 'On device port' si une adresse de détecteur ou d'actionneur se trouve sur l'appareil de voie // peut être suivi de 'on device port' si une adresse de détecteur ou d'actionneur se trouve sur l'appareil de voie
Segment[nSeg-1].periph[nperiph-1].OnDevicePort:=-1; // marqueur d'invalidité Segment[nSeg-1].periph[nperiph-1].OnDevicePort:=-1; // marqueur d'invalidité
s:=AnsiLowerCase(lignes[nligne+1]); s:=AnsiLowerCase(lignes[nligne+1]);
if pos('on device port',s)<>0 then if pos('on device port',s)<>0 then
@@ -343,6 +365,7 @@ begin
end; end;
procedure compile_inter; procedure compile_inter;
var i,erreur : integer; var i,erreur : integer;
s,s2: string; s,s2: string;
@@ -370,6 +393,7 @@ begin
s2:=isole_valeur(s,'type:',true); s2:=isole_valeur(s,'type:',true);
Segment[nSeg-1].inter[nInter-1].typ:=s2; Segment[nSeg-1].inter[nInter-1].typ:=s2;
// nouvelle ligne: Mirror: Z= 1416
s:=AnsiLowerCase(lignes[nligne]); s:=AnsiLowerCase(lignes[nligne]);
inc(nLigne); inc(nLigne);
s2:=isole_valeur(s,'z=',true); s2:=isole_valeur(s,'z=',true);
@@ -4328,7 +4352,7 @@ begin
s:=lowercase(Formprinc.fenRich.Lines[0]); s:=lowercase(Formprinc.fenRich.Lines[0]);
if pos('module',s)=0 then if pos('module',s)=0 then
begin begin
Affiche('Pas de module CDM détecté',clred); Affiche('Pas de module CDM détecté - Abandon',clred);
exit; exit;
end; end;
end end
@@ -4387,7 +4411,12 @@ begin
end; end;
inc(nligne); inc(nligne);
until (nligne>nombre); until (nligne>nombre);
Affiche('Fin de la compilation des segments',cllime); if nseg<>0 then Affiche('Fin de la compilation des segments',cllime)
else
begin
Affiche('Aucun segment trouvé - Abandon',clred);
exit;
end;
// balayer les segments pour transformer les bjd en créant 1 croisement et 4 aiguillages dans les segments, puis on supprime la bjd des segments // balayer les segments pour transformer les bjd en créant 1 croisement et 4 aiguillages dans les segments, puis on supprime la bjd des segments
i:=0; i:=0;
@@ -5555,19 +5584,9 @@ begin
sleep(40); sleep(40);
Application.processMessages; Application.processMessages;
until x>800; until x>800;
//until x>500;
end; end;
procedure TFormAnalyseCDM.Button1Click(Sender: TObject);
begin
dessine_det(523);
end;
procedure TFormAnalyseCDM.ImageCDMMouseDown(Sender: TObject; procedure TFormAnalyseCDM.ImageCDMMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin begin
+1 -1
View File
@@ -16,7 +16,7 @@ object FormClock: TFormClock
OnResize = FormResize OnResize = FormResize
DesignSize = ( DesignSize = (
234 234
212) 211)
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
object BitBtnMarHor: TBitBtn object BitBtnMarHor: TBitBtn
+35 -17
View File
@@ -1,6 +1,6 @@
object FormConfig: TFormConfig object FormConfig: TFormConfig
Left = 265 Left = 404
Top = 106 Top = 164
Hint = 'Modifie la configuration selon les s'#233'lections choisies' Hint = 'Modifie la configuration selon les s'#233'lections choisies'
BorderStyle = bsDialog BorderStyle = bsDialog
Caption = 'Configuration g'#233'n'#233'rale' Caption = 'Configuration g'#233'n'#233'rale'
@@ -1573,7 +1573,7 @@ object FormConfig: TFormConfig
Top = 8 Top = 8
Width = 633 Width = 633
Height = 505 Height = 505
ActivePage = TabSheetCDM ActivePage = TabSheetSig
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack Font.Color = clBlack
Font.Height = -11 Font.Height = -11
@@ -1668,6 +1668,17 @@ object FormConfig: TFormConfig
Height = 13 Height = 13
Caption = 'Nom du fichier LAY '#224' utiliser au d'#233'marrage de CDM' Caption = 'Nom du fichier LAY '#224' utiliser au d'#233'marrage de CDM'
end end
object SpeedButtonLay: TSpeedButton
Left = 232
Top = 192
Width = 23
Height = 22
Hint = 'Choix du fichier LAY'
Caption = '...'
ParentShowHint = False
ShowHint = True
OnClick = SpeedButtonLayClick
end
object CheckVerifVersion: TCheckBox object CheckVerifVersion: TCheckBox
Left = 8 Left = 8
Top = 56 Top = 56
@@ -1729,7 +1740,7 @@ object FormConfig: TFormConfig
object EditLAY: TEdit object EditLAY: TEdit
Left = 8 Left = 8
Top = 192 Top = 192
Width = 249 Width = 217
Height = 21 Height = 21
Hint = 'Nom du LAY avec .lay' Hint = 'Nom du LAY avec .lay'
ParentShowHint = False ParentShowHint = False
@@ -2031,7 +2042,7 @@ object FormConfig: TFormConfig
end end
object CheckBoxVerifXpressNet: TCheckBox object CheckBoxVerifXpressNet: TCheckBox
Left = 8 Left = 8
Top = 90 Top = 88
Width = 233 Width = 233
Height = 17 Height = 17
Hint = Hint =
@@ -2097,7 +2108,7 @@ object FormConfig: TFormConfig
'S'#233'lection du style d'#39#39'affichage - Le style sera chang'#233' '#224' la ferm' + 'S'#233'lection du style d'#39#39'affichage - Le style sera chang'#233' '#224' la ferm' +
'eture de la fen'#234'tre'#39 'eture de la fen'#234'tre'#39
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 0 TabOrder = 0
@@ -2146,7 +2157,7 @@ object FormConfig: TFormConfig
object Label4: TLabel object Label4: TLabel
Left = 16 Left = 16
Top = 45 Top = 45
Width = 135 Width = 196
Height = 26 Height = 26
Caption = '2. Temporisation d'#39'envoi des octets de la trame (ms)' Caption = '2. Temporisation d'#39'envoi des octets de la trame (ms)'
WordWrap = True WordWrap = True
@@ -2154,7 +2165,7 @@ object FormConfig: TFormConfig
object Label5: TLabel object Label5: TLabel
Left = 16 Left = 16
Top = 75 Top = 75
Width = 148 Width = 192
Height = 26 Height = 26
Caption = Caption =
'3. Temporisation d'#39'attente de la r'#233'ponse de l'#39'interface (x 50 ms' + '3. Temporisation d'#39'attente de la r'#233'ponse de l'#39'interface (x 50 ms' +
@@ -2419,8 +2430,11 @@ object FormConfig: TFormConfig
Top = 24 Top = 24
Width = 145 Width = 145
Height = 21 Height = 21
Hint = 'Echelle'
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 13
ParentShowHint = False
ShowHint = True
TabOrder = 0 TabOrder = 0
OnChange = ComboBoxEchelleChange OnChange = ComboBoxEchelleChange
Items.Strings = ( Items.Strings = (
@@ -3779,7 +3793,7 @@ object FormConfig: TFormConfig
Top = 56 Top = 56
Width = 193 Width = 193
Height = 21 Height = 21
ItemHeight = 13 ItemHeight = 0
TabOrder = 0 TabOrder = 0
OnChange = ComboBoxDecodeurPersoChange OnChange = ComboBoxDecodeurPersoChange
end end
@@ -3798,7 +3812,7 @@ object FormConfig: TFormConfig
Width = 145 Width = 145
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
TabOrder = 2 TabOrder = 2
OnChange = ComboBoxNationChange OnChange = ComboBoxNationChange
end end
@@ -3844,7 +3858,7 @@ object FormConfig: TFormConfig
Width = 193 Width = 193
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
TabOrder = 6 TabOrder = 6
OnChange = ComboBoxDecCdeChange OnChange = ComboBoxDecCdeChange
end end
@@ -4057,7 +4071,7 @@ object FormConfig: TFormConfig
Top = 96 Top = 96
Width = 137 Width = 137
Height = 21 Height = 21
ItemHeight = 13 ItemHeight = 0
TabOrder = 2 TabOrder = 2
OnChange = ComboBoxOperateurChange OnChange = ComboBoxOperateurChange
OnDrawItem = ComboBoxOperateurDrawItem OnDrawItem = ComboBoxOperateurDrawItem
@@ -4077,7 +4091,7 @@ object FormConfig: TFormConfig
Top = 96 Top = 96
Width = 161 Width = 161
Height = 21 Height = 21
ItemHeight = 13 ItemHeight = 0
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 4 TabOrder = 4
@@ -4189,7 +4203,7 @@ object FormConfig: TFormConfig
Width = 145 Width = 145
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
TabOrder = 7 TabOrder = 7
OnChange = ComboBoxFLChange OnChange = ComboBoxFLChange
end end
@@ -4725,7 +4739,7 @@ object FormConfig: TFormConfig
Hint = 'action par accessoire DCC ou commande COM/USB' Hint = 'action par accessoire DCC ou commande COM/USB'
Caption = 'Type d'#39'action' Caption = 'Type d'#39'action'
Items.Strings = ( Items.Strings = (
'Accessoire' 'Accessoire DCC'
'Commande COM/USB ou Socket') 'Commande COM/USB ou Socket')
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
@@ -4739,7 +4753,7 @@ object FormConfig: TFormConfig
Height = 21 Height = 21
Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"'
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 10 TabOrder = 10
@@ -6499,7 +6513,7 @@ object FormConfig: TFormConfig
Width = 153 Width = 153
Height = 21 Height = 21
Style = csDropDownList Style = csDropDownList
ItemHeight = 13 ItemHeight = 0
TabOrder = 0 TabOrder = 0
OnChange = ComboBoxUSBTrChange OnChange = ComboBoxUSBTrChange
end end
@@ -6633,6 +6647,10 @@ object FormConfig: TFormConfig
Hint = 'Copie tout le contenu en tant que texte dans le presse-papier' Hint = 'Copie tout le contenu en tant que texte dans le presse-papier'
OnClick = outcopierentatquetexte1Click OnClick = outcopierentatquetexte1Click
end end
object MenuListesCopier2: TMenuItem
Caption = 'Coller'
OnClick = MenuListesCopier2Click
end
end end
object ColorDialogFond: TColorDialog object ColorDialogFond: TColorDialog
OnShow = ColorDialogFondShow OnShow = ColorDialogFondShow
+186 -66
View File
@@ -514,6 +514,8 @@ type
Label15: TLabel; Label15: TLabel;
LabeledEditCr: TLabeledEdit; LabeledEditCr: TLabeledEdit;
LabeledEditT: TLabeledEdit; LabeledEditT: TLabeledEdit;
SpeedButtonLay: TSpeedButton;
MenuListesCopier2: TMenuItem;
procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure ButtonAppliquerEtFermerClick(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure ListBoxAigMouseDown(Sender: TObject; Button: TMouseButton; procedure ListBoxAigMouseDown(Sender: TObject; Button: TMouseButton;
@@ -816,6 +818,8 @@ type
procedure EditTempoSigChange(Sender: TObject); procedure EditTempoSigChange(Sender: TObject);
procedure LabeledEditCrChange(Sender: TObject); procedure LabeledEditCrChange(Sender: TObject);
procedure LabeledEditTChange(Sender: TObject); procedure LabeledEditTChange(Sender: TObject);
procedure SpeedButtonLayClick(Sender: TObject);
procedure MenuListesCopier2Click(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
@@ -931,6 +935,7 @@ Affcompteur_ch='AffCompteur';
LargCompteur_ch='LargCompteur'; LargCompteur_ch='LargCompteur';
LargComptC_ch='LargCompteurC'; LargComptC_ch='LargCompteurC';
HautComptC_ch='HautCompteurC'; HautComptC_ch='HautCompteurC';
ZoomSignaux_ch='ZoomSignaux';
VerrouCompteur_ch='VerrouCompteur'; VerrouCompteur_ch='VerrouCompteur';
Echelle_ch='Echelle'; Echelle_ch='Echelle';
AffIconeTrCompteur_ch='AffIconeTrCompteur'; AffIconeTrCompteur_ch='AffIconeTrCompteur';
@@ -1238,7 +1243,7 @@ begin
end; end;
// vérifie si la config de la com série/usb est ok // vérifie si la config de la com série/usb est ok
// COM7:9600,n,8,1 // exemple s='COM7:9600,n,8,1'
function config_com(s : string) : boolean; function config_com(s : string) : boolean;
var sa : string; var sa : string;
i,erreur,vitesse : integer; i,erreur,vitesse : integer;
@@ -1467,7 +1472,7 @@ begin
result:=''; result:='';
exit; exit;
end; end;
if affevt then Affiche('Encode_sig_feux('+IntToSTR(i)+') : adresse='+IntToSTR(adresse),clyellow); if affevt then Affiche('Encode_signal('+IntToSTR(i)+') : adresse='+IntToSTR(adresse),clyellow);
s:=IntToSTR(adresse)+','; s:=IntToSTR(adresse)+',';
// forme - D=directionnel ajouter 10 // forme - D=directionnel ajouter 10
@@ -2048,7 +2053,7 @@ begin
end; end;
// transforme l'action en chaine // encode l'action en chaine
function encode_actions(i : integer) : string; function encode_actions(i : integer) : string;
var s : string; var s : string;
decl,action,Nb,j: integer; decl,action,Nb,j: integer;
@@ -2121,7 +2126,6 @@ begin
ActionAffecteMemoire : s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse)+','+intToSTR(Tablo_Action[i].tabloOP[j].etat); ActionAffecteMemoire : s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse)+','+intToSTR(Tablo_Action[i].tabloOP[j].etat);
ActionIncMemoire: s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse); ActionIncMemoire: s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse);
ActionDecMemoire: s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse); ActionDecMemoire: s:=s+','+intToSTR(Tablo_Action[i].tabloOP[j].adresse);
end; end;
if j<nb then s:=s+','; if j<nb then s:=s+',';
@@ -2223,7 +2227,7 @@ var s: string;
fichierN : text; fichierN : text;
i,j,n,k : integer; i,j,n,k : integer;
begin begin
assignFile(fichierN,NomConfig); assignFile(fichierN,repertoire_SC+'\'+NomConfig);
rewrite(fichierN); rewrite(fichierN);
// entête // entête
@@ -2321,6 +2325,8 @@ begin
writeln(fichierN,LargComptC_ch+'=',IntToSTR(LargComptC)); writeln(fichierN,LargComptC_ch+'=',IntToSTR(LargComptC));
writeln(fichierN,HautComptC_ch+'=',IntToSTR(HautComptC)); writeln(fichierN,HautComptC_ch+'=',IntToSTR(HautComptC));
writeln(fichierN,ZoomSignaux_ch+'=',FloatToSTRF(RedAffSig,ffFixed,5,1,FormatSettings));
if VerrouilleCompteur then s:='1' else s:='0'; if VerrouilleCompteur then s:='1' else s:='0';
writeln(fichierN,VerrouCompteur_ch+'=',s); writeln(fichierN,VerrouCompteur_ch+'=',s);
@@ -2727,7 +2733,7 @@ begin
end; end;
end; end;
// trier les détecteurs // trier les détecteurs et affecte le tableau detecteur[]
procedure trier_detecteurs; procedure trier_detecteurs;
var i,j,temp : integer; var i,j,temp : integer;
begin begin
@@ -3128,6 +3134,29 @@ begin
end; end;
end; end;
// extrait les détecteurs des branches
procedure compile_detecteurs_des_branches;
var i,j,id : integer;
begin
id:=0;
for i:=1 to NbreBranches do
begin
j:=1;
while not(brancheN[i,j].Adresse=0) do
begin
if brancheN[i,j].BType=det then
begin
inc(id);
// Affiche('Détecteur '+intToSTR(brancheN[i,j].adresse),clWhite);
Adresse_detecteur[id]:=brancheN[i,j].adresse;
end;
inc(j);
end;
end;
NDetecteurs:=id;
trier_detecteurs; // et affecte le tableau detecteurs[]
end;
// génère les informations calculées // génère les informations calculées
procedure genere_informations_BD; procedure genere_informations_BD;
begin begin
@@ -3137,6 +3166,7 @@ begin
trier_cantons; trier_cantons;
trier_signaux; trier_signaux;
compile_id_routes; compile_id_routes;
compile_detecteurs_des_branches;
end; end;
procedure lit_config; procedure lit_config;
@@ -4472,7 +4502,7 @@ const LessThanValue=-1;
while s[1]=' ' do while s[1]=' ' do
begin begin
delete(s,1,1); delete(s,1,1);
end; end;
if ((s[1]='-') or (s[1]='}')) and not bug then begin routePref[j][i].typ:=det;routePref[j][i].pos:=0;end if ((s[1]='-') or (s[1]='}')) and not bug then begin routePref[j][i].typ:=det;routePref[j][i].pos:=0;end
else else
begin begin
@@ -5884,6 +5914,16 @@ const LessThanValue=-1;
val(s,HautComptC,erreur); val(s,HautComptC,erreur);
end; end;
sa:=uppercase(ZoomSignaux_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
inc(nv);
delete(s,i,length(sa));
val(s,RedAffSig,erreur);
end;
sa:=uppercase(AffCompteur_ch)+'='; sa:=uppercase(AffCompteur_ch)+'=';
i:=pos(sa,s); i:=pos(sa,s);
if i=1 then if i=1 then
@@ -6069,8 +6109,8 @@ const LessThanValue=-1;
begin begin
inc(nv); inc(nv);
trouve_lay:=true; trouve_lay:=true;
delete(s,i,length(sa)); delete(sOrigine,i,length(sa));
lay:=s; lay:=sOrigine;
end; end;
sa:=uppercase(NomModuleCDM_ch)+'='; sa:=uppercase(NomModuleCDM_ch)+'=';
@@ -6396,6 +6436,7 @@ begin
Aiguillage[i].EtatTJD:=4; Aiguillage[i].EtatTJD:=4;
Aiguillage[i].vitesse:=0; Aiguillage[i].vitesse:=0;
end; end;
// initialisation des détecteurs
for i:=1 to NbMaxDet do for i:=1 to NbMaxDet do
begin begin
Detecteur[i].etat:=false; Detecteur[i].etat:=false;
@@ -6403,12 +6444,16 @@ begin
Detecteur[i].AdrTrain:=0; Detecteur[i].AdrTrain:=0;
Detecteur[i].tempo0:=0; Detecteur[i].tempo0:=0;
Detecteur[i].IndexTrainRoulant:=0; Detecteur[i].IndexTrainRoulant:=0;
Detecteur[i].AdrTrainRes:=0;
Detecteur[i].longueur:=0;
Detecteur[i].distArret:=0;
Detecteur[i].ModeArret:=0;
Adresse_detecteur[i]:=0;
Ancien_detecteur[i]:=false; Ancien_detecteur[i]:=false;
end; end;
GetDir(0,s);
Affiche('Lecture du fichier de configuration du répertoire',clYellow); Affiche('Lecture du fichier de configuration du répertoire',clYellow);
Affiche(s,clyellow); Affiche(repertoire_SC,clyellow);
try try
assignFile(fichier,NomConfig); assignFile(fichier,NomConfig);
@@ -7431,16 +7476,16 @@ begin
LabelValeur.caption:=''; LabelValeur.caption:='';
LabelVcms.Caption:=''; LabelVcms.Caption:='';
end; end;
end; end;
// index = index du train
procedure clicListeTrains(index : integer); procedure clicListeTrains(index : integer);
var s : string; var s : string;
i,t : integer; i,t : integer;
r : single; r : single;
begin begin
if affevt then Affiche('clicListeTrains '+intToSTR(index),clyellow); if affevt then Affiche('clicListeTrains '+intToSTR(index),clyellow);
if index<1 then exit; if index<0 then exit;
if Trains[index].nom_train='' then exit; if Trains[index].nom_train='' then exit;
clicListe:=true; clicListe:=true;
@@ -7456,9 +7501,6 @@ begin
end; end;
ButtonRdt.Caption:=s; ButtonRdt.Caption:=s;
ListBoxTrains.ItemIndex:=index-1;
ListBoxTrains.selected[index-1]:=true;
editNomTrain.text:=Trains[index].nom_train; editNomTrain.text:=Trains[index].nom_train;
LabelTitreTrain.Caption:=Trains[index].nom_train; LabelTitreTrain.Caption:=Trains[index].nom_train;
editAdresseTrain.Text:=intToSTR(trains[index].adresse); editAdresseTrain.Text:=intToSTR(trains[index].adresse);
@@ -7559,6 +7601,7 @@ begin
{$IF CompilerVersion >= 28.0} {$IF CompilerVersion >= 28.0}
// composants à repasser en style de base car on change la couleur de fond // composants à repasser en style de base car on change la couleur de fond
EditP1.StyleName:='Windows'; EditP1.StyleName:='Windows';
EditP2.StyleName:='Windows'; EditP2.StyleName:='Windows';
EditP3.StyleName:='Windows'; EditP3.StyleName:='Windows';
@@ -7584,6 +7627,10 @@ begin
end; end;
{$IFEND} {$IFEND}
MenuListesCopier2.Visible:=false; // coller liste dans la listbox des signaux est neutralisé, crée des problemes pour les structures de signaux
ComboBoxEchelle.hint:='L''échelle est utilisée pour le calcul des vitesses des trains'+#13+
'ainsi que pour les distances d''arrêt';
editAdrIPCDM.Hint:='Adresse IP du PC sur lequel CDM rail s''exécute'+#13+'ou 127.0.0.1 pour indiquer ce pc'; editAdrIPCDM.Hint:='Adresse IP du PC sur lequel CDM rail s''exécute'+#13+'ou 127.0.0.1 pour indiquer ce pc';
ValueListEditor.Visible:=true; ValueListEditor.Visible:=true;
ImageAffiche.stretch:=true; ImageAffiche.stretch:=true;
@@ -8760,6 +8807,7 @@ begin
if clicproprietesSig then clicListeSignal(IndexSignalClic); if clicproprietesSig then clicListeSignal(IndexSignalClic);
clicproprietesSig:=false; clicproprietesSig:=false;
if clicproprietesTrains then clicListeTrains(ligneclicTrain+1); if clicproprietesTrains then clicListeTrains(ligneclicTrain+1);
clicproprietesTrains:=false; clicproprietesTrains:=false;
@@ -9328,10 +9376,9 @@ begin
end; end;
// mise à jour des champs du signal d'après le tableau signaux // mise à jour des champs du signal d'après le tableau signaux
Procedure aff_champs_signaux(index : integer); Procedure aff_champs_signaux(index : integer);
var j,l,d,p,k,nc,decodeur : integer; var j,l,d,p,k,nc,decodeur,lIcone,hIcone : integer;
s : string; s : string;
begin begin
if Affevt then affiche('Aff_champs_sig_feux('+intToSTR(index)+')',clyellow); if Affevt then affiche('Aff_champs_sig_feux('+intToSTR(index)+')',clyellow);
@@ -9344,7 +9391,7 @@ begin
Picture.Bitmap.TransparentMode:=tmAuto; Picture.Bitmap.TransparentMode:=tmAuto;
Picture.Bitmap.TransparentColor:=clblue; Picture.Bitmap.TransparentColor:=clblue;
Transparent:=true; Transparent:=true;
picture.Bitmap:=Select_dessin_Signal(Signaux[index].aspect); picture.Bitmap:=Select_dessin_Signal(Signaux[index].aspect,lIcone,hIcone);
end; end;
if Signaux[index].contrevoie then inverse_image(formConfig.ImageSignal,Formprinc.ImageSignal20); if Signaux[index].contrevoie then inverse_image(formConfig.ImageSignal,Formprinc.ImageSignal20);
@@ -9434,26 +9481,26 @@ begin
// affiche ou non les checkbox en fonction de l'aspect // affiche ou non les checkbox en fonction de l'aspect
if (((d=2) or (d>=5)) and (d<10)) or (d=20) then if (((d=2) or (d>=5)) and (d<10)) or (d=20) then
begin begin
checkBoxFB.Visible:=true; checkBoxFB.Visible:=true; // ne pas afficher checkbox feu blanc
Label69.Visible:=true; Label69.Visible:=true;
MemoBlanc.Visible:=true; MemoBlanc.Visible:=true;
end end
else else
begin begin
checkBoxFB.Visible:=false; checkBoxFB.Visible:=false; // ne pas afficher checkbox feu blanc
Label69.Visible:=false; Label69.Visible:=false;
MemoBlanc.Visible:=false; MemoBlanc.Visible:=false;
end; end;
if d>2 then if d>2 then
begin begin
checkFVC.Visible:=true; checkFVC.Visible:=true; // afficher checkbox feu vert clignotant
checkFRC.Visible:=true; checkFRC.Visible:=true; // afficher checkbox feu rouge clignotant
end end
else else
begin begin
checkFVC.Visible:=false; checkFVC.Visible:=false; // ne pas afficher checkbox feu vert clignotant
checkFRC.Visible:=false; checkFRC.Visible:=false; // na pas afficher checkbox feu rouge clignotant
end; end;
if ((d>3) and (d<10)) or (d=20) then CheckVerrouCarre.Visible:=true else CheckVerrouCarre.Visible:=false; if ((d>3) and (d<10)) or (d=20) then CheckVerrouCarre.Visible:=true else CheckVerrouCarre.Visible:=false;
@@ -10112,6 +10159,7 @@ begin
formconfig.ListBoxAig.selected[ligneclicAig]:=true; formconfig.ListBoxAig.selected[ligneclicAig]:=true;
end; end;
// vitesse spécifique franchissement aiguillage en position déviée
procedure vitesse_spec; procedure vitesse_spec;
var s : string; var s : string;
AdrAig,erreur,index,v : integer; AdrAig,erreur,index,v : integer;
@@ -10167,6 +10215,7 @@ begin
formconfig.ListBoxAig.selected[ligneclicAig]:=true; formconfig.ListBoxAig.selected[ligneclicAig]:=true;
end; end;
// vérifie la cohérence entre le décodeur et la cible de signal (aspect)
function verif_dec_sig(aff : boolean) : boolean; function verif_dec_sig(aff : boolean) : boolean;
var Adr,i,dec,aspect,indexAspect : integer; var Adr,i,dec,aspect,indexAspect : integer;
begin begin
@@ -10660,7 +10709,7 @@ begin
end; end;
procedure TFormConfig.ComboBoxAspChange(Sender: TObject); procedure TFormConfig.ComboBoxAspChange(Sender: TObject);
var indexTCO,x,y,i,index,aspect,adresseFeu : integer; var indexTCO,x,y,i,index,aspect,adresseSig,lIcone,hIcone : integer;
s : string; s : string;
bm :tbitmap; bm :tbitmap;
begin begin
@@ -10680,7 +10729,7 @@ begin
11 : aspect:=20; 11 : aspect:=20;
else aspect:=i+6; else aspect:=i+6;
end; end;
index:=ligneClicSig+1; // index du feu index:=ligneClicSig+1; // index du signal
if index<1 then if index<1 then
begin begin
ComboBoxAsp.ItemIndex:=-1; ComboBoxAsp.ItemIndex:=-1;
@@ -10702,8 +10751,8 @@ begin
ListBoxSig.Selected[ligneClicSig]:=true; ListBoxSig.Selected[ligneClicSig]:=true;
// change l'image du feu dans la feuille graphique principale // change l'image du signal dans la feuille graphique principale
bm:=Select_dessin_Signal(Signaux[index].aspect); bm:=Select_dessin_Signal(Signaux[index].aspect,lIcone,hicone);
if bm=nil then exit; if bm=nil then exit;
Signaux[index].Img.picture.Bitmap:=bm; Signaux[index].Img.picture.Bitmap:=bm;
dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal
@@ -10718,8 +10767,8 @@ begin
begin begin
if TCO[indexTCO,x,y].BImage=Id_Signal then if TCO[indexTCO,x,y].BImage=Id_Signal then
begin begin
AdresseFeu:=Signaux[index].adresse; AdresseSig:=Signaux[index].adresse;
if tco[IndexTCO,x,y].Adresse=AdresseFeu then affiche_tco(indexTCO); if tco[IndexTCO,x,y].Adresse=AdresseSig then affiche_tco(indexTCO);
end; end;
end; end;
end; end;
@@ -10767,7 +10816,7 @@ begin
end; end;
procedure TFormConfig.ButtonrestaureClick(Sender: TObject); procedure TFormConfig.ButtonrestaureClick(Sender: TObject);
var index : integer; var index,lIcone,hIcone : integer;
begin begin
if (Signal_sauve.adresse<>0) and (ligneClicSig>=0) then if (Signal_sauve.adresse<>0) and (ligneClicSig>=0) then
begin begin
@@ -10778,9 +10827,9 @@ begin
ListBoxSig.selected[ligneClicSig]:=true; ListBoxSig.selected[ligneClicSig]:=true;
aff_champs_signaux(index); // réaffiche les champs aff_champs_signaux(index); // réaffiche les champs
Maj_Hint_Signal(index); Maj_Hint_Signal(index);
// change l'image du feu dans la feuille graphique principale // change l'image du signal dans la feuille graphique principale
Signaux[index].Img.picture.Bitmap:=Select_dessin_Signal(Signaux[index].aspect); Signaux[index].Img.picture.Bitmap:=Select_dessin_Signal(Signaux[index].aspect,lIcone,hIcone);
dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal dessine_signal_mx(Signaux[index].Img.Canvas,0,0,1,1,Signaux[index].adresse,1); // dessine les feux du signal, échelle 1
clicListe:=false; clicListe:=false;
end; end;
end; end;
@@ -10888,7 +10937,7 @@ begin
if affevt then affiche('Evt bouton nouveau acc',clyellow); if affevt then affiche('Evt bouton nouveau acc',clyellow);
if maxtablo_act>=Max_action then if maxtablo_act>=Max_action then
begin begin
Affiche('Nombre maximal d''actionneurs atteint',clred); Affiche('Nombre maximal d''actions atteint',clred);
exit; exit;
end; end;
clicliste:=true; clicliste:=true;
@@ -11157,7 +11206,7 @@ begin
end; end;
if ss='' then exit; if ss='' then exit;
s:='Voulez vous supprimer '; s:='Voulez vous supprimer';
if n=1 then s:=s+' l''action ' else s:=s+' les actions '; if n=1 then s:=s+' l''action ' else s:=s+' les actions ';
s:=s+ss+' ?'; s:=s+ss+' ?';
@@ -11171,6 +11220,7 @@ begin
repeat repeat
if formconfig.ListBoxActions.selected[i-1] then if formconfig.ListBoxActions.selected[i-1] then
begin begin
Affiche('Suppression action '+tablo_action[i].NomAction,clOrange);
for j:=i to maxTablo_act-1 do for j:=i to maxTablo_act-1 do
begin begin
formconfig.ListBoxActions.selected[j-1]:=formconfig.ListBoxActions.selected[j]; formconfig.ListBoxActions.selected[j-1]:=formconfig.ListBoxActions.selected[j];
@@ -11404,7 +11454,7 @@ begin
perform(WM_VSCROLL,SB_BOTTOM,0); perform(WM_VSCROLL,SB_BOTTOM,0);
end; end;
formCOnfig.LabelInfo.caption:=''; formConfig.LabelInfo.caption:='';
ligneClicSig:=i-1; ligneClicSig:=i-1;
AncligneClicSig:=ligneClicSig; AncligneClicSig:=ligneClicSig;
aff_champs_signaux(i); aff_champs_signaux(i);
@@ -11467,15 +11517,14 @@ begin
Signaux[i].Lbl.free; // supprime le label Signaux[i].Lbl.free; // supprime le label
Signaux[i].Lbl:=nil; Signaux[i].Lbl:=nil;
Tablo_Index_Signal[Signaux[i].adresse]:=0; Tablo_Index_Signal[Signaux[i].adresse]:=0;
if Signaux[i].checkFB<>nil then if Signaux[i].checkFB<>nil then Signaux[i].checkFB.Free; // supprime le check du feu blanc s'il existait
begin Signaux[i].CheckFB:=nil;
Signaux[i].checkFB.Free; Signaux[i].FeuBlanc:=false;
Signaux[i].CheckFB:=nil;
end; // supprime le check du feu blanc s'il existait
for j:=i to NbreSignaux-1 do for j:=i to NbreSignaux-1 do
begin begin
Signaux[j]:=Signaux[j+1]; Signaux[j]:=Signaux[j+1];
//Affiche('Signal '+intToSTR(j)+' affecté',clred);
tablo_index_signal[signaux[j].adresse]:=j; tablo_index_signal[signaux[j].adresse]:=j;
if Signaux[j].img=nil then affiche('erreur',clred) if Signaux[j].img=nil then affiche('erreur',clred)
else else
@@ -11504,7 +11553,20 @@ begin
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne)); Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
end; end;
end; end;
{
Affiche('Efface signal'+intToSTR(NbreSignaux),clred);
Signaux[NbreSignaux].Img.free; // supprime l'image, ce qui efface le signal du tableau graphique
Signaux[NbreSignaux].Img:=nil;
Signaux[NbreSignaux].Lbl.free; // supprime le label
Signaux[NbreSignaux].Lbl:=nil;
Tablo_Index_Signal[Signaux[NbreSignaux].adresse]:=0;
if Signaux[NbreSignaux].checkFB<>nil then Signaux[NbreSignaux].checkFB.Free; // supprime le check du feu blanc s'il existait
Signaux[NbreSignaux].CheckFB:=nil;
Signaux[NbreSignaux].FeuBlanc:=false;
}
dec(NbreSignaux); dec(NbreSignaux);
i:=0; i:=0;
end; end;
inc(i); inc(i);
@@ -12739,8 +12801,8 @@ begin
if not(oksignal) then if not(oksignal) then
begin begin
Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' '+decodeur[dec]+' occupe '+intToSTR(nc)+' adresses de '+intToSTR(adresse)+ Affiche('Erreur 14: le signal '+IntToSTR(adresse)+' '+decodeur[dec]+' occupe '+intToSTR(nc)+' adresses de '+intToSTR(adresse)+
' à '+intToSTR(adresse+nc-1)+' et chevauche le(s) détecteur(s) ',clred); ' à '+intToSTR(adresse+nc-1)+' et chevauche le(s) détecteur(s) suivant(s)',clred);
affiche(s,clred); Affiche(s,clred);
end; end;
end; end;
@@ -12989,7 +13051,7 @@ begin
end; end;
if ss='' then exit; if ss='' then exit;
s:='Voulez vous supprimer '; s:='Voulez vous supprimer';
if n=1 then s:=s+' l''aiguillage ' else s:=s+' les aiguillages '; if n=1 then s:=s+' l''aiguillage ' else s:=s+' les aiguillages ';
s:=s+ss+' ?'; s:=s+ss+' ?';
@@ -13556,11 +13618,20 @@ end;
procedure valide_branches; procedure valide_branches;
var s: string; var s: string;
ligne,esp : integer; ligne,esp,i : integer;
ok : boolean; ok : boolean;
begin begin
ligne:=1; ligne:=1;
ok:=true; ok:=true;
// vider les tableaux des détecteurs
for i:=1 to NbMaxDet do
begin
Adresse_detecteur[i]:=0;
detecteur[i].index:=0;
end;
NDetecteurs:=0;
repeat repeat
s:=AnsiUpperCase(formConfig.RichBranche.Lines[ligne-1]); s:=AnsiUpperCase(formConfig.RichBranche.Lines[ligne-1]);
if s<>'' then if s<>'' then
@@ -13609,6 +13680,7 @@ begin
modif_branches:=false; modif_branches:=false;
end end
else FormConfig.labelResult.Caption:='Erreur de syntaxe'; else FormConfig.labelResult.Caption:='Erreur de syntaxe';
trier_detecteurs;
end; end;
procedure TFormConfig.ButtonValLigneClick(Sender: TObject); procedure TFormConfig.ButtonValLigneClick(Sender: TObject);
@@ -13642,6 +13714,7 @@ begin
if j=0 then result:=0 else result:=j+1; if j=0 then result:=0 else result:=j+1;
end; end;
// compile une branche de réseau sous forme de texte, et la stocke dans le tableau des branches // compile une branche de réseau sous forme de texte, et la stocke dans le tableau des branches
// crée les index dans la structure détecteurs et des aiguillages // crée les index dans la structure détecteurs et des aiguillages
// i = index de la branche à stocker // i = index de la branche à stocker
@@ -13756,7 +13829,7 @@ begin
until ((bd=NDetecteurs+1) or trouve) or (bd>NbMaxDet) ; until ((bd=NDetecteurs+1) or trouve) or (bd>NbMaxDet) ;
if not(trouve) then if not(trouve) then
begin begin
Adresse_detecteur[bd]:=detect; Adresse_detecteur[bd]:=detect; // stocke le détecteur de la branche dans la liste des détecteurs
NDetecteurs:=bd; NDetecteurs:=bd;
end; end;
end; end;
@@ -14428,9 +14501,17 @@ begin
end; end;
l:=Trains[index].Icone.width; l:=Trains[index].Icone.width;
h:=Trains[index].Icone.Height; h:=Trains[index].Icone.Height;
if h=0 then if h=0 then // si pas d'icone de train dessiner un rectangle
begin begin
result:=0; result:=0;
l:=image_train[index].Width;
h:=image_train[index].Height;
with Iimage.Canvas do
begin
brush.Color:=coulfond;
pen.Color:=coulfond;
rectangle(0,0,l,h);
end;
exit; exit;
end; end;
rd:=l/h; rd:=l/h;
@@ -14473,12 +14554,6 @@ begin
ligneclicTrain:=ListBoxTrains.ItemIndex; ligneclicTrain:=ListBoxTrains.ItemIndex;
//Affiche(intToSTR(lc),clyellow);
if ligneclicTrain+1>ntrains then
begin
ligneclicTrain:=ntrains-1;
end;
if ligneclicTrain<0 then exit; if ligneclicTrain<0 then exit;
s:=ListBoxTrains.items[ligneclicTrain]; s:=ListBoxTrains.items[ligneclicTrain];
if s='' then exit; if s='' then exit;
@@ -14665,7 +14740,7 @@ begin
end; end;
if ss='' then exit; if ss='' then exit;
s:='Voulez vous supprimer '; s:='Voulez vous supprimer';
if n=1 then s:=s+' le train ' else s:=s+' les trains '; if n=1 then s:=s+' le train ' else s:=s+' les trains ';
s:=s+ss+' ?'; s:=s+ss+' ?';
@@ -15443,7 +15518,7 @@ begin
ListBoxSig.Items.Clear; ListBoxSig.Items.Clear;
for i:=1 to NbreSignaux do for i:=1 to NbreSignaux do
begin begin
s:=encode_signal(i); // encode la ligne depuis le tableau feux s:=encode_signal(i); // encode la ligne depuis le tableau signaux
if s<>'' then if s<>'' then
begin begin
ListBoxSig.Items.Add(s); ListBoxSig.Items.Add(s);
@@ -16610,7 +16685,7 @@ begin
end; end;
procedure TFormConfig.FormActivate(Sender: TObject); procedure TFormConfig.FormActivate(Sender: TObject);
var i : integer; var i : integer;
s : string; s : string;
begin begin
if affevt or (debug=1) then affiche('FormConfig activate',clLime); if affevt or (debug=1) then affiche('FormConfig activate',clLime);
@@ -16835,7 +16910,8 @@ begin
end; end;
procedure TFormConfig.ListBoxOperationsDrawItem(Control: TWinControl; procedure TFormConfig.ListBoxOperationsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);var Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
i,erreur: Integer; i,erreur: Integer;
ItemText: string; ItemText: string;
begin begin
@@ -16851,7 +16927,8 @@ begin
end; end;
procedure TFormConfig.ListBoxOperationsMouseDown(Sender: TObject; procedure TFormConfig.ListBoxOperationsMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ClicAction:=ListBoxOperations.ItemIndex; ClicAction:=ListBoxOperations.ItemIndex;
end; end;
@@ -16916,7 +16993,6 @@ end;
procedure TFormConfig.ListBoxOperationsDblClick(Sender: TObject); procedure TFormConfig.ListBoxOperationsDblClick(Sender: TObject);
var s : string; var s : string;
op,i : integer; op,i : integer;
begin begin
if (clicAction<0) or (ligneclicAct<0) or clicliste then exit; if (clicAction<0) or (ligneclicAct<0) or clicliste then exit;
Tablo_Action[ligneclicAct+1].tabloOp[clicaction+1].valide:=not(Tablo_Action[ligneclicAct+1].tabloOp[clicaction+1].valide); Tablo_Action[ligneclicAct+1].tabloOp[clicaction+1].valide:=not(Tablo_Action[ligneclicAct+1].tabloOp[clicaction+1].valide);
@@ -16935,7 +17011,10 @@ end;
procedure TFormConfig.SpeedButtonOuvreClick(Sender: TObject); procedure TFormConfig.SpeedButtonOuvreClick(Sender: TObject);
var s,repini :string; i : integer;begin if ligneclicTrain<0 then exit; var s,repini :string;
i : integer;
begin
if ligneclicTrain<0 then exit;
i:=ligneclicTrain+1; i:=ligneclicTrain+1;
s:=rep_icones; s:=rep_icones;
repIni:=GetCurrentDir; // si le repertoire icones n'existe pas, il passe au supérieur repIni:=GetCurrentDir; // si le repertoire icones n'existe pas, il passe au supérieur
@@ -16960,7 +17039,8 @@ var s,repini :string; i : integer;begin if ligneclicTrain<0 then exit;
end; end;
procedure TFormConfig.EditIconeChange(Sender: TObject); procedure TFormConfig.EditIconeChange(Sender: TObject);
var s,Nom,repIni : string;begin var s,Nom,repIni : string;
begin
if ligneclicTrain<0 then exit; if ligneclicTrain<0 then exit;
if clicliste then exit; if clicliste then exit;
repIni:=GetCurrentDir; repIni:=GetCurrentDir;
@@ -16977,7 +17057,8 @@ var s,Nom,repIni : string;begin
end; end;
procedure TFormConfig.LabeledEditTempoDChange(Sender: TObject); procedure TFormConfig.LabeledEditTempoDChange(Sender: TObject);
var erreur,i :integer;begin var erreur,i :integer;
begin
if clicliste then exit; if clicliste then exit;
if affevt then affiche('Evt change temps démarre train',clyellow); if affevt then affiche('Evt change temps démarre train',clyellow);
if (ligneclicTrain<0) or (ligneclicTrain>=ntrains) or (ntrains<1) then exit; if (ligneclicTrain<0) or (ligneclicTrain>=ntrains) or (ntrains<1) then exit;
@@ -16989,7 +17070,8 @@ var erreur,i :integer;begin
end; end;
procedure TFormConfig.CheckBoxSensClick(Sender: TObject); procedure TFormConfig.CheckBoxSensClick(Sender: TObject);
begin if clicliste then exit; begin
if clicliste then exit;
if affevt then affiche('Evt inverse train',clyellow); if affevt then affiche('Evt inverse train',clyellow);
if (ligneclicTrain<0) or (ligneclicTrain>=ntrains) or (ntrains<1) then exit; if (ligneclicTrain<0) or (ligneclicTrain>=ntrains) or (ntrains<1) then exit;
@@ -17000,7 +17082,8 @@ end;
procedure TFormConfig.ButtonImRCDMClick(Sender: TObject); procedure TFormConfig.ButtonImRCDMClick(Sender: TObject);
var nPeriph,ia,i,j,adr : integer; ctyp : string; var nPeriph,ia,i,j,adr : integer;
ctyp : string;
begin begin
if nSeg=0 then begin LabelInfo.caption:='Pas de structure réseau CDM trouvée';exit;end if nSeg=0 then begin LabelInfo.caption:='Pas de structure réseau CDM trouvée';exit;end
else LabelInfo.caption:=''; else LabelInfo.caption:='';
@@ -19979,6 +20062,43 @@ begin
end; end;
procedure TFormConfig.SpeedButtonLayClick(Sender: TObject);
var i : integer;
s : string;
begin
if ligneclicTrain<0 then exit;
i:=ligneclicTrain+1;
s:=rep_icones;
OpenDialogSon.InitialDir:='';
OpenDialogSon.DefaultExt:='bmp';
OpenDialogSon.Title:='Choix du fichier LAY de CDM';
OpenDialogSon.Filter:='Fichiers LAY (*.LAY)|*.lay|Tous fichiers (*.*)|*.*';
if openDialogSon.execute then
begin
s:=openDialogSon.filename;
EditLAY.Text:=ExtractFileName(s); // ne pas mettre le chemin pour l'ouverture du LAY avec CDM
end;
end;
procedure TFormConfig.MenuListesCopier2Click(Sender: TObject);
var tl: TListBox;
i : integer;
s : string;
begin
tl:=(Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TlistBox ;
//ClipBoard.SetTextBuf(tl.Items.GetText);
if not Clipboard.HasFormat(CF_TEXT) then Exit;
tl.Items.Text := Clipboard.AsText;
for i:=1 to tl.items.count do
begin
s:=tl.Items[i-1];
if not(decode_ligne_signal(s,i)) then // décode la chaine et stocke en tableau signal
Affiche('Erreur 59 : définition inccorecte du signal '+intToSTR(i),clred);
end;
end;
end. end.
+2 -2
View File
@@ -271,7 +271,7 @@ begin
//YclicCell[indexTCO]:=YclicC; //YclicCell[indexTCO]:=YclicC;
xc:=xClicC;yc:=yClicC; xc:=xClicC;yc:=yClicC;
origine_canton(xc,yc); origine_canton(indexTCO,xc,yc);
idCanton:=index_canton(indexTCO,xC,yC); idCanton:=index_canton(indexTCO,xC,yC);
@@ -671,7 +671,7 @@ begin
begin begin
FormConfCellTCO.LabelNumC.caption:='Elément de canton'; FormConfCellTCO.LabelNumC.caption:='Elément de canton';
x:=xClicC;y:=yClicC; x:=xClicC;y:=yClicC;
origine_canton(x,y); origine_canton(indexTCO,x,y);
i:=tco[indexTCO,x,y].NumCanton; i:=tco[indexTCO,x,y].NumCanton;
if i>0 then FormConfCellTCO.EditCanton.text:=intToSTR(i); if i>0 then FormConfCellTCO.EditCanton.text:=intToSTR(i);
end; end;
+2 -2
View File
@@ -384,9 +384,9 @@ object FormConfigTCO: TFormConfigTCO
Caption = '(10 maximum)' Caption = '(10 maximum)'
end end
object Label17: TLabel object Label17: TLabel
Left = 146 Left = 144
Top = 202 Top = 202
Width = 49 Width = 51
Height = 26 Height = 26
Alignment = taRightJustify Alignment = taRightJustify
Caption = 'Epaisseur des voies' Caption = 'Epaisseur des voies'
+2 -2
View File
@@ -1,6 +1,6 @@
unit UnitInfo; unit UnitInfo;
// afiche une info dans le TCO // affiche une info dans le TCO
interface interface
@@ -40,7 +40,7 @@ end;
procedure TFormInfo.FormActivate(Sender: TObject); procedure TFormInfo.FormActivate(Sender: TObject);
begin begin
TickInfo:=5; TickInfo:=5; // temps de fermeture de la fenetre pour le timer
end; end;
procedure TFormInfo.FormCreate(Sender: TObject); procedure TFormInfo.FormCreate(Sender: TObject);
+7 -4
View File
@@ -16,10 +16,13 @@ object FormMesure: TFormMesure
TextHeight = 13 TextHeight = 13
object Label1: TLabel object Label1: TLabel
Left = 56 Left = 56
Top = 16 Top = 0
Width = 272 Width = 289
Height = 13 Height = 29
Caption = 'S'#233'lection d'#39'un train plac'#233' sur le TCO pour son '#233'talonnage' Caption =
'S'#233'lection d'#39'un train plac'#233' sur le TCO pour son '#233'talonnage. Le pa' +
'rcours doit '#234'tre boucl'#233'.'
WordWrap = True
end end
object LabelEtat: TLabel object LabelEtat: TLabel
Left = 24 Left = 24
+13 -13
View File
@@ -1,6 +1,6 @@
unit UnitMesure; unit UnitMesure;
// mesure de la vitesse des trains // mesure de la vitesse des trains pour l'étalonnage
interface interface
@@ -112,19 +112,19 @@ begin
cv.brush.color:=clWindow; cv.brush.color:=clWindow;
cv.fillrect(rect); cv.fillrect(rect);
end; end;
// Affichage du texte // Affichage du texte
cv.font.style:=canvas.font.style+[fsbold]; cv.font.style:=canvas.font.style+[fsbold];
cv.textout(rect.left+largDest+5,rect.top,ComboBoxTrains.items[index]); cv.textout(rect.left+largDest+5,rect.top,ComboBoxTrains.items[index]);
if (odSelected in state) then if (odSelected in state) then
begin begin
cv.brush.color:=clWindowFrame; cv.brush.color:=clWindowFrame;
cv.fillrect(rect); cv.fillrect(rect);
//cv.font.color:=clblue; //cv.font.color:=clblue;
cv.textout(rect.left+largDest+5,rect.top,ComboBoxTrains.items[index]); cv.textout(rect.left+largDest+5,rect.top,ComboBoxTrains.items[index]);
end; end;
TransparentBlt(cv.Handle,rect.Left+2,rect.Top,largDest,hautDest, TransparentBlt(cv.Handle,rect.Left+2,rect.Top,largDest,hautDest,
Trains[index+1].Icone.canvas.Handle,0,0,l,h,clWhite); Trains[index+1].Icone.canvas.Handle,0,0,l,h,clWhite);
end; end;
procedure TFormMesure.ComboBoxTrainsChange(Sender: TObject); procedure TFormMesure.ComboBoxTrainsChange(Sender: TObject);
+1 -1
View File
@@ -49,7 +49,7 @@ begin
NewRule.Applicationname:=fichier; NewRule.Applicationname:=fichier;
NewRule.Protocol:=NET_FW_IP_PROTOCOL_TCP; NewRule.Protocol:=NET_FW_IP_PROTOCOL_TCP;
NewRule.LocalPorts :=''; // sans spécif=tous ports NewRule.LocalPorts:=''; // sans spécif=tous ports
//NewRule.LocalPorts := '9999'; // '80,443,4520-4533' //NewRule.LocalPorts := '9999'; // '80,443,4520-4533'
NewRule.Direction:=net_fw_rule_dir_in; NewRule.Direction:=net_fw_rule_dir_in;
NewRule.Enabled:=True; NewRule.Enabled:=True;
+10 -6
View File
@@ -132,7 +132,7 @@ var
EtatSignalPilote : word; EtatSignalPilote : word;
AdrPilote : integer; AdrPilote : integer;
tableLEB : array[1..41,1..19] of tableLEB : array[1..41,1..19] of
record record // pour le décodeur LEB :
offset, // offset en mode linéaire offset, // offset en mode linéaire
sortie, // numéro de sortie en mode linéaire sortie, // numéro de sortie en mode linéaire
code // code de pilotage en mode binaire code // code de pilotage en mode binaire
@@ -153,13 +153,11 @@ begin
i:=Index_Signal(AdrPilote); // adresse du signal d'origine i:=Index_Signal(AdrPilote); // adresse du signal d'origine
if i<>0 then if i<>0 then
//ImagePilote.Picture.Bitmap:=FormPilote.ImagePilote.picture.bitmap;
EtatSignalPilote:=Signaux[0].EtatSignal; EtatSignalPilote:=Signaux[0].EtatSignal;
AncienEtat:=Signaux[0].ancienEtat; AncienEtat:=Signaux[0].ancienEtat;
Vcanvas:=FormPilote.ImagePilote.picture.bitmap.Canvas; Vcanvas:=FormPilote.ImagePilote.picture.bitmap.Canvas;
case Signaux[i].aspect of case Signaux[i].aspect of
// feux de signalisation
2 : dessine_signal2(Vcanvas,0,0,1,1,EtatSignalPilote,1,i); 2 : dessine_signal2(Vcanvas,0,0,1,1,EtatSignalPilote,1,i);
3 : dessine_signal3(Vcanvas,0,0,1,1,EtatSignalPilote,1,i); 3 : dessine_signal3(Vcanvas,0,0,1,1,EtatSignalPilote,1,i);
4 : dessine_signal4(VCanvas,0,0,1,1,EtatSignalPilote,1,i); 4 : dessine_signal4(VCanvas,0,0,1,1,EtatSignalPilote,1,i);
@@ -426,7 +424,8 @@ if ord(Key) = VK_RETURN then
end; end;
procedure TFormPilote.FormActivate(Sender: TObject); procedure TFormPilote.FormActivate(Sender: TObject);
var n,i,d : integer; var n,i,d,l,h : integer;
b : tBitmap;
begin begin
if fermeSC then exit; if fermeSC then exit;
// mise à jour du champ décodeur // mise à jour du champ décodeur
@@ -497,12 +496,16 @@ begin
Picture.Bitmap.TransparentMode:=tmAuto; Picture.Bitmap.TransparentMode:=tmAuto;
Picture.Bitmap.TransparentColor:=clblue; Picture.Bitmap.TransparentColor:=clblue;
Transparent:=true; Transparent:=true;
Picture.BitMap:=Signaux[i].Img.Picture.Bitmap; picture.Bitmap.canvas.Brush.Color:=clBtnFace;
//left:=groupBox1.width+50; picture.Bitmap.Canvas.Rectangle(0,0,width,height);
b:=Select_dessin_Signal(n,l,h);
Picture.BitMap:=b;
end; end;
LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(AdrPilote); LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(AdrPilote);
Signaux[0].EtatSignal:=Signaux[i].EtatSignal; Signaux[0].EtatSignal:=Signaux[i].EtatSignal;
dessine_signal_pilote;
if isDirectionnel(i) then if isDirectionnel(i) then
begin begin
@@ -578,6 +581,7 @@ end;
// initialisation de l'unité // initialisation de l'unité
begin begin
// tableau de pilotage du décodeur LEB
// les offsets sont incrémentés tous les 2, on alterne les sorties entre droit et dévié ; // les offsets sont incrémentés tous les 2, on alterne les sorties entre droit et dévié ;
// offset et sortie sont pour le mode linéaire ; code est pour le mode binaire // offset et sortie sont pour le mode linéaire ; code est pour le mode binaire
// cible 1 vert rouge // cible 1 vert rouge
+417 -46
View File
@@ -1,11 +1,11 @@
object FormPrinc: TFormPrinc object FormPrinc: TFormPrinc
Left = 134 Left = 104
Top = 277 Top = 192
Anchors = [akLeft, akTop, akRight] Anchors = [akLeft, akTop, akRight]
BorderStyle = bsNone BorderStyle = bsNone
Caption = 'Signaux complexes' Caption = 'Signaux complexes'
ClientHeight = 513 ClientHeight = 513
ClientWidth = 847 ClientWidth = 1019
Color = clBtnFace Color = clBtnFace
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText Font.Color = clWindowText
@@ -22,7 +22,7 @@ object FormPrinc: TFormPrinc
OnKeyDown = FormKeyDown OnKeyDown = FormKeyDown
OnResize = FormResize OnResize = FormResize
DesignSize = ( DesignSize = (
847 1019
513) 513)
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
@@ -40,8 +40,8 @@ object FormPrinc: TFormPrinc
ParentFont = False ParentFont = False
end end
object Image9feux: TImage object Image9feux: TImage
Left = 1072 Left = 848
Top = 32 Top = 16
Width = 57 Width = 57
Height = 105 Height = 105
Picture.Data = { Picture.Data = {
@@ -230,8 +230,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image7feux: TImage object Image7feux: TImage
Left = 440 Left = 72
Top = 8 Top = 32
Width = 57 Width = 57
Height = 105 Height = 105
Picture.Data = { Picture.Data = {
@@ -398,7 +398,7 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image5feux: TImage object Image5feux: TImage
Left = 696 Left = 416
Top = 0 Top = 0
Width = 41 Width = 41
Height = 89 Height = 89
@@ -498,8 +498,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image4feux: TImage object Image4feux: TImage
Left = 664 Left = 384
Top = 8 Top = 0
Width = 41 Width = 41
Height = 97 Height = 97
Picture.Data = { Picture.Data = {
@@ -590,7 +590,7 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image3feux: TImage object Image3feux: TImage
Left = 200 Left = 256
Top = 8 Top = 8
Width = 33 Width = 33
Height = 57 Height = 57
@@ -671,10 +671,10 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image2feux: TImage object Image2feux: TImage
Left = 1072 Left = 288
Top = 144 Top = 16
Width = 33 Width = 25
Height = 57 Height = 41
Picture.Data = { Picture.Data = {
07544269746D617026080000424D260800000000000036040000280000001A00 07544269746D617026080000424D260800000000000036040000280000001A00
0000240000000100080000000000F0030000C40E0000C40E0000000100000001 0000240000000100080000000000F0030000C40E0000C40E0000000100000001
@@ -745,8 +745,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image2Dir: TImage object Image2Dir: TImage
Left = 624 Left = 296
Top = 8 Top = 0
Width = 41 Width = 41
Height = 25 Height = 25
Picture.Data = { Picture.Data = {
@@ -820,8 +820,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image3Dir: TImage object Image3Dir: TImage
Left = 808 Left = 104
Top = 32 Top = 24
Width = 49 Width = 49
Height = 25 Height = 25
Picture.Data = { Picture.Data = {
@@ -898,8 +898,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image4Dir: TImage object Image4Dir: TImage
Left = 744 Left = 24
Top = 32 Top = 24
Width = 57 Width = 57
Height = 25 Height = 25
Picture.Data = { Picture.Data = {
@@ -986,8 +986,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image5Dir: TImage object Image5Dir: TImage
Left = 856 Left = 160
Top = 32 Top = 24
Width = 65 Width = 65
Height = 25 Height = 25
Picture.Data = { Picture.Data = {
@@ -1084,8 +1084,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Image6Dir: TImage object Image6Dir: TImage
Left = 920 Left = 744
Top = 32 Top = 8
Width = 81 Width = 81
Height = 25 Height = 25
Picture.Data = { Picture.Data = {
@@ -1192,8 +1192,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object ImageSignal20: TImage object ImageSignal20: TImage
Left = 1048 Left = 984
Top = 424 Top = 64
Width = 57 Width = 57
Height = 105 Height = 105
Picture.Data = { Picture.Data = {
@@ -1431,7 +1431,7 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object LabelClock: TLabel object LabelClock: TLabel
Left = 755 Left = 927
Top = 0 Top = 0
Width = 85 Width = 85
Height = 22 Height = 22
@@ -5040,8 +5040,8 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object ImageTachro: TImage object ImageTachro: TImage
Left = 976 Left = 904
Top = 112 Top = 24
Width = 106 Width = 106
Height = 37 Height = 37
Picture.Data = { Picture.Data = {
@@ -5421,7 +5421,7 @@ object FormPrinc: TFormPrinc
Visible = False Visible = False
end end
object Label1: TLabel object Label1: TLabel
Left = 545 Left = 717
Top = 4 Top = 4
Width = 89 Width = 89
Height = 13 Height = 13
@@ -5429,7 +5429,7 @@ object FormPrinc: TFormPrinc
Caption = 'Nombre de trains : ' Caption = 'Nombre de trains : '
end end
object LabelNbTrains: TLabel object LabelNbTrains: TLabel
Left = 641 Left = 813
Top = 2 Top = 2
Width = 9 Width = 9
Height = 19 Height = 19
@@ -5442,10 +5442,356 @@ object FormPrinc: TFormPrinc
Font.Style = [fsBold] Font.Style = [fsBold]
ParentFont = False ParentFont = False
end end
object Image3feux2x: TImage
Left = 552
Top = 0
Width = 52
Height = 88
Picture.Data = {
07544269746D617016160000424D161600000000000036040000280000003400
0000580000000100080000000000E0110000C40E0000C40E0000000100000001
000000000000000080000080000000808000800000008000800080800000C0C0
C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020
E00000400000004020000040400000406000004080000040A0000040C0000040
E00000600000006020000060400000606000006080000060A0000060C0000060
E00000800000008020000080400000806000008080000080A0000080C0000080
E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0
E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0
E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0
E00040000000400020004000400040006000400080004000A0004000C0004000
E00040200000402020004020400040206000402080004020A0004020C0004020
E00040400000404020004040400040406000404080004040A0004040C0004040
E00040600000406020004060400040606000406080004060A0004060C0004060
E00040800000408020004080400040806000408080004080A0004080C0004080
E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0
E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0
E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0
E00080000000800020008000400080006000800080008000A0008000C0008000
E00080200000802020008020400080206000802080008020A0008020C0008020
E00080400000804020008040400080406000804080008040A0008040C0008040
E00080600000806020008060400080606000806080008060A0008060C0008060
E00080800000808020008080400080806000808080008080A0008080C0008080
E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0
E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0
E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0
E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000
E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020
E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040
E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060
E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080
E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0
E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0
A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC000000000000000000000000
00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFC00000000000000000000000000000000FCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000000000000000
00000000000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFC0000000000000000000000000000000000000000
00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000
000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000FFFFFFFFFFFF
FFFFFFFFFFFF00000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFC0000000000000000FFFFFFFF000000000000000000000000FFFFFFFF0000
000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000000000000000FFFF
FFFF000000000000000000000000FFFFFFFF0000000000000000FCFCFCFCFCFC
FCFCFCFCFCFCFCFC000000000000FFFFFFFF0000000000000000000000000000
000000000000FFFFFFFF000000000000FCFCFCFCFCFCFCFCFCFCFCFC00000000
0000FFFFFFFF0000000000000000000000000000000000000000FFFFFFFF0000
00000000FCFCFCFCFCFCFCFCFCFC000000000000FFFF00000000000000000000
000000000000000000000000000000000000FFFF000000000000FCFCFCFCFCFC
FCFC000000000000FFFF00000000000000000000000000000000000000000000
000000000000FFFF000000000000FCFCFCFCFCFC000000000000FFFF00000000
00000000000000000000000000000000000000000000000000000000FFFF0000
00000000FCFCFCFC000000000000FFFF00000000000000000000000000000000
00000000000000000000000000000000FFFF000000000000FCFCFCFC00000000
FFFF000000000000000000000000000052525252525252520000000000000000
000000000000FFFF00000000FCFCFCFC00000000FFFF00000000000000000000
0000000052525252525252520000000000000000000000000000FFFF00000000
FCFC000000000000FFFF00000000000000000000000052525252525252525252
5252000000000000000000000000FFFF000000000000000000000000FFFF0000
0000000000000000000052525252525252525252525200000000000000000000
0000FFFF00000000000000000000FFFF00000000000000000000000052525252
525252525252525252525252000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000052525252525252525252525252525252
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000052525252525252525252525252525252000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000005252525252525252
5252525252525252000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000005252525252525252525252525252525200000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
52525252525252525252525252525252000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000525252525252525252525252
52525252000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000525252525252525252525252525252520000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000005252
525252525252525252520000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000005252525252525252525252520000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000000000525252525252525200000000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000000052525252
5252525200000000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
00000000000000000000000000000000000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000000000
000000000000000000000000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000000000000000000000000000000000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000000000525252525252525200000000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000000052525252
5252525200000000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000000000525252525252525252525252000000000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
00005252525252525252525252520000000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000525252525252525252525252
52525252000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000525252525252525252525252525252520000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000052525252
525252525252525252525252000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000052525252525252525252525252525252
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000052525252525252525252525252525252000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000005252525252525252
5252525252525252000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000005252525252525252525252525252525200000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
52525252525252525252525252525252000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000000052525252525252525252
52520000000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000000052525252525252525252525200000000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000000000
525252525252525200000000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000000000525252525252525200000000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000000000000000000000000000000000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
00000000000000000000000000000000000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000000000
525252525252525200000000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000000000525252525252525200000000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000005252525252525252525252520000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000525252525252
5252525252520000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000005252525252525252525252525252525200000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
52525252525252525252525252525252000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000525252525252525252525252
52525252000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000525252525252525252525252525252520000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000052525252
525252525252525252525252000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000052525252525252525252525252525252
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000052525252525252525252525252525252000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000005252525252525252
5252525252525252000000000000000000000000FFFF00000000000000000000
FFFF000000000000000000000000525252525252525252525252000000000000
000000000000FFFF000000000000000000000000FFFF00000000000000000000
0000525252525252525252525252000000000000000000000000FFFF00000000
0000FCFC00000000FFFF00000000000000000000000000005252525252525252
0000000000000000000000000000FFFF00000000FCFCFCFC00000000FFFF0000
0000000000000000000000005252525252525252000000000000000000000000
0000FFFF00000000FCFCFCFC000000000000F6F6000000000000000000000000
0000000000000000000000000000000000000000FFFF000000000000FCFCFCFC
000000000000F6F6000000000000000000000000000000000000000000000000
0000000000000000FFFF000000000000FCFCFCFCFCFC000000000000FFFF0000
0000000000000000000000000000000000000000000000000000FFFF00000000
0000FCFCFCFCFCFCFCFC000000000000FFFF0000000000000000000000000000
0000000000000000000000000000FFFF000000000000FCFCFCFCFCFCFCFCFCFC
000000000000FFFFFFFF0000000000000000000000000000000000000000FFFF
FFFF000000000000FCFCFCFCFCFCFCFCFCFCFCFC000000000000FFFFFFFF0000
000000000000000000000000000000000000FFFFFFFF000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFC0000000000000000FFFFFFFF00000000000000000000
0000FFFFFFFF0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000
000000000000FFFFFFFF000000000000000000000000FFFFFFFF000000000000
0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000FFFF
FFFFFFFFFFFFFFFFFFFF00000000000000000000FCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFC00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000
0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
000000000000000000000000000000000000000000000000FCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC000000000000000000000000
000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
00000000000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFC}
Visible = False
end
object Image2feux2x: TImage
Left = 608
Top = 0
Width = 52
Height = 72
Picture.Data = {
07544269746D6170D6120000424DD61200000000000036040000280000003400
0000480000000100080000000000A00E0000C40E0000C40E0000000100000001
000000000000000080000080000000808000800000008000800080800000C0C0
C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020
E00000400000004020000040400000406000004080000040A0000040C0000040
E00000600000006020000060400000606000006080000060A0000060C0000060
E00000800000008020000080400000806000008080000080A0000080C0000080
E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0
E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0
E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0
E00040000000400020004000400040006000400080004000A0004000C0004000
E00040200000402020004020400040206000402080004020A0004020C0004020
E00040400000404020004040400040406000404080004040A0004040C0004040
E00040600000406020004060400040606000406080004060A0004060C0004060
E00040800000408020004080400040806000408080004080A0004080C0004080
E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0
E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0
E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0
E00080000000800020008000400080006000800080008000A0008000C0008000
E00080200000802020008020400080206000802080008020A0008020C0008020
E00080400000804020008040400080406000804080008040A0008040C0008040
E00080600000806020008060400080606000806080008060A0008060C0008060
E00080800000808020008080400080806000808080008080A0008080C0008080
E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0
E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0
E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0
E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000
E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020
E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040
E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060
E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080
E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0
E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0
A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC000000000000000000000000
00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFC00000000000000000000000000000000FCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000000000000000
00000000000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFC0000000000000000000000000000000000000000
00000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000
000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000FFFFFFFFFFFF
FFFFFFFFFFFF00000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFC0000000000000000FFFFFFFF000000000000000000000000FFFFFFFF0000
000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000000000000000FFFF
FFFF000000000000000000000000FFFFFFFF0000000000000000FCFCFCFCFCFC
FCFCFCFCFCFCFCFC000000000000FFFFFFFF0000000000000000000000000000
000000000000FFFFFFFF000000000000FCFCFCFCFCFCFCFCFCFCFCFC00000000
0000FFFFFFFF0000000000000000000000000000000000000000FFFFFFFF0000
00000000FCFCFCFCFCFCFCFCFCFC000000000000FFFF00000000000000000000
000000000000000000000000000000000000FFFF000000000000FCFCFCFCFCFC
FCFC000000000000FFFF00000000000000000000000000000000000000000000
000000000000FFFF000000000000FCFCFCFCFCFC000000000000FFFF00000000
00000000000000000000000000000000000000000000000000000000FFFF0000
00000000FCFCFCFC000000000000FFFF00000000000000000000000000000000
00000000000000000000000000000000FFFF000000000000FCFCFCFC00000000
FFFF000000000000000000000000000052525252525252520000000000000000
000000000000FFFF00000000FCFCFCFC00000000FFFF00000000000000000000
0000000052525252525252520000000000000000000000000000FFFF00000000
FCFC000000000000FFFF00000000000000000000000052525252525252525252
5252000000000000000000000000FFFF000000000000000000000000FFFF0000
0000000000000000000052525252525252525252525200000000000000000000
0000FFFF00000000000000000000FFFF00000000000000000000000052525252
525252525252525252525252000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000052525252525252525252525252525252
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000052525252525252525252525252525252000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000005252525252525252
5252525252525252000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000005252525252525252525252525252525200000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
52525252525252525252525252525252000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000525252525252525252525252
52525252000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000525252525252525252525252525252520000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000005252
525252525252525252520000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000005252525252525252525252520000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000000000525252525252525200000000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000000052525252
5252525200000000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
00000000000000000000000000000000000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000000000
000000000000000000000000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000000000000000000000000000000000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000000000000000000000000000000000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
00000000000000000000000000000000000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000000000000
525252525252525200000000000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000000000000525252525252525200000000
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000000005252525252525252525252520000000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000000000525252525252
5252525252520000000000000000000000000000FFFF0000000000000000FFFF
0000000000000000000000005252525252525252525252525252525200000000
0000000000000000FFFF0000000000000000FFFF000000000000000000000000
52525252525252525252525252525252000000000000000000000000FFFF0000
000000000000FFFF000000000000000000000000525252525252525252525252
52525252000000000000000000000000FFFF0000000000000000FFFF00000000
0000000000000000525252525252525252525252525252520000000000000000
00000000FFFF0000000000000000FFFF00000000000000000000000052525252
525252525252525252525252000000000000000000000000FFFF000000000000
0000FFFF00000000000000000000000052525252525252525252525252525252
000000000000000000000000FFFF0000000000000000FFFF0000000000000000
0000000052525252525252525252525252525252000000000000000000000000
FFFF0000000000000000FFFF0000000000000000000000005252525252525252
5252525252525252000000000000000000000000FFFF00000000000000000000
FFFF000000000000000000000000525252525252525252525252000000000000
000000000000FFFF000000000000000000000000FFFF00000000000000000000
0000525252525252525252525252000000000000000000000000FFFF00000000
0000FCFC00000000FFFF00000000000000000000000000005252525252525252
0000000000000000000000000000FFFF00000000FCFCFCFC00000000FFFF0000
0000000000000000000000005252525252525252000000000000000000000000
0000FFFF00000000FCFCFCFC000000000000FFFF000000000000000000000000
0000000000000000000000000000000000000000FFFF000000000000FCFCFCFC
000000000000FFFF000000000000000000000000000000000000000000000000
0000000000000000FFFF000000000000FCFCFCFCFCFC000000000000FFFF0000
0000000000000000000000000000000000000000000000000000FFFF00000000
0000FCFCFCFCFCFCFCFC000000000000FFFF0000000000000000000000000000
0000000000000000000000000000FFFF000000000000FCFCFCFCFCFCFCFCFCFC
000000000000FFFFFFFF0000000000000000000000000000000000000000FFFF
FFFF000000000000FCFCFCFCFCFCFCFCFCFCFCFC000000000000FFFFFFFF0000
000000000000000000000000000000000000FFFFFFFF000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFC0000000000000000FFFFFFFF00000000000000000000
0000FFFFFFFF0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC0000
000000000000FFFFFFFF000000000000000000000000FFFFFFFF000000000000
0000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000FFFF
FFFFFFFFFFFFF6F6FFFF00000000000000000000FCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFC00000000000000000000FFFFFFFFFFFFFFFFF6F6FFFF0000
0000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
000000000000000000000000000000000000000000000000FCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC000000000000000000000000
000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFC00000000000000000000000000000000FCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
00000000000000000000000000000000FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFC}
Visible = False
end
object StatusBar1: TStatusBar object StatusBar1: TStatusBar
Left = 0 Left = 0
Top = 491 Top = 491
Width = 847 Width = 1019
Height = 22 Height = 22
Panels = < Panels = <
item item
@@ -5896,8 +6242,8 @@ object FormPrinc: TFormPrinc
end end
end end
object GroupBoxCV: TGroupBox object GroupBoxCV: TGroupBox
Left = 617 Left = 577
Top = 128 Top = 144
Width = 265 Width = 265
Height = 81 Height = 81
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
@@ -5964,7 +6310,7 @@ object FormPrinc: TFormPrinc
Top = 200 Top = 200
Width = 393 Width = 393
Height = 265 Height = 265
ActivePage = TabSheetComp ActivePage = TabSheetSig
Anchors = [] Anchors = []
TabOrder = 5 TabOrder = 5
OnChange = PageControlChange OnChange = PageControlChange
@@ -5987,6 +6333,24 @@ object FormPrinc: TFormPrinc
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
end end
object TrackBarSig: TTrackBar
Left = 352
Top = 0
Width = 37
Height = 217
Hint = 'Zoom signaux'
Anchors = [akTop, akRight, akBottom]
Orientation = trVertical
ParentShowHint = False
Frequency = 20
Position = 10
ShowHint = True
TabOrder = 1
ThumbLength = 15
TickMarks = tmTopLeft
TickStyle = tsManual
OnChange = TrackBarSigChange
end
end end
object TabSheetTrains: TTabSheet object TabSheetTrains: TTabSheet
Caption = 'Trains' Caption = 'Trains'
@@ -6060,7 +6424,7 @@ object FormPrinc: TFormPrinc
Top = 8 Top = 8
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Left = 536 Left = 464
object Afficher1: TMenuItem object Afficher1: TMenuItem
Caption = 'Afficher' Caption = 'Afficher'
object Affichagenormal1: TMenuItem object Affichagenormal1: TMenuItem
@@ -6461,15 +6825,16 @@ object FormPrinc: TFormPrinc
end end
end end
object OpenDialog: TOpenDialog object OpenDialog: TOpenDialog
Left = 584 Left = 616
Top = 16 Top = 32
end end
object SaveDialog: TSaveDialog object SaveDialog: TSaveDialog
Left = 744 Left = 464
Top = 32
end end
object PopupMenuFenRich: TPopupMenu object PopupMenuFenRich: TPopupMenu
Left = 192 Left = 528
Top = 8 Top = 32
object outslectionner1: TMenuItem object outslectionner1: TMenuItem
Caption = 'Tout s'#233'lectionner' Caption = 'Tout s'#233'lectionner'
OnClick = Toutslectionner1Click OnClick = Toutslectionner1Click
@@ -6488,7 +6853,7 @@ object FormPrinc: TFormPrinc
end end
object PopupMenuSignal: TPopupMenu object PopupMenuSignal: TPopupMenu
OnPopup = PopupMenuSignalPopup OnPopup = PopupMenuSignalPopup
Left = 504 Left = 496
Top = 32 Top = 32
object Proprits1: TMenuItem object Proprits1: TMenuItem
Caption = 'Propri'#233't'#233's du signal' Caption = 'Propri'#233't'#233's du signal'
@@ -6501,7 +6866,7 @@ object FormPrinc: TFormPrinc
end end
object PopupMenuTrains: TPopupMenu object PopupMenuTrains: TPopupMenu
OnPopup = PopupMenuTrainsPopup OnPopup = PopupMenuTrainsPopup
Left = 480 Left = 528
object Propritsdutrain1: TMenuItem object Propritsdutrain1: TMenuItem
Caption = 'Propri'#233't'#233's du train' Caption = 'Propri'#233't'#233's du train'
OnClick = Propritsdutrain1Click OnClick = Propritsdutrain1Click
@@ -6516,7 +6881,7 @@ object FormPrinc: TFormPrinc
end end
object PopupMenuCompteurs: TPopupMenu object PopupMenuCompteurs: TPopupMenu
OnPopup = PopupMenuCompteursPopup OnPopup = PopupMenuCompteursPopup
Left = 512 Left = 496
object Propritsdescompteurs1: TMenuItem object Propritsdescompteurs1: TMenuItem
Caption = 'Propri'#233't'#233's des compteurs' Caption = 'Propri'#233't'#233's des compteurs'
OnClick = Propritsdescompteurs1Click OnClick = Propritsdescompteurs1Click
@@ -6526,4 +6891,10 @@ object FormPrinc: TFormPrinc
OnClick = Dtacherlecompteur1Click OnClick = Dtacherlecompteur1Click
end end
end end
object Timer2: TTimer
Interval = 50
OnTimer = Timer2Timer
Left = 688
Top = 16
end
end end
+394 -210
View File
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -97,7 +97,6 @@ implementation
// renvoie l'adresse du signal du train sur détecteur // renvoie l'adresse du signal du train sur détecteur
function Adresse_signal_det_train(detect,IndexTrain : integer) : integer; function Adresse_signal_det_train(detect,IndexTrain : integer) : integer;
var voie1,voie2,indexSig1,IndexSig2,AdrSig1,AdrSig2,IndexSig,AdrSig : integer; var voie1,voie2,indexSig1,IndexSig2,AdrSig1,AdrSig2,IndexSig,AdrSig : integer;
s : string;
begin begin
if detect=0 then if detect=0 then
begin begin
@@ -160,9 +159,8 @@ end;
// démarre un train si le signal n'est pas au rouge // démarre un train si le signal n'est pas au rouge
// appelé par gestion des horaires dans le timer ou bouton rouler 1 train ou rouler tous les trains // appelé par gestion des horaires dans le timer ou bouton rouler 1 train ou rouler tous les trains
function demarre_index_train(indexTrain : integer) : boolean; function demarre_index_train(indexTrain : integer) : boolean;
var i,n,det1,el2,vitesse,AdrTrain,idcanton,voie1,voie2,indexSig1,indexSig2,AdrSig1,AdrSig2,AdrSig, var i,vitesse,AdrTrain,idcanton,
detect,indexSig,etsign : integer; detect,indexSig,etsign : integer;
tel2 : tequipement;
trouve : boolean; trouve : boolean;
Train,s : string; Train,s : string;
+25 -28
View File
@@ -718,7 +718,7 @@ procedure Affiche_temps_arret(IdTrain,tps : integer);
procedure titre_fenetre(indexTCO : integer); procedure titre_fenetre(indexTCO : integer);
function IsVoieDroite(i : integer) : boolean; function IsVoieDroite(i : integer) : boolean;
function trouve_canton(el1 : integer;tel1 : tequipement;el2 : integer;tel2 : tequipement) : integer; function trouve_canton(el1 : integer;tel1 : tequipement;el2 : integer;tel2 : tequipement) : integer;
procedure origine_canton(var x,y : integer); procedure origine_canton(idt : integer;var x,y : integer);
procedure Supprimer_TCO(TcoS : integer); procedure Supprimer_TCO(TcoS : integer);
procedure toggle_bandeau(indexTCO : integer); procedure toggle_bandeau(indexTCO : integer);
function sens_train_canton(AdrTrain,Idcanton : integer) : integer; function sens_train_canton(AdrTrain,Idcanton : integer) : integer;
@@ -828,8 +828,6 @@ begin
else result:=0; else result:=0;
end; end;
// renvoie l'index de canton encadré par les 2 éléments el1 et el2 // renvoie l'index de canton encadré par les 2 éléments el1 et el2
// il faudrait faire par détecteur. // il faudrait faire par détecteur.
// ex (526,det,513,det)= 1 // ex (526,det,513,det)= 1
@@ -10277,7 +10275,8 @@ begin
s:=canton[i].nom; s:=canton[i].nom;
if s<>'' then if s<>'' then
begin begin
font.Size:=round(RedFonte*((Larg*10) div 30)+1); //((LargCell*5) div 29); font.Size:=round(RedFonte*((Larg*10) div 30)+1); //((LargCell*5) div 29);
Brush.Color:=coul; Brush.Color:=coul;
dy:=TextWidth(s) div 2; dy:=TextWidth(s) div 2;
dx:=TextHeight(s) div 2; dx:=TextHeight(s) div 2;
@@ -10336,11 +10335,12 @@ begin
s:=canton[i].NomTrain; s:=canton[i].NomTrain;
l:=TextWidth(s); l:=TextWidth(s);
Brush.Color:=coul; Brush.Color:=coul;
if l<dy-yt then //if l<dy-yt then
if yt+l<yf then
{$IF CompilerVersion >= 28.0} {$IF CompilerVersion >= 28.0}
begin begin
font.orientation:=900; font.orientation:=-900;
Textout(xi,yi,s); Textout(xt,yt,s);
end; end;
{$ELSE} {$ELSE}
AffTexteIncliBordeTexture(PCanvasTCO[indexTCO],xt,yt, AffTexteIncliBordeTexture(PCanvasTCO[indexTCO],xt,yt,
@@ -10454,6 +10454,7 @@ end;
procedure dessin_canton(indexTCO : integer;Canvas : Tcanvas;x,y,mode : integer); overload; procedure dessin_canton(indexTCO : integer;Canvas : Tcanvas;x,y,mode : integer); overload;
begin begin
if PcanvasTCO[indexTCO]=nil then exit; if PcanvasTCO[indexTCO]=nil then exit;
origine_canton(indexTCO,x,y); // revenir au point d'origine du canton
if isCantonV(indexTCO,x,y) then if isCantonV(indexTCO,x,y) then
begin begin
dessin_cantonV(indexTCO,Canvas,x,y,mode); dessin_cantonV(indexTCO,Canvas,x,y,mode);
@@ -11363,10 +11364,11 @@ begin
end; end;
end; end;
procedure origine_canton(var x,y : integer); // renvoie les coordonnées X Y d'origine du canton de la cellule x,y du TCO idt du canton
procedure origine_canton(idt : integer;var x,y : integer);
var Bimage : integer; var Bimage : integer;
begin begin
Bimage:=tco[indexTCOCourant,x,y].BImage; Bimage:=tco[idt,x,y].BImage;
if isCantonH(Bimage) then if isCantonH(Bimage) then
begin begin
x:=x-(Bimage-Id_cantonH); // revenir à la coordonnée X du début du canton x:=x-(Bimage-Id_cantonH); // revenir à la coordonnée X du début du canton
@@ -11419,8 +11421,7 @@ begin
// affiche d'abord l'icone de la cellule et colore la voie si zone ou détecteur actionnée selon valeur mode // affiche d'abord l'icone de la cellule et colore la voie si zone ou détecteur actionnée selon valeur mode
dessine_icone(indexTCO,PCanvasTCO[indexTCO],Bimage,X,Y,mode); dessine_icone(indexTCO,PCanvasTCO[indexTCO],Bimage,X,Y,mode);
// dessin du train sur le canton // dessin du train sur le canton
if (Bimage=Id_CantonH) or (Bimage=Id_CantonV) then dessin_canton(indexTCO,PCanvasTCO[indexTCO],x,y,0); if (Bimage=Id_CantonH) or (Bimage=Id_CantonV) then dessin_canton(indexTCO,PCanvasTCO[indexTCO],x,y,0);
if LargCell>24 then if LargCell>24 then
begin begin
@@ -12275,7 +12276,7 @@ end;
// sinon mode = couleur du train // sinon mode = couleur du train
procedure affiche_trajet(indexTCO,train,AdrTrain,ir,mode : integer); procedure affiche_trajet(indexTCO,train,AdrTrain,ir,mode : integer);
var i,sx,sy,x,y,ax,ay,Bimage,adresse,IdCanton,IdTrain,AncTrain,elPrec, var i,sx,sy,x,y,ax,ay,Bimage,adresse,IdCanton,IdTrain,AncTrain,elPrec,
DernierDet,sens : integer; DernierDet : integer;
TypePrec: tEquipement; TypePrec: tEquipement;
cant : boolean; cant : boolean;
begin begin
@@ -14616,7 +14617,7 @@ begin
if isCantonH(tco[indexTCO,colonne,y].BImage) then if isCantonH(tco[indexTCO,colonne,y].BImage) then
begin begin
yc:=y;xc:=colonne; yc:=y;xc:=colonne;
origine_canton(xc,yc); origine_canton(indexTCO,xc,yc);
n:=tco[indexTCO,xc,yc].NumCanton; n:=tco[indexTCO,xc,yc].NumCanton;
if n<>0 then if n<>0 then
begin begin
@@ -14714,7 +14715,7 @@ begin
if isCantonV(tco[indexTCO,x,ligne].BImage) then if isCantonV(tco[indexTCO,x,ligne].BImage) then
begin begin
xc:=x;yc:=ligne; xc:=x;yc:=ligne;
origine_canton(xc,yc); origine_canton(indexTCO,xc,yc);
n:=tco[indexTCO,xc,yc].NumCanton; n:=tco[indexTCO,xc,yc].NumCanton;
if n<>0 then if n<>0 then
begin begin
@@ -14845,7 +14846,7 @@ begin
begin begin
//Affiche('xy='+IntToSTR(x)+','+intToSTR(y)+' Bimage='+intToSTR(Bimage),clYellow); //Affiche('xy='+IntToSTR(x)+','+intToSTR(y)+' Bimage='+intToSTR(Bimage),clYellow);
Xcanton:=x;Ycanton:=y; Xcanton:=x;Ycanton:=y;
origine_canton(Xcanton,Ycanton); origine_canton(indexTCO,Xcanton,Ycanton);
if xcanton=0 then // cas d'un canton supprimé if xcanton=0 then // cas d'un canton supprimé
begin begin
// reconstituer le canton // reconstituer le canton
@@ -15504,7 +15505,7 @@ end;
procedure end_Drag(icone,x,y : integer;Sender, Target: TObject); procedure end_Drag(icone,x,y : integer;Sender, Target: TObject);
var s : string; var s : string;
indexTCO,i,xclic,Yclic,bim,nc,maxi,libre : integer; indexTCO,i,xclic,Yclic,bim : integer;
begin begin
if not(Target is TImage) then exit; if not(Target is TImage) then exit;
s:=(Target as TImage).Name; s:=(Target as TImage).Name;
@@ -18030,17 +18031,16 @@ begin
AdrPilote:=adresse; AdrPilote:=adresse;
i:=Index_Signal(adresse); i:=Index_Signal(adresse);
if i=0 then begin doubleclic:=false;exit;end; if i=0 then begin doubleclic:=false;exit;end;
Signaux[0].EtatSignal:=Signaux[i].EtatSignal;
with formPilote do with formPilote do
begin begin
show;
ImagePilote.Parent:=FormPilote; ImagePilote.Parent:=FormPilote;
ImagePilote.Picture.Bitmap.TransparentMode:=tmAuto; ImagePilote.Picture.Bitmap.TransparentMode:=tmAuto;
ImagePilote.Picture.Bitmap.TransparentColor:=clblue; ImagePilote.Picture.Bitmap.TransparentColor:=clblue;
ImagePilote.Transparent:=true; ImagePilote.Transparent:=true;
ImagePilote.Picture.BitMap:=Signaux[i].Img.Picture.Bitmap;
LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(Adresse); LabelTitrePilote.Caption:='Pilotage du signal '+intToSTR(Adresse);
Signaux[0].EtatSignal:=Signaux[i].EtatSignal;
LabelNbFeux.Visible:=False; LabelNbFeux.Visible:=False;
EditNbreFeux.Visible:=false; EditNbreFeux.Visible:=false;
@@ -18064,6 +18064,7 @@ begin
GroupBox1.Visible:=true; GroupBox1.Visible:=true;
if (Signaux[i].aspect<20) then GroupBox2.Visible:=true else GroupBox2.Visible:=false; if (Signaux[i].aspect<20) then GroupBox2.Visible:=true else GroupBox2.Visible:=false;
end; end;
show;
end; end;
end; end;
//clicsouris:=false; //clicsouris:=false;
@@ -18308,7 +18309,7 @@ begin
begin begin
FontDialog1.Font.Name:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].Fonte; FontDialog1.Font.Name:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].Fonte;
FontDialog1.Font.Color:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].CoulFonte; FontDialog1.Font.Color:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].CoulFonte;
FontDialog1.Font.Size:=round(RedFonte*tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].taillefonte); FontDialog1.Font.Size:=round(tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].taillefonte);
fs:=[]; fs:=[];
s:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].FontStyle; s:=tco[indextco,XclicCell[indexTCO],YclicCell[indexTCO]].FontStyle;
@@ -18659,7 +18660,7 @@ begin
if isCantonV(tco[indexTCO,x,ligne_supprime].BImage) then if isCantonV(tco[indexTCO,x,ligne_supprime].BImage) then
begin begin
xc:=x;yc:=ligne_Supprime; xc:=x;yc:=ligne_Supprime;
origine_canton(xc,yc); origine_canton(indexTCO,xc,yc);
n:=tco[indexTCO,xc,yc].NumCanton; n:=tco[indexTCO,xc,yc].NumCanton;
if n<>0 then if n<>0 then
begin begin
@@ -18780,7 +18781,7 @@ begin
if isCantonH(tco[indexTCO,colonne_supprime,y].BImage) then if isCantonH(tco[indexTCO,colonne_supprime,y].BImage) then
begin begin
yc:=y;xc:=colonne_Supprime; yc:=y;xc:=colonne_Supprime;
origine_canton(xc,yc); origine_canton(indexTCO,xc,yc);
n:=tco[indexTCO,xc,yc].NumCanton; n:=tco[indexTCO,xc,yc].NumCanton;
if n<>0 then if n<>0 then
begin begin
@@ -19654,7 +19655,7 @@ begin
y:=YClicCell[indexTCOCourant]; y:=YClicCell[indexTCOCourant];
if isCanton(TCO[indexTcoCourant,x,y].BImage) then if isCanton(TCO[indexTcoCourant,x,y].BImage) then
begin begin
origine_canton(x,y); origine_canton(indexTCOcourant,x,y);
if (x<>0) and (y<>0) then if (x<>0) and (y<>0) then
begin begin
idc:=Index_Canton_numero(tco[indexTCOcourant,x,y].NumCanton); //index canton idc:=Index_Canton_numero(tco[indexTCOcourant,x,y].NumCanton); //index canton
@@ -19666,10 +19667,6 @@ begin
end; end;
procedure TFormTCO.Optiondesroutes1Click(Sender: TObject); procedure TFormTCO.Optiondesroutes1Click(Sender: TObject);
var GMode,l2,h2 : integer;
XFormScale,XFormRot,XFormOld,XFormXLat,xform : TXForm;
angle,Zoom : single;
recta : trect;
begin begin
formRoute.Show; formRoute.Show;
{ angle:=5; { angle:=5;
@@ -19810,7 +19807,7 @@ begin
Affiche('Suppression du TCO '+intToSTR(Tcos),clOrange); Affiche('Suppression du TCO '+intToSTR(Tcos),clOrange);
// supprimer les cantons // supprimer les cantons du TCO avant de supprimer le TCO
for y:=1 to NbreCellY[tcos] do for y:=1 to NbreCellY[tcos] do
for x:=1 to NbreCellX[tcos] do for x:=1 to NbreCellX[tcos] do
begin begin
+5 -4
View File
@@ -15,7 +15,7 @@
// The Original Code is Vcl.Styles.Ext.pas. // The Original Code is Vcl.Styles.Ext.pas.
// //
// The Initial Developer of the Original Code is Rodrigo Ruz V. // The Initial Developer of the Original Code is Rodrigo Ruz V.
// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2025 Rodrigo Ruz V.
// All Rights Reserved. // All Rights Reserved.
// //
// ************************************************************************************************** // **************************************************************************************************
@@ -97,11 +97,12 @@ type
end; end;
{$REGION 'Documentation'} {$REGION 'Documentation'}
/// <summary>Helper class for the TStyleManager /// <summary>
/// Helper class for the TStyleManager
/// Vcl.Themes.TStyleManagerHelper in RAD Studio 11 prevents activate this class helper.
/// </summary> /// </summary>
{$ENDREGION} {$ENDREGION}
TStyleManagerHelper = class Helper for TStyleManager
TStyleManagerHelper = Class Helper for TStyleManager
strict private strict private
class function GetStyleSourceInfo(const StyleName: string): TSourceInfo; static; class function GetStyleSourceInfo(const StyleName: string): TSourceInfo; static;
class function GetStyles: TList<TCustomStyleServices>; class function GetStyles: TList<TCustomStyleServices>;
+1 -1
View File
@@ -15,7 +15,7 @@
// The Original Code is Vcl.Styles.Utils.Graphics.pas. // The Original Code is Vcl.Styles.Utils.Graphics.pas.
// //
// The Initial Developer of the Original Code is Rodrigo Ruz V. // The Initial Developer of the Original Code is Rodrigo Ruz V.
// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2025 Rodrigo Ruz V.
// All Rights Reserved. // All Rights Reserved.
// //
// ************************************************************************************************** // **************************************************************************************************
+1 -1
View File
@@ -14,7 +14,7 @@
// //
// The Original Code is Vcl.Styles.Utils.Misc.pas. // The Original Code is Vcl.Styles.Utils.Misc.pas.
// //
// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2025 Rodrigo Ruz V.
// All Rights Reserved. // All Rights Reserved.
// //
// ************************************************************************************************** // **************************************************************************************************
-1902
View File
File diff suppressed because it is too large Load Diff
+8 -2
View File
@@ -590,6 +590,7 @@ begin
if IdCantonSelect=0 then IdCantonSelect:=AncienIdCantonSelect; if IdCantonSelect=0 then IdCantonSelect:=AncienIdCantonSelect;
if affevt then Affiche('FormSelTrain.StringGridTrainsSelectCell col='+intToSTR(ACol)+' lig='+intToSTR(ARow),clYellow); if affevt then Affiche('FormSelTrain.StringGridTrainsSelectCell col='+intToSTR(ACol)+' lig='+intToSTR(ARow),clYellow);
if (Arow>nTrains) or (IdCantonSelect<1) then exit; if (Arow>nTrains) or (IdCantonSelect<1) then exit;
faire:=false; faire:=false;
//------------change la sélection du train //------------change la sélection du train
if (Arow>=1) and (ACol<=5) then if (Arow>=1) and (ACol<=5) then
@@ -607,7 +608,9 @@ begin
idAutrecanton:=index_canton_numero(autreCanton); idAutrecanton:=index_canton_numero(autreCanton);
if (IdAutrecanton<>0) and (IdAutreCanton<>IdCantonSelect) then if (IdAutrecanton<>0) and (IdAutreCanton<>IdCantonSelect) then
begin begin
LabelInfo.caption:='Le train '+intToSTR(IndexTrainClic)+' '+trains[IndexTrainClic].nom_train+' est affecté au canton '+intToSTR(AutreCanton); s:='Le train '+intToSTR(IndexTrainClic)+' '+trains[IndexTrainClic].nom_train+' est affecté au canton '+intToSTR(AutreCanton);
LabelInfo.caption:=s;
StringGridTrains.hint:='Affectation impossible,'+#13+s;
exit; exit;
end; end;
@@ -622,6 +625,7 @@ begin
supprime_route_train(indextrainclic); supprime_route_train(indextrainclic);
StringGridTrains.cells[7,ARow]:=''; StringGridTrains.cells[7,ARow]:='';
end; end;
if faire then if faire then
@@ -657,7 +661,9 @@ begin
if (canton[IdCantonSelect].sensCirc<>0) then sensLoco:=canton[IdCantonSelect].sensCirc ; if (canton[IdCantonSelect].sensCirc<>0) then sensLoco:=canton[IdCantonSelect].sensCirc ;
affecte_Train_canton(trains[indexTrainClic].adresse,IdCantonSelect,sensLoco); // le train affecté contient la route du train razé affecte_Train_canton(trains[indexTrainClic].adresse,IdCantonSelect,sensLoco); // le train affecté contient la route du train razé
LabelInfo.caption:='Affectation du train '+intToSTR(IndexTrainClic)+' '+trains[indexTrainClic].nom_train+' au canton '+intToSTR(canton[idcantonSelect].numero); s:='Affectation du train '+intToSTR(IndexTrainClic)+' '+trains[indexTrainClic].nom_train+' au canton '+intToSTR(canton[idcantonSelect].numero);
LabelInfo.caption:=s;
StringGridTrains.hint:=s;
maj_signaux(false); maj_signaux(false);
end; end;
end; end;
+2 -2
View File
@@ -26,7 +26,7 @@ var
f : textFile; f : textFile;
Const Const
VersionSC = '10.8'; // sert à la comparaison de la version publiée VersionSC = '10.82'; // sert à la comparaison de la version publiée
SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace
// pour unzip // pour unzip
SHCONTCH_NOPROGRESSBOX=4; SHCONTCH_NOPROGRESSBOX=4;
@@ -559,7 +559,7 @@ begin
formprinc.FenRich.SelStart:=length(formprinc.FenRich.Text); formprinc.FenRich.SelStart:=length(formprinc.FenRich.Text);
formprinc.FenRich.SelAttributes.Style:=[fsUnderline]; formprinc.FenRich.SelAttributes.Style:=[fsUnderline];
Affiche('https://github.com/f1iwq2/Signaux_complexes_GL/releases',clAqua); Affiche('https://github.com/f1iwq2/Signaux_complexes_GL/releases',clAqua);
Affiche('ne comprend aucune version diffusée.',clOrange); Affiche('ne comprend actuellement aucune version diffusée.',clOrange);
end; end;
end end
else else
+5 -1
View File
@@ -360,7 +360,11 @@ version 10.78 : Correction affichage aiguillages dans l'
version 10.79 : Prise en compte du facteur réduction affichage windows pour les compteurs. version 10.79 : Prise en compte du facteur réduction affichage windows pour les compteurs.
version 10.8 : Amélioration de la création des compteurs de vitesse en mode CDM rail version 10.8 : Amélioration de la création des compteurs de vitesse en mode CDM rail
et de l'affectation des trains dans les cantons. et de l'affectation des trains dans les cantons.
Corrections diverses. version 10.81 : Prise en compte des nouveaux champs d'exportation de CDM pour l'importation du réseau.
version 10.82 : Ajout d'une barre de zoom pour la fenetre des signaux.
Ajout commande fonctions F trains pour la télécommande par serveur
Corrections diverses