V8.8
V8.8
This commit is contained in:
499
UnitConfig.pas
499
UnitConfig.pas
@@ -228,10 +228,8 @@ type
|
||||
EditVitRalenti: TEdit;
|
||||
Label57: TLabel;
|
||||
EditVitNom: TEdit;
|
||||
LabelInfVitesse: TLabel;
|
||||
CheckRoulage: TCheckBox;
|
||||
CheckBoxVerifXpressNet: TCheckBox;
|
||||
ImageTrain: TImage;
|
||||
PopupMenuRichedit: TPopupMenu;
|
||||
Copier1: TMenuItem;
|
||||
Coller1: TMenuItem;
|
||||
@@ -316,7 +314,6 @@ type
|
||||
ButtonPropage: TButton;
|
||||
ButtonPFCDM: TButton;
|
||||
TabAvance: TTabSheet;
|
||||
Label31: TLabel;
|
||||
Label39: TLabel;
|
||||
CheckBoxMsgAigInc: TCheckBox;
|
||||
TabSheet1: TTabSheet;
|
||||
@@ -332,6 +329,12 @@ type
|
||||
ButtonTestAction: TButton;
|
||||
PopupMenuActions: TPopupMenu;
|
||||
ModifAction: TMenuItem;
|
||||
Label16: TLabel;
|
||||
ImageTrain: TImage;
|
||||
EditIcone: TEdit;
|
||||
SpeedButtonOuvre: TSpeedButton;
|
||||
LabeledEditTempoD: TLabeledEdit;
|
||||
CheckBoxSens: TCheckBox;
|
||||
procedure ButtonAppliquerEtFermerClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure ListBoxAigMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
@@ -500,6 +503,10 @@ type
|
||||
procedure EditP1Exit(Sender: TObject);
|
||||
|
||||
procedure EditP2Exit(Sender: TObject);
|
||||
|
||||
procedure EditDevieS2Change(Sender: TObject);
|
||||
|
||||
procedure ButtonCouleurClick(Sender: TObject);
|
||||
|
||||
procedure ColorDialogFondShow(Sender: TObject);
|
||||
|
||||
@@ -526,6 +533,7 @@ couleur_fond_ch='coul_fond';
|
||||
|
||||
procedure ModifActionClick(Sender: TObject);
|
||||
|
||||
procedure ListBoxActionsKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
|
||||
procedure ListBoxOperationsDblClick(Sender: TObject);
|
||||
@@ -614,6 +622,8 @@ section_DecPers_ch='[section_decodeurs]';
|
||||
Style_ch='Style';
|
||||
Nba_ch='NombreAdresses';
|
||||
nation_ch='Nation';
|
||||
Periph_ch='Periph';
|
||||
comm_ch='Commande';
|
||||
nom_dec_pers_ch='Nom_dec_pers';
|
||||
Nom_fich_TCO_ch='Nom_fichier_TCO';
|
||||
LargeurF_ch='LargeurF'; // largeur de la fenêtre principale
|
||||
@@ -624,7 +634,8 @@ var
|
||||
HauteurFC_ch='HauteurFC';
|
||||
OffsetXFC_ch='OffsetXC'; // .Left de la fenêtre clock
|
||||
OffsetYFC_ch='OffsetYC';
|
||||
horlogeInterne_ch='HorlogeInterne';
|
||||
|
||||
PosSplitter_ch='Splitter';
|
||||
horlogeInterne_ch='HorlogeInterne';
|
||||
LanceHorl_ch='LanceHorl';
|
||||
AffHorl_ch='AffHorl';
|
||||
@@ -647,7 +658,7 @@ var
|
||||
section_trains_ch='[section_trains]';
|
||||
section_placement_ch='[section_placement]';
|
||||
section_DecPers_ch='[section_decodeurs]';
|
||||
section_horloge_ch='[section horloge]';
|
||||
section_accCOM_ch='[section_accCOMUSB]';
|
||||
section_horloge_ch='[section horloge]';
|
||||
|
||||
rep_icones='icones';
|
||||
@@ -655,7 +666,7 @@ var
|
||||
var
|
||||
FormConfig: TFormConfig;
|
||||
AdresseIPCDM,AdresseIP,PortCom,recuCDM,residuCDM,RepConfig : string; //,trainsauve : string;
|
||||
ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig,EnvAigDccpp,AdrBaseDetDccpp,
|
||||
|
||||
portCDM,TempoOctet,TimoutMaxInterface,Valeur_entete,PortInterface,prot_serie,NumPort,debug,
|
||||
LigneCliqueePN,AncLigneCliqueePN,clicMemo,Nb_cantons_Sig,protocole,Port,PortServeur,
|
||||
ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig,EnvAigDccpp,AdrBaseDetDccpp,
|
||||
@@ -689,6 +700,7 @@ function encode_actions(i : integer) : string;
|
||||
EditMaxSignalSens,EditnCantonsRes,EditAntiTO,EditRep,EditTempoTC : Tedit;
|
||||
|
||||
EditT : Array[1..10] of Tedit;
|
||||
TextBoxCde : array[1..19] of Tedit;
|
||||
|
||||
LabelPortCde,LbPnVoie1,LbAPnVoie1,LbAPnVoie2,LbAPnVoie3,LbAPnVoie4,LbAPnVoie5,LbATitre,
|
||||
LbZTitre,LbZPnVoie1,LbZPnVoie2,LbZPnVoie3,LbZPnVoie4,LbZPnVoie5,LabelMP,LabelNumeroP,
|
||||
@@ -1611,6 +1623,25 @@ begin
|
||||
Signaux[i].SR[l].sortie1:=j;
|
||||
end;
|
||||
j:=pos('NA',s);
|
||||
if j<>1 then affiche('Manque paramètre NA dans ligne '+chaine_signal,clred)
|
||||
else
|
||||
begin
|
||||
delete(s,1,2);
|
||||
val(s,j,erreur);
|
||||
if (j<0) or (j>5) then
|
||||
begin
|
||||
j:=5;affiche('Paramètre NA incorrect dans ligne '+chaine_signal,clred)
|
||||
end;
|
||||
Signaux[i].na:=j;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// transforme l'action en chaine
|
||||
function encode_actions(i : integer) : string;
|
||||
var s : string;
|
||||
decl,action,Nb,j: integer;
|
||||
begin
|
||||
@@ -1749,10 +1780,13 @@ end;
|
||||
begin
|
||||
s:=s+'('+intToSTR(tablo_PN[i].Voie[voie].ActFerme)+','+intToSTR(tablo_PN[i].Voie[voie].ActOuvre)+')';
|
||||
if voie<NbVoies then s:=s+',';
|
||||
end;
|
||||
end
|
||||
begin
|
||||
|
||||
else
|
||||
for voie:=1 to NbVoies do
|
||||
// par zones de détecteur
|
||||
begin
|
||||
s:='';
|
||||
for voie:=1 to NbVoies do
|
||||
begin
|
||||
s:=s+'('+intToSTR(tablo_PN[i].Voie[voie].detZ1F)+'-'+intToSTR(tablo_PN[i].Voie[voie].detZ2F)+','+intToSTR(tablo_PN[i].Voie[voie].detZ1O)+
|
||||
@@ -1797,6 +1831,7 @@ begin
|
||||
// modifie le fichier de config en fonction du paramétrage
|
||||
procedure genere_config;
|
||||
var s: string;
|
||||
fichierN : text;
|
||||
i,j,n,k : integer;
|
||||
begin
|
||||
assignFile(fichierN,NomConfig);
|
||||
@@ -2075,11 +2110,14 @@ begin
|
||||
s:=encode_act_pn(i);
|
||||
if s<>'' then if s<>'' then writeln(fichierN,s);
|
||||
end;
|
||||
writeln(fichierN,section_actV2_ch);
|
||||
writeln(fichierN,'0');
|
||||
|
||||
begin
|
||||
s:=encode_actions(i);
|
||||
if s<>'' then writeln(fichierN,s);
|
||||
writeln(fichierN,'/------------');
|
||||
// actionnneurs V2
|
||||
writeln(fichierN,section_actV2_ch);
|
||||
for i:=1 to maxTablo_act do
|
||||
begin
|
||||
s:=encode_actions(i);
|
||||
if s<>'' then writeln(fichierN,s);
|
||||
end;
|
||||
writeln(fichierN,'0');
|
||||
@@ -2234,9 +2272,18 @@ begin
|
||||
begin
|
||||
temp:=Signaux[i];
|
||||
Signaux[i]:=Signaux[j];
|
||||
Signaux[j]:=temp;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// calcule les index
|
||||
for i:=1 to NbreSignaux do
|
||||
begin
|
||||
tablo_index_signal[Signaux[i].adresse]:=i;
|
||||
end;
|
||||
|
||||
for i:=1 to NbreSignaux do
|
||||
if formconfig<>nil then
|
||||
begin
|
||||
formconfig.ListBoxSig.Clear;
|
||||
longestLength:=0;
|
||||
@@ -2244,11 +2291,14 @@ var s,sa,SOrigine: string;
|
||||
begin
|
||||
s:=encode_signal(i); // encode la ligne depuis le tableau feux
|
||||
//Affiche(s,clwhite);
|
||||
if s<>'' then
|
||||
begin
|
||||
for i:=1 to NbreSignaux do
|
||||
begin
|
||||
formconfig.ListBoxSig.Items.Add(s);
|
||||
// trouver la chaine la plus longue pour la future scrollbar
|
||||
l:=Length(s);
|
||||
if l>LongestLength then
|
||||
begin
|
||||
LongestString:=s;
|
||||
LongestLength:=l;
|
||||
end;
|
||||
Signaux[i].modifie:=false;
|
||||
@@ -2302,6 +2352,7 @@ var s,sa,SOrigine: string;
|
||||
repeat
|
||||
l1:=pos('"',s);l2:=posEx('"',s,l1+1);
|
||||
esp:=posEx(' ',s,Esp+1);
|
||||
if (esp<>0) and (esp<l1) and (esp>l2) then delete(s,esp,1);
|
||||
until esp=0;
|
||||
lit_ligne:=s;
|
||||
if debug=1 then affiche(s,clLime);
|
||||
@@ -2466,6 +2517,11 @@ var s,sa,SOrigine: string;
|
||||
s:='';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
until s='0';
|
||||
end;
|
||||
|
||||
// anciens
|
||||
procedure compile_actionneurs;
|
||||
var i : integer;
|
||||
begin
|
||||
@@ -2753,7 +2809,7 @@ var s,sa,SOrigine: string;
|
||||
Tablo_PN[NbrePN].AdresseOuvre:=j;
|
||||
Delete(s,1,erreur);
|
||||
val(s,j,erreur);
|
||||
// commande usb
|
||||
Tablo_PN[NbrePN].CommandeOuvre:=j;
|
||||
end
|
||||
else
|
||||
begin
|
||||
@@ -2767,7 +2823,13 @@ var s,sa,SOrigine: string;
|
||||
|
||||
end;
|
||||
j:=pos(')',s);
|
||||
Delete(s,1,j); // supprime séparateurs
|
||||
if length(s)>0 then
|
||||
begin
|
||||
// champ impulsion nouvelle syntaxe
|
||||
if s[1]=',' then delete(s,1,1);
|
||||
val(s,i,erreur);
|
||||
Tablo_PN[NbrePN].Pulse:=i;
|
||||
if erreur<>0 then
|
||||
begin
|
||||
delete(s,1,erreur);
|
||||
@@ -2786,7 +2848,7 @@ var s,sa,SOrigine: string;
|
||||
|
||||
// nouveaux
|
||||
procedure compile_actions;
|
||||
// nouveaux
|
||||
var n,k,l,c : integer;
|
||||
begin
|
||||
maxTablo_act:=1;
|
||||
Nligne:=1;
|
||||
@@ -2803,7 +2865,7 @@ var s,sa,SOrigine: string;
|
||||
Tablo_actionneur[maxtablo_act].traite:=false;
|
||||
Tablo_actionneur[maxtablo_act].NomAction:=sa;
|
||||
// initialiser la condition toujours vrai par défaut
|
||||
Delete(s,1,i);
|
||||
Tablo_Actionneur[maxtablo_act].NbCond:=1;
|
||||
Setlength(Tablo_actionneur[maxtablo_act].TabloCond,2);
|
||||
Tablo_actionneur[maxtablo_act].TabloCond[1].numcondition:=CondVrai;
|
||||
|
||||
@@ -2819,6 +2881,100 @@ var s,sa,SOrigine: string;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].heure:=i;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].minute:=i;
|
||||
end;
|
||||
DeclPeriph :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].NumPeriph:=i;
|
||||
i:=pos(',',s); if i=0 then i:=length(s)+1;
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].ordrePeriph:=sa;
|
||||
end;
|
||||
DeclAccessoire :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].etat:=i;
|
||||
end;
|
||||
DeclDetAct :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].etat:=i;
|
||||
i:=pos(',',s);if i=0 then i:=length(s)+1;
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].trainDecl:=sa;
|
||||
end;
|
||||
DeclZoneDet :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].adresse2:=i;
|
||||
Val(s,i,erreur);Delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].etat:=i;
|
||||
i:=pos(',',s);
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].trainDecl:=sa;
|
||||
end;
|
||||
DeclDemarTrain :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur); // seuil de vitesse
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
i:=pos(',',s);if i=0 then i:=length(s)+1;
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].trainDecl:=sa;
|
||||
end;
|
||||
DeclArretTrain :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur); // seuil de vitesse
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
i:=pos(',',s);if i=0 then i:=length(s)+1;
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].trainDecl:=sa;
|
||||
end;
|
||||
DeclSignal :
|
||||
begin
|
||||
Val(s,i,erreur);Delete(s,1,erreur); // adresse
|
||||
Tablo_actionneur[maxtablo_act].adresse:=i;
|
||||
i:=pos(',',s);
|
||||
Val(s,i,erreur);Delete(s,1,erreur); // seuil de vitesse
|
||||
if (i<0) or (i>1) then i:=0;
|
||||
Tablo_actionneur[maxtablo_act].Etat:=i;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
// conditions
|
||||
if s[1]='B' then
|
||||
begin
|
||||
delete(s,1,1);
|
||||
// nombre de conditions
|
||||
Val(s,n,erreur);
|
||||
Tablo_actionneur[maxtablo_act].NbCond:=n;
|
||||
Delete(s,1,erreur);
|
||||
setlength(Tablo_actionneur[maxtablo_act].TabloCond,n+1);
|
||||
for k:=1 to n do
|
||||
begin
|
||||
delete(s,1,1);
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
// numéro de l'opération
|
||||
if (j<0) or (j>NbreConditions) then
|
||||
begin
|
||||
Affiche('Condition '+intToSTR(maxtablo_act)+' dans opération n°'+intToSTR(k)+' : cond inconnue :'+intToSTR(j),clred);
|
||||
end;
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].numCondition:=j;
|
||||
case j of
|
||||
condVitTrain:
|
||||
begin
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].vitmini:=j;
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].vitmaxi:=j;
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
@@ -2838,9 +2994,14 @@ var s,sa,SOrigine: string;
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].HeureMin:=j;
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
i:=pos(',',s);
|
||||
sa:=copy(s,1,i-1);delete(s,1,i);
|
||||
Tablo_actionneur[maxtablo_act].trainDecl:=sa;
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].MinuteMin:=j;
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].HeureMax:=j;
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].MinuteMax:=j;
|
||||
end;
|
||||
condTrainSig :
|
||||
begin
|
||||
val(s,j,erreur); delete(s,1,erreur);
|
||||
Tablo_actionneur[maxtablo_act].tabloCond[k].adresse:=j;
|
||||
i:=pos(',',s);
|
||||
@@ -3414,20 +3575,52 @@ var s,sa,SOrigine: string;
|
||||
begin
|
||||
inc(ntrains);
|
||||
sa:=sOrigine;
|
||||
delete(s,1,i-1);
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
trains[ntrains].nom_train:=copy(sa,1,i-1);
|
||||
delete(s,1,i-1);
|
||||
end;
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,i,1);
|
||||
val(s,trains[ntrains].adresse,erreur);
|
||||
delete(s,1,erreur-1);
|
||||
end;
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,i,1);
|
||||
val(s,trains[ntrains].vitMax,erreur);
|
||||
delete(s,1,erreur-1);
|
||||
end;
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,i,1);
|
||||
val(s,trains[ntrains].vitnominale,erreur);
|
||||
delete(s,1,erreur-1);
|
||||
end;
|
||||
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,i,1);
|
||||
val(s,trains[ntrains].vitralenti,erreur);
|
||||
delete(s,1,erreur-1);
|
||||
end;
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
delete(s,i,1);
|
||||
i:=pos(',',s);
|
||||
if i=0 then i:=length(s)+1;
|
||||
delete(s,1,erreur-1);
|
||||
end;
|
||||
|
||||
i:=pos(',',s);
|
||||
if i<>0 then
|
||||
begin
|
||||
trains[ntrains].NomIcone:=copy(s,1,i-1);
|
||||
Formprinc.ComboTrains.Items.Add(trains[ntrains].nom_train);
|
||||
delete(s,1,i-1);
|
||||
end;
|
||||
@@ -3606,7 +3799,6 @@ var s,sa,SOrigine: string;
|
||||
end;
|
||||
|
||||
sa:=uppercase(HeureInit_ch);
|
||||
delete(s,i,length(sa)+1);
|
||||
i:=pos(sa,s);
|
||||
if i=1 then
|
||||
begin
|
||||
@@ -3630,7 +3822,7 @@ var s,sa,SOrigine: string;
|
||||
begin
|
||||
inc(nv);
|
||||
delete(s,i,length(sa)+1);
|
||||
end;
|
||||
val(s,DureeMinute,erreur);
|
||||
end;
|
||||
|
||||
end;
|
||||
@@ -3774,6 +3966,14 @@ var s,sa,SOrigine: string;
|
||||
sa:=uppercase(OffsetYFC_ch)+'=';
|
||||
i:=pos(sa,s);
|
||||
if i=1 then
|
||||
begin
|
||||
delete(s,i,length(sa));
|
||||
val(s,OffsetYFC,erreur);
|
||||
end;
|
||||
|
||||
|
||||
sa:=uppercase(PosSplitter_ch)+'=';
|
||||
i:=pos(sa,s);
|
||||
if i=1 then
|
||||
begin
|
||||
delete(s,i,length(sa));
|
||||
@@ -4337,7 +4537,7 @@ var s,sa,SOrigine: string;
|
||||
end;
|
||||
|
||||
// section PN
|
||||
end;
|
||||
sa:=uppercase(section_PN_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
begin
|
||||
compile_PN;
|
||||
@@ -4349,22 +4549,26 @@ var s,sa,SOrigine: string;
|
||||
if pos(sa,s)<>0 then
|
||||
begin
|
||||
compile_actions;
|
||||
sa:=uppercase(section_dccpp_ch);
|
||||
end;
|
||||
|
||||
|
||||
// section dcc++
|
||||
sa:=uppercase(section_dccpp_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
trouve_section_dccpp:=true;
|
||||
begin
|
||||
trouve_section_dccpp:=true;
|
||||
compile_dccpp;
|
||||
end;
|
||||
|
||||
// section trains
|
||||
sa:=uppercase(section_trains_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
if pos(sa,s)<>0 then
|
||||
begin
|
||||
trouve_section_trains:=true;
|
||||
compile_trains;
|
||||
end;
|
||||
|
||||
// section dédodeurs
|
||||
// section dédodeurs
|
||||
sa:=uppercase(section_DecPers_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
begin
|
||||
@@ -4510,6 +4714,22 @@ begin
|
||||
end;
|
||||
|
||||
GetDir(0,s);
|
||||
Affiche('Lecture du fichier de configuration du répertoire',clYellow);
|
||||
Affiche(s,clyellow);
|
||||
|
||||
try
|
||||
assignFile(fichier,NomConfig);
|
||||
reset(fichier);
|
||||
except
|
||||
Affiche('Fichier '+NomConfig+' non trouvé : création d''un fichier vide par défaut',clred);
|
||||
portcom:='COM3:57600,N,8,1,2';
|
||||
adresseIPCDM:='127.0.0.1';portCDM:=9999;
|
||||
adresseIP:='192.168.1.23';portInterface:=5550;
|
||||
verifVersion:=true;
|
||||
Valeur_entete:=1;
|
||||
TempoOctet:=50;
|
||||
Ecran_sc:=1;
|
||||
Srvc_Aig:=true;
|
||||
Srvc_Act:=true;
|
||||
Srvc_Det:=true;
|
||||
Srvc_Pos:=false;
|
||||
@@ -4659,6 +4879,10 @@ begin
|
||||
|
||||
Val(EditPortServeur.Text,i,erreur);
|
||||
if (i<1) or (i>65535) then i:=4500;
|
||||
portServeur:=i;
|
||||
|
||||
if checkRoulage.Checked then
|
||||
begin
|
||||
AvecRoulage:=1;
|
||||
Formprinc.roulage1.visible:=true;
|
||||
end
|
||||
@@ -5340,6 +5564,10 @@ var i,j,x,y,l,LongestLength,PixelLength : integer;
|
||||
c:=GroupBoxPNA.Components[i];
|
||||
composant(c,couleurfond,couleurTexte);
|
||||
end;
|
||||
|
||||
// périphériques
|
||||
for i:=0 to TabSheetPeriph.ComponentCount-1 do
|
||||
begin
|
||||
c:=TabSheetPeriph.Components[i];
|
||||
composant(c,couleurfond,couleurTexte);
|
||||
end;
|
||||
@@ -5370,6 +5598,25 @@ begin
|
||||
end;
|
||||
|
||||
procedure TFormConfig.FormCreate(Sender: TObject);
|
||||
var i,j,x,y,l,LongestLength,PixelLength : integer;
|
||||
cs,s,LongestString : string;
|
||||
begin
|
||||
if AffEvt or (debug=1) then Affiche('Création fenêtre config',clLime);
|
||||
|
||||
s:=GetCurrentDir;
|
||||
if not(directoryExists(rep_icones)) then CreateDir(rep_icones);
|
||||
ChDir(s); // revient au rep initial
|
||||
|
||||
visible:=false;
|
||||
clicListe:=true;
|
||||
position:=poMainFormCenter;
|
||||
cs:='ColorA='+IntToHex(couleurFond,6); // pour rajouter aux couleurs personnalisées de la fenetre couleur
|
||||
colorDialogFond.CustomColors.Add(cs);
|
||||
ButtonCouleur.Hint:='Change la couleur de fond de toutes les fenêtres de Signaux_Complexes.'+#13+
|
||||
'Utilisez la couleur personnalisée n°1 et après modification,'+#13+
|
||||
'cliquer sur "ajouter aux couleurs personnalisées" qui seule sera sauvegardée';
|
||||
|
||||
Affiche_avert:=false;
|
||||
if affevt then affiche('FormConfig create',clLime);
|
||||
PageControl.ActivePage:=Formconfig.TabSheetCDM; // force le premier onglet sur la page
|
||||
Aig_supprime.Adresse:=0;
|
||||
@@ -6164,8 +6411,6 @@ begin
|
||||
begin
|
||||
s:=encode_act_pn(i);
|
||||
if s<>'' then
|
||||
if l>LongestLength then
|
||||
begin
|
||||
begin
|
||||
ListBoxPN.items.Add(s);
|
||||
// trouver la chaine la plus longue pour la future scrollbar
|
||||
@@ -6396,7 +6641,7 @@ begin
|
||||
end;
|
||||
ComboStyle:=TComboBox.create(FormConfig.TabSheetDecodeurs);
|
||||
with ComboStyle do
|
||||
parent:=GroupBoxDivers;
|
||||
begin
|
||||
Name:='ComboStyle'+intToSTR(i);
|
||||
left:=130;Top:=LabelStyle.top-2;Width:=150;Height:=13;
|
||||
text:='';
|
||||
@@ -6504,6 +6749,27 @@ begin
|
||||
|
||||
LabelnCantonsRes:=TLabel.Create(FormConfig.TabAvance);
|
||||
with LabelnCantonsRes do
|
||||
begin
|
||||
Left:=10;Top:=90;Width:=170;Height:=12;
|
||||
caption:='Nombre de cantons à réserver en avant du train';
|
||||
name:='LabelnCantonsRes';
|
||||
parent:=GroupBoxAvance;
|
||||
end;
|
||||
EditnCantonsRes:=TEdit.Create(TabAvance);
|
||||
with EditnCantonsRes do
|
||||
begin
|
||||
Left:=x;Top:=88;Width:=30;Height:=15;
|
||||
name:='EditnCantonsRes';
|
||||
text:='';
|
||||
parent:=GroupBoxAvance;
|
||||
hint:='Nombre de cantons à réserver (1 à 5) en avant du train.'+#13+
|
||||
'Utilisé en mode roulage ou réservation [sous mode réservation par canton (ci-dessous)].'+#13+
|
||||
'Cette valeur dépend de la taille du réseau.';
|
||||
ShowHint:=true;
|
||||
end;
|
||||
|
||||
LabelAntiTO:=TLabel.Create(FormConfig.TabAvance);
|
||||
with LabelAntiTO do
|
||||
begin
|
||||
Left:=10;Top:=110;Width:=170;Height:=12;
|
||||
caption:='Utilisation de l''anti timeout Lenz Ethernet';
|
||||
@@ -8602,7 +8868,13 @@ begin
|
||||
|
||||
if tablo_PN[lignecliqueePN+1].TypeCde=1 then
|
||||
begin
|
||||
val(s,i,erreur);
|
||||
tablo_PN[lignecliqueePN+1].CommandeO:=s;
|
||||
end
|
||||
else
|
||||
begin
|
||||
val(s,i,erreur);
|
||||
if (i<0) or (i>2) or (erreur<>0) then begin LabelInfo.caption:='Erreur Commande ferme actionneur';exit;end;
|
||||
LabelInfo.caption:=' ';
|
||||
tablo_PN[lignecliqueePN+1].CommandeOuvre:=i;
|
||||
end;
|
||||
|
||||
@@ -8935,6 +9207,8 @@ begin
|
||||
ss,s: string;
|
||||
begin
|
||||
ss:='';
|
||||
n:=0;
|
||||
for i:=0 to maxTablo_act-1 do
|
||||
begin
|
||||
if formconfig.ListBoxActions.selected[i] then
|
||||
begin
|
||||
@@ -9342,6 +9616,27 @@ begin
|
||||
|
||||
// nc=nombre d'adresses du signal
|
||||
if dec=0 then nc:=0; // rien
|
||||
if dec=1 then nc:=14; // digitalbahn
|
||||
if dec=2 then nc:=signaux[i].Na; // cdf
|
||||
if dec=3 then nc:=8; // ldt LS dec sncf
|
||||
if dec=4 then nc:=5; // leb
|
||||
if dec=5 then nc:=Signaux[i].Na; // digikeijs
|
||||
if dec=6 then // paco unisemaf
|
||||
begin
|
||||
x:=Signaux[index].Unisemaf; // modèle
|
||||
case x of
|
||||
2 : nc:=1;
|
||||
3,4 : nc:=2;
|
||||
51,52 : nc:=3;
|
||||
71 : nc:=2;
|
||||
72,73 : nc:=3;
|
||||
91,92 : nc:=3;
|
||||
93,94,95,96,97,98,99 : nc:=4;
|
||||
end;
|
||||
end;
|
||||
if dec=7 then nc:=Signaux[i].Na; // SR
|
||||
if dec=8 then // arcomora
|
||||
begin
|
||||
case x of
|
||||
3 : nc:=3;
|
||||
4,5 : nc:=4;
|
||||
@@ -9371,7 +9666,7 @@ begin
|
||||
adr:=trains[i].adresse;
|
||||
nom:=trains[i].nom_train;
|
||||
for j:=i+1 to ntrains do
|
||||
nc:=decodeur_pers[j].NbreAdr;
|
||||
begin
|
||||
if trains[j].Adresse=adr then Affiche('Les trains '+intToSTR(i)+' et '+intToSTR(j)+' ont la même adresse : '+intToSTR(adr),clred);
|
||||
if trains[j].nom_train=nom then Affiche('Les trains '+intToSTR(i)+' et '+intToSTR(j)+' ont le même nom : '+nom,clred);
|
||||
|
||||
@@ -10204,6 +10499,9 @@ begin
|
||||
begin
|
||||
Affiche('Erreur 48 TCO'+intToSTR(indexTCO)+' ['+intToSTR(x)+','+intToSTR(y)+'] d''adresse '+intToSTR(Adr)+' décrite comme un croisement ou TJD/S car elle présente une adresse',clred);
|
||||
Affiche('mais la cellule représente un pont',clred);
|
||||
ok:=false;
|
||||
end;
|
||||
end;
|
||||
|
||||
if isAigTCO(i) then
|
||||
begin
|
||||
@@ -11197,7 +11495,7 @@ begin
|
||||
Affiche('Erreur ligne '+s,clred);
|
||||
compile_branche:=false;
|
||||
exit;
|
||||
Val(enregistrement,detect,erreur); // détermine si le champ est numérique ou pas (cad si aiguillage)
|
||||
end;
|
||||
se:=enregistrement;
|
||||
// décoder l'enregistrement
|
||||
// si c'est un détecteur, fini trouvé
|
||||
@@ -11208,7 +11506,13 @@ begin
|
||||
c:=enregistrement[1];
|
||||
delete(enregistrement,1,1);
|
||||
if c='A' then
|
||||
Affiche('Erreur 17 champ '+se+' ligne '+s,clred);
|
||||
begin
|
||||
Val(enregistrement,adresse,erreur2);
|
||||
if (adresse=0) or (erreur2<>0) then
|
||||
begin
|
||||
Affiche('Erreur 17 champ '+se+' ligne '+s,clred);
|
||||
code:=false;
|
||||
end;
|
||||
if adresse>NbMaxDet then
|
||||
begin
|
||||
Affiche('Erreur 18 ligne '+s+' : adresse aiguillage trop grand: '+intToSTR(adresse),clred);
|
||||
@@ -11903,7 +12207,43 @@ begin
|
||||
2 : sr:=sr+', en hexa vrai';
|
||||
3 : sr:=sr+', spécifique';
|
||||
end;
|
||||
end;
|
||||
|
||||
if copy(s,1,3)='<1>' then sr:='Mise sous tension de la voie';
|
||||
if copy(s,1,3)='<0>' then sr:='Mise hors tension de la voie';
|
||||
|
||||
if copy(s,1,2)='<T' then
|
||||
begin
|
||||
delete(s,1,2);
|
||||
val(s,i,erreur);sr:='Positionne aiguillage '+intToSTR(i);
|
||||
delete(s,1,erreur);
|
||||
val(s,i,erreur);
|
||||
if i=0 then sr:=sr+' droit';
|
||||
if i=1 then sr:=sr+' dévié';
|
||||
end;
|
||||
|
||||
if copy(s,1,2)='<E' then sr:='Ecrit en eprom';
|
||||
|
||||
decodeDCC:=sr;
|
||||
end;
|
||||
|
||||
|
||||
procedure TFormConfig.RichCdeDccppChange(Sender: TObject);
|
||||
var i,maxi : integer;
|
||||
begin
|
||||
if activ then exit;
|
||||
maxi:=RichCdeDCCpp.Lines.count;
|
||||
if maxi>MaxCdeDccpp then maxi:=MaxCdeDccpp;
|
||||
for i:=1 to maxi do
|
||||
begin
|
||||
CdeDccpp[i]:=RichCdeDccpp.Lines[i-1];
|
||||
end;
|
||||
LabelInfo.caption:=decodeDCC(richCdeDCCpp.lines[ligneDCC]);
|
||||
end;
|
||||
|
||||
procedure TFormConfig.CheckEnvAigDccppClick(Sender: TObject);
|
||||
begin
|
||||
if CheckEnvAigDccpp.checked then EnvAigDccpp:=1 else EnvAigDccpp:=0;
|
||||
end;
|
||||
|
||||
// affiche l'icone du train index dans le canvas
|
||||
@@ -11912,8 +12252,16 @@ begin
|
||||
rd : double;
|
||||
begin
|
||||
with formConfig do
|
||||
begin
|
||||
// source
|
||||
l:=Trains[index].Icone.width;
|
||||
h:=Trains[index].Icone.Height;
|
||||
if h=0 then exit;
|
||||
rd:=l/h;
|
||||
//Affiche(FloatToSTR(rd),clred);
|
||||
|
||||
// destination : la hauteur est fixée
|
||||
HautDest:=round(ImageTrain.Height);
|
||||
LargDest:=round(Hautdest*rd);
|
||||
|
||||
// si la largeur > que l'image, on fixe la largeur
|
||||
@@ -13962,7 +14310,7 @@ begin
|
||||
EditAdrAig.Color:=clred;
|
||||
LabelInfo.caption:='Erreur adresse Aiguillage ';exit;
|
||||
end;
|
||||
modele:=aiguillage[index].modele;
|
||||
|
||||
index:=ligneclicAig+1;
|
||||
if index=0 then exit;
|
||||
|
||||
@@ -13971,7 +14319,7 @@ begin
|
||||
if (erreur<>0) or (i>MaxAcc) then begin LabelInfo.caption:='Erreur adresse aiguillage ';exit;end;
|
||||
// vérifier si l'adresse de l'aiguillage existe déja
|
||||
|
||||
exit;
|
||||
if (aiguillage[Index_Aig(i)].modele<>rien) then
|
||||
begin
|
||||
EditAdrAig.Color:=clred;
|
||||
LabelInfo.caption:='aiguillage '+IntToSTR(i)+' existe déjà - ne sera pas écrasé' ;
|
||||
@@ -13994,6 +14342,7 @@ begin
|
||||
end;
|
||||
|
||||
if (modele=tjd) or (modele=tjs) then
|
||||
begin
|
||||
clicListe:=true;
|
||||
nEtat:=aiguillage[index].EtatTJD;
|
||||
if nEtat=4 then
|
||||
@@ -14263,8 +14612,68 @@ procedure TFormConfig.ListBoxOperationsDblClick(Sender: TObject);
|
||||
if ligneclicAct<0 then
|
||||
begin
|
||||
clicliste:=false;
|
||||
exit;
|
||||
end;
|
||||
|
||||
Affiche_action;
|
||||
|
||||
ClicAction:=-1;
|
||||
|
||||
clicliste:=false;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ListBoxOperationsDrawItem(Control: TWinControl;
|
||||
|
||||
Index: Integer; Rect: TRect; State: TOwnerDrawState);
|
||||
var
|
||||
i,erreur: Integer;
|
||||
ItemText: string;
|
||||
begin
|
||||
with ListBoxOperations do
|
||||
begin
|
||||
ItemText:=Items[index];
|
||||
val(ItemText,i,erreur);
|
||||
Delete(ItemText,1,erreur-1);
|
||||
Canvas.Fillrect(Rect);
|
||||
formConfCellTCO.ImageListIcones.Draw(Canvas, Rect.Left, Rect.Top, i);
|
||||
Canvas.Textout(Rect.Left + formConfCellTCO.ImageListIcones.Width + 2, Rect.Top, ItemText);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ListBoxOperationsMouseDown(Sender: TObject;
|
||||
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
ClicAction:=ListBoxOperations.ItemIndex;
|
||||
end;
|
||||
|
||||
procedure action_relais(i : integer);
|
||||
begin
|
||||
action(i);
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ButtonTestActionClick(Sender: TObject);
|
||||
begin
|
||||
|
||||
if (ligneclicAct<0) then exit;
|
||||
action_relais(ligneclicact+1); // car action est une fonction d'une form...
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ModifActionClick(Sender: TObject);
|
||||
|
||||
begin
|
||||
DeclencheurAffiche:=0;
|
||||
OperationAffiche:=clicaction+1;
|
||||
formModifAction.ShowModal;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ListBoxActionsKeyDown(Sender: TObject; var Key: Word;
|
||||
|
||||
Shift: TShiftState);
|
||||
begin
|
||||
if (maxTablo_act<1) or clicliste then exit;
|
||||
if key=VK_delete then supprime_action;
|
||||
|
||||
if ord(Key)=VK_UP then
|
||||
begin
|
||||
clicListe:=true;
|
||||
|
||||
Reference in New Issue
Block a user