This commit is contained in:
f1iwq2
2024-01-11 20:39:36 +01:00
parent 5562e9c899
commit ed7935a641
16 changed files with 685 additions and 635 deletions

View File

@@ -572,7 +572,6 @@ retro_ch='retro';
procedure modif_ComboL(Sender : TObject);
procedure cb_onclick(Sender : Tobject);
procedure tb_onChange(sender : TObject);
procedure Bt_onclick(sender : Tobject);
procedure Bt_onclick(sender : Tobject);
procedure tbCde_onchange(Sender : Tobject);
end;
@@ -590,7 +589,7 @@ fenetre_ch='Fenetre';
Filtrage_det_ch='Filtrage_det';
Algo_localisation_ch='Algo_localisation';
Avec_roulage_ch='Avec_roulage';
IpV4_PC_ch='IpV4_PC';
nb_det_dist_ch='nb_det_dist';
IpV4_PC_ch='IpV4_PC';
ServicesCDM_ch='ServicesCDM';
retro_ch='retro';
@@ -633,7 +632,7 @@ var
nom_dec_pers_ch='Nom_dec_pers';
Nom_fich_TCO_ch='Nom_fichier_TCO';
LargeurF_ch='LargeurF';
HauteurF_ch='HauteurF';
HauteurF_ch='HauteurF';
OffsetXF_ch='OffsetX';
OffsetYF_ch='OffsetY';
PosSplitter_ch='Splitter';
@@ -678,10 +677,10 @@ function place_id(s : string) : string;
EditZdet1V1F,EditZdet2V1F,EditZdet1V1O,EditZdet2V1O,
EditZdet1V2F,EditZdet2V2F,EditZdet1V2O,EditZdet2V2O,
EditZdet1V3F,EditZdet2V3F,EditZdet1V3O,EditZdet2V3O,
EditZdet1V4F,EditZdet2V4F,EditZdet1V4O,EditZdet2V4O,
EditZdet1V4F,EditZdet2V4F,EditZdet1V4O,EditZdet2V4O,
EditZdet1V5F,EditZdet2V5F,EditZdet1V5O,EditZdet2V5O : Tedit;
EditT : Array[1..10] of Tedit;
TextBoxCde : array[1..19] of Tedit;
TextBoxCde : array[1..19] of Tedit;
LabelPortCde,LbPnVoie1,LbAPnVoie1,LbAPnVoie2,LbAPnVoie3,LbAPnVoie4,LbAPnVoie5,LbATitre,
LbZTitre,LbZPnVoie1,LbZPnVoie2,LbZPnVoie3,LbZPnVoie4,LbZPnVoie5,LabelMP,LabelNumeroP : Tlabel;
@@ -727,16 +726,16 @@ begin
if CDM_connecte=false then begin envoi_CDM:=false;exit;end;
if traceTrames then afficheDebug(s,clLime);
Formprinc.ClientSocketCDM.Socket.SendText(s);
// attend l'ack
// attend l'ack
ackCDM:=false;nackCDM:=false;
temps:=0;
repeat
inc(temps);Sleep(100);
Application.processMessages;
until ferme or ackCDM or nackCDM or (temps>30); // CDM répond < 1s
inc(temps);Sleep(100);
Application.processMessages;
until ferme or ackCDM or nackCDM or (temps>30); // CDM répond < 1s
if not(ackCDM) or nack then
begin
begin
Affiche('Pas de réponse de CDM Rail',clRed);
end;
@@ -1071,7 +1070,7 @@ begin
// renvoie un A si BT est un aiguillage (aig, tjd, tjs tri)
function TypeEl_to_char(BT : TEquipement) : string;
begin
begin
case BT of // 1=détecteur 2=aig ou TJD ou TJS 4=tri
det : TypeEl_to_char:='';
aig,tjd,tjs,triple : TypeEl_to_char:='A';
@@ -1079,7 +1078,7 @@ begin
end;
function TypeElAIg_to_char(adr : integer;c : char) : string;
var s: string;
var s: string;
begin
if (adr=0) and (c<>'D') and (c<>'S') and (c<>'P') then s:='Buttoir';
@@ -1183,7 +1182,7 @@ begin
s:=s+intToSTR(Signaux[i].SR[nc].sortie0);
if nc<8 then s:=s+',' else s:=s+')';
end;
end;
end;
// décodeur CDF ou digikeijs
if (Signaux[i].decodeur=2) or (Signaux[i].decodeur=5) then
@@ -1198,10 +1197,10 @@ begin
end;
// signal belge
if (Signaux[i].aspect=20) then
if (Signaux[i].aspect=20) then
begin
s:=s+',NA'+intToSTR(Signaux[i].na)+',VCV';
if Signaux[i].verscontrevoie then s:=s+'1' else s:=s+'0';
if Signaux[i].verscontrevoie then s:=s+'1' else s:=s+'0';
s:=s+',CV';
if Signaux[i].contrevoie then s:=s+'1' else s:=s+'0';
end;
@@ -1246,7 +1245,7 @@ begin
// adresse de signal
val(s,adresse,erreur);
if adresse=0 then begin affiche('Erreur 671 ligne '+s,clred);exit;end;
// vérifier si le signal existe pour ne pas le stocker
// vérifier si le signal existe pour ne pas le stocker
for id:=1 to NbreSignaux do
begin
if Signaux[id].adresse=adresse then
@@ -1263,11 +1262,11 @@ begin
else
begin
inc(NbreSignaux);
Signaux[i].adresse:=adresse;
Signaux[i].adresse:=adresse;
tablo_Index_Signal[adresse]:=i; // stocker l'index provisoire avant tri
j:=pos(',',s);
if j>1 then
begin
begin
sa:=copy(s,1,j-1);
if sa[1]='D' then
// signal directionnel ------------------------------------------
@@ -1472,7 +1471,7 @@ begin
Val(s,k,erreur);
delete(s,1,erreur);
if k=0 then
begin
begin
if Signaux[i].decodeur=6 then begin Affiche('Erreur 680 Ligne '+chaine_signal+' Manque définition décodeur UniSemaf signal '+intToSTR(adresse),clred);end;
end
else
@@ -1504,7 +1503,7 @@ begin
bd:=0;
repeat
inc(bd);
setlength(Signaux[i].condCarre[l],bd+1); // une condition en plus
setlength(Signaux[i].condCarre[l],bd+1); // une condition en plus
k:=pos(',',sa);
if k<>0 then chaine:=copy(sa,1,k-1) else chaine:=sa;
if chaine[1]='A' then
@@ -1736,9 +1735,6 @@ begin
writeln(fichierN,serveurIPCDM_Touche_ch+'='+s);
writeln(fichierN,PortServeur_ch+'=',PortServeur);
writeln(fichierN,Filtrage_det_ch+'=',filtrageDet0);
writeln(fichierN,AntiTimeoutEthLenz_ch+'=',AntiTimeoutEthLenz);
// taille de la fonte
writeln(fichierN,Fonte_ch+'=',TailleFonte);
writeln(fichierN,AntiTimeoutEthLenz_ch+'=',AntiTimeoutEthLenz);
// taille de la fonte
writeln(fichierN,Fonte_ch+'=',TailleFonte);
@@ -1827,8 +1823,8 @@ begin
if MasqueBandeauTCO then s:='1' else s:='0';
writeln(fichierN,MasqueBandeauTCO_ch+'=',s);
// lancement de CDM
// lancement de CDM
if LanceCDM then s:='1' else s:='0';
writeln(fichierN,CDM_ch+'=',s);
@@ -1913,11 +1909,11 @@ begin
writeln(fichierN,s);
end;
// commande par périphérique
if decodeur_pers[i].commande=1 then
if decodeur_pers[i].commande=1 then
begin
k:=decodeur_Pers[i].nation;
if k=1 then
for j:=1 to 19 do
if k=1 then
for j:=1 to 19 do
begin
s:=etats[j]+','+decodeur_pers[i].desc[j].Chcommande;
writeln(fichierN,s);
@@ -2014,6 +2010,7 @@ end;
end;
writeln(fichierN,'0');
closefile(fichierN);
end;
// trier les détecteurs
procedure trier_detecteurs;
@@ -2030,11 +2027,25 @@ begin
Adresse_detecteur[j]:=temp;
end;
end;
end;
end;
// trier les aiguillages
procedure trier_aig;
var i,j : integer;
temp : TAiguillage;
s : string;
begin
for i:=1 to MaxAiguillage-1 do
begin
for j:=i+1 to MaxAiguillage do
begin
if aiguillage[i].Adresse>aiguillage[j].adresse then
begin
temp:=aiguillage[i];
aiguillage[i]:=aiguillage[j];
// trier les aiguillages
aiguillage[j]:=temp;
end;
end;
end;
@@ -2049,10 +2060,40 @@ begin
begin
s:=encode_aig(i);
formConfig.ListBoxAig.Items.AddObject(s, Pointer(clRed));
Aiguillage[i].modifie:=false;
end;
formconfig.ListBoxAig.itemindex:=0;
end;
end;
// trie les signaux
procedure trier_sig;
var i,j,l,longestLength,pixelLength : integer;
s,LongestString : string;
temp : TSignal;
begin
for i:=1 to NbreSignaux-1 do
begin
for j:=i+1 to NbreSignaux do
begin
if Signaux[i].Adresse>Signaux[j].adresse then
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;
if formconfig<>nil then
begin
formconfig.ListBoxSig.Clear;
longestLength:=0;
for i:=1 to NbreSignaux do
begin
@@ -2063,7 +2104,7 @@ var s,sa,SOrigine: string;
formconfig.ListBoxSig.Items.Add(s);
// trouver la chaine la plus longue pour la future scrollbar
l:=Length(s);
for j:=i+1 to NbreSignaux do
if l>LongestLength then
begin
LongestString:=s;
LongestLength:=l;
@@ -2106,7 +2147,7 @@ var s,sa,SOrigine: string;
// supprime les espaces éventuels sauf entre les guillements
esp:=0;
repeat
l1:=pos('"',s);l2:=posEx('"',s,l1+1);
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;
@@ -2460,6 +2501,7 @@ var s,sa,SOrigine: string;
s:=lit_ligne;
inc(Nligne);
//Affiche(s,ClLime);
//chaine:=s;
if debugconfig then Affiche(s,ClLime);
if (s<>'0') then
begin
@@ -3196,20 +3238,6 @@ var s,sa,SOrigine: string;
delete(s,i,length(sa));
val(s,i,erreur);
Srvc_aig:=testbit(i,0);
Srvc_act:=testbit(i,1);
Srvc_det:=testbit(i,2);
Srvc_pos:=testbit(i,3);
Srvc_sig:=testbit(i,4);
Srvc_tdcc:=false;
end;
// adresse ip et port de la centrale
sa:=uppercase(IPV4_INTERFACE_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
inc(nv);
trouve_IPV4_INTERFACE:=true;
Srvc_act:=testbit(i,1);
Srvc_det:=testbit(i,2);
Srvc_pos:=testbit(i,3);
@@ -3350,16 +3378,16 @@ var s,sa,SOrigine: string;
delete(s,i,length(sa));
val(s,AffMemoFenetre,erreur);
end;
// Nombre de cantons avant signal
// Nombre de cantons avant signal
sa:=uppercase(Nb_cantons_Sig_ch)+'=';
i:=pos(sa,s);
if i=1 then
begin
inc(nv);
inc(nv);
trouve_Nb_cantons_Sig:=true;
delete(s,i,length(sa));
val(s,Nb_cantons_Sig,erreur);
delete(s,i,length(sa));
val(s,Nb_cantons_Sig,erreur);
if (Nb_cantons_Sig<3) or (Nb_cantons_Sig>5) then Nb_cantons_Sig:=3;
end;
@@ -3660,7 +3688,7 @@ begin
end;
// section accesoires comusb
sa:=uppercase(section_accCOM_ch);
sa:=uppercase(section_accCOM_ch);
if pos(sa,s)<>0 then
begin
trouve_section_acccomusb:=true;
@@ -3689,10 +3717,10 @@ begin
trouve_entete:=false;
trouve_IPV4_INTERFACE:=false;
trouve_Tempo_maxi:=false;
trouve_PROTOCOLE_SERIE:=false;
trouve_PROTOCOLE_SERIE:=false;
trouve_TCO:=false;
trouve_LAY:=false;
trouve_Serveur_interface:=false;
trouve_LAY:=false;
trouve_Serveur_interface:=false;
trouve_cdm:=false;
trouve_NOTIF_VERSION:=false;
trouve_masqueTCO:=false;
@@ -3746,7 +3774,7 @@ begin
Detecteur[i].IndexTrain:=0;
Ancien_detecteur[i]:=false;
end;
//Affiche('Lecture du fichier de configuration '+NomConfig,clyellow);
//Affiche('Lecture du fichier de configuration '+NomConfig,clyellow);
try
assign(fichier,NomConfig);
reset(fichier);
@@ -3784,10 +3812,10 @@ begin
lit_flux;
close(fichier);
configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (NbreSignaux=0);
configNulle:=(maxAiguillage=0) and (NbreBranches=0) and (NbreSignaux=0);
if configNulle then Affiche('Fonctionnement en config nulle',ClYellow);
s:='';//Affiche(intToSTR(Nv),clred);
s:='';//Affiche(intToSTR(Nv),clred);
if not(trouve_NbDetDist) then s:=nb_det_dist_ch;
if not(trouve_ipv4_PC) then s:=IpV4_PC_ch;
if not(trouve_retro) then s:=retro_ch;
@@ -4043,7 +4071,7 @@ begin
end;
procedure TFormConfig.ButtonAppliquerEtFermerClick(Sender: TObject);
var ok : boolean;
var ok : boolean;
begin
ok:=verifie_panneau_config;
if ok then
@@ -4059,12 +4087,14 @@ begin
var AncAdresse,adresse,erreur : integer;
s : string;
begin
if index<1 then exit;
if index<1 then exit;
s:=Uppercase(FormConfig.ListBoxSig.Items[index-1]); // ligne cliquée
if s='' then
begin
ligneclicSig:=-1;
exit;
end;
Signal_Sauve:=Signaux[index]; // sauvegarde
AncLigneClicSig:=ligneclicSig;
@@ -4093,7 +4123,7 @@ begin
if affevt then affiche('FormConfig activate',clLime);
activ:=true;
clicListe:=false;
Edit_HG.Visible:=false;
Edit_HG.Visible:=false;
labelHG.Visible:=false;
EditP1.Visible:=false;
EditP2.Visible:=false;
@@ -4174,9 +4204,20 @@ begin
CheckBoxServAct.checked:=Srvc_Act;
CheckServPosTrains.checked:=Srvc_Pos;
CheckBoxSrvSig.Checked:=Srvc_Sig;
CheckBoxRazSignaux.checked:=Raz_Acc_signaux;
CheckBoxInitAig.checked:=AvecInitAiguillages;
CheckPosAig.checked:=AvecDemandeAiguillages;
CheckBoxDemarUSB.checked:=AvecDemandeInterfaceUSB;
CheckBoxDemarEth.checked:=AvecDemandeInterfaceEth;
CheckBoxSombre.Checked:=sombre;
RadioButtonXpress.Checked:=protocole=1;
RadioButtonDcc.Checked:=protocole=2;
if NbreDecPers>0 then
ComboBoxNation.Itemindex:=decodeur_pers[1].nation-1;
clicListe:=true; // empeche le traitement de l'evt text
editLAY.Text:=lay;
@@ -4649,8 +4690,8 @@ begin
if affevt then affiche('tbCde_onchange',clyellow);
tb:=sender as Tedit;
s:=tb.Name;
te:=tb.text;
i:=extract_int(s);
te:=tb.text;
i:=extract_int(s);
if (i<1) or (i>19) or (decCourant<1) then exit;
decodeur_pers[decCourant].desc[i].Chcommande:=te;
@@ -5277,18 +5318,6 @@ begin
with EditZDet2V5O do
begin
Name:='EditZDet2V5O';
left:=190;Top:=146;Width:=35;Height:=21;
text:='';
parent:=GroupBoxPNZ;
hint:='Détecteur 2 d''ouverture';
showhint:=true;
onChange:=formConfig.modif_editT;
end;
// remplit les 5 fenêtres de config des aiguillages branches signaux, actionneurs, accessoires comusb
formconfig.ComboBoxDecodeurPerso.AutoComplete:=false; // mettre absolument à false sinon remplissage auto quand on tape et l'index sélec peut changer!!!
for i:=1 to NbreDecPers do
begin
left:=190;Top:=146;Width:=35;Height:=21;
text:='';
parent:=GroupBoxPNZ;
@@ -5307,7 +5336,6 @@ begin
if NbreDecPers>0 then
begin
decCourant:=1;
ListBoxAig.Items.AddObject(s, Pointer(clRed));
formconfig.ComboBoxDecodeurPerso.ItemIndex:=0;
ComboBoxNation.ItemHeight:=decodeur_pers[decCourant].nation;
end
@@ -5317,6 +5345,7 @@ begin
// branches
clicListe:=true;
RichBranche.clear;
for i:=1 to NbreBranches do
begin
s:=Branche[i];
RichBranche.Lines.Add(s);
@@ -5327,7 +5356,7 @@ begin
SelStart:=0;
Perform(EM_SCROLLCARET,0,0);
end;
// signaux
ListBoxSig.Items.clear;
ComboBoxDec.items.Clear;
@@ -5342,6 +5371,7 @@ begin
end;
// décodeurs personalisés
for i:=1 to NbreDecPers do
begin
s:=decodeur_pers[i].nom;
formconfig.ComboBoxDec.Items.add(s);
@@ -5395,7 +5425,7 @@ begin
// actionneurs PN
ListBoxPN.Clear;
longestLength:=0;
longestLength:=0;
for i:=1 to NbrePN do
begin
s:=encode_act_pn(i);
@@ -6209,7 +6239,7 @@ begin
EditAct2.Visible:=false;
EditTrainDecl.Visible:=false;
LabelTrain.Visible:=false;
editact2.Visible:=false;
editact2.Visible:=false;
LabelActionneur.Caption:='Aiguillage';
EditEtatActionneur.Hint:='1 ou S=dévié 2 ou D=droit';
EditAct.Hint:='Aiguillage ';
@@ -6224,7 +6254,7 @@ begin
case Equip of
aig : s:='Aiguillage ';
tjd : s:='Tjd ';
tjs : s:='Tjs ';
tjs : s:='Tjs ';
triple : s:='Aiguillage triple ';
det : s:='Détecteur ';
else s:='Inconnu ';
@@ -7493,10 +7523,10 @@ begin
end;
decodeur:=ComboBoxDec.ItemIndex;
if decodeur>NbDecodeur+NbreDecPers then exit;
Signaux[i].decodeur:=decodeur;
Signaux[i].decodeur:=decodeur;
Maj_Hint_Signal(i);
@@ -7519,7 +7549,7 @@ begin
end;
s:=encode_signal(i);
formconfig.ListBoxSig.Items[ligneclicSig]:=s;
ListBoxSig.selected[ligneClicSig]:=true;
ListBoxSig.selected[ligneClicSig]:=true;
aff_champs_signaux(i);
if not(verif_dec_sig(false)) then FormConfig.labelInfo.Caption:='Combinaison décodeur / aspect incompatible';
@@ -7534,7 +7564,7 @@ begin
if clicliste or (ligneClicSig<0) then exit;
if affevt then Affiche('Evt detecteur 1',clOrange);
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditDet1.Text;
@@ -7573,7 +7603,7 @@ begin
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditSuiv1.Text;
s:=EditSuiv1.Text;
if s<>'' then
begin
Val(s,i,erreur);
@@ -7601,7 +7631,7 @@ begin
ListBoxSig.Items[ligneClicSig]:=s;
ListBoxSig.selected[ligneClicSig]:=true;
end;
end;
end;
procedure TFormConfig.EditSuiv1Change(Sender: TObject);
@@ -7623,7 +7653,7 @@ begin
Val(s,i,erreur);
if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur2 ';exit;end;
LabelInfo.caption:=' ';
Signaux[ligneClicSig+1].Adr_det2:=i;
Signaux[ligneClicSig+1].Adr_det2:=i;
maj_hint_Signal(ligneClicSig+1);
s:=encode_signal(ligneClicSig+1);
ListBoxSig.Items[ligneClicSig]:=s;
@@ -7639,7 +7669,7 @@ begin
procedure TFormConfig.CheckVerrouCarreClick(Sender: TObject);
var s : string;
var s : string;
begin
if clicliste or (ligneClicSig<0) then exit;
if affevt then Affiche('Evt Verrou carré',clOrange);
@@ -7680,7 +7710,7 @@ begin
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditSuiv2.Text;
s:=EditSuiv2.Text;
if s<>'' then
begin
Val(s,i,erreur);
@@ -7708,7 +7738,7 @@ begin
ListBoxSig.Items[ligneClicSig]:=s;
ListBoxSig.selected[ligneClicSig]:=true;
end;
end;
end;
procedure TFormConfig.EditSuiv2Change(Sender: TObject);
begin
@@ -7756,7 +7786,7 @@ begin
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditSuiv3.Text;
s:=EditSuiv3.Text;
if s<>'' then
begin
Val(s,i,erreur);
@@ -7784,7 +7814,7 @@ begin
ListBoxSig.Items[ligneClicSig]:=s;
ListBoxSig.selected[ligneClicSig]:=true;
end;
end;
end;
procedure TFormConfig.EditSuiv3Change(Sender: TObject);
begin
@@ -7832,7 +7862,7 @@ begin
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditSuiv4.Text;
s:=EditSuiv4.Text;
if s<>'' then
begin
Val(s,i,erreur);
@@ -8296,16 +8326,16 @@ begin
if affevt then Affiche('Evt aspect',clOrange);
i:=ComboBoxAsp.ItemIndex;
//Affiche(IntToSTR(i),clyellow);
case i of
case i of
0 : aspect:=2;
1 : aspect:=3;
1 : aspect:=3;
2 : aspect:=4;
3 : aspect:=5;
4 : aspect:=7;
5 : aspect:=9;
11 : aspect:=20;
else aspect:=i+6;
end;
end;
index:=ligneClicSig+1; // index du feu
if index<1 then
begin
@@ -8354,7 +8384,7 @@ begin
procedure TFormConfig.EditSpecUniChange(Sender: TObject);
var erreur,i,Adr,decodeur : integer ;
var erreur,i,Adr,decodeur : integer ;
s : string ;
begin
if clicliste or (ligneClicSig<0) then exit;
@@ -8363,17 +8393,17 @@ end;
if FormConfig.PageControl.ActivePage=FormConfig.TabSheetSig then
with Formconfig do
begin
s:=EditSpecUni.Text;
s:=EditSpecUni.Text;
Val(s,i,erreur); // code unisemaf
s:=EditAdrSig.Text;
Val(s,Adr,erreur); // Adresse signal
// vérification code unisemaf
decodeur:=Signaux[ligneClicSig+1].decodeur;
// vérification code unisemaf
decodeur:=Signaux[ligneClicSig+1].decodeur;
if decodeur=6 then
begin
begin
erreur:=verif_unisemaf(Adr,i);
if erreur=1 then begin LabelInfo.caption:='Erreur code Unisemaf';exit;end;
if erreur=2 then begin LabelInfo.caption:='Erreur cohérence aspect signal';exit;end;
if erreur=2 then begin LabelInfo.caption:='Erreur cohérence aspect signal';exit;end;
LabelInfo.caption:=' ';
Signaux[ligneClicSig+1].Unisemaf:=i;
end;
@@ -8925,8 +8955,7 @@ begin
s : string;
begin
clicliste:=true;
if NbreSignaux>=NbreMaxiSignaux then
begin
if NbreSignaux>=NbreMaxiSignaux then
begin
Affiche('Nombre maximal de signaux atteint',clRed);
exit;
@@ -8940,9 +8969,9 @@ begin
AdrMax:=0;
for i:=1 to NbreSignaux do
begin
end;
if AdrMax<Signaux[i].adresse then AdrMax:=Signaux[i].adresse;
end;
i:=NbreSignaux;
i:=NbreSignaux;
Signaux[i].Adresse:=AdrMax+20;
Signaux[i].Aspect:=3;
@@ -8985,8 +9014,9 @@ begin
ss:='';
n:=0;
for i:=0 to NbreSignaux-1 do
begin
if formconfig.ListBoxSig.selected[i] then
begin
if formconfig.ListBoxSig.selected[i] then
begin
ss:=ss+ intToSTR(Signaux[i+1].adresse)+' ';
inc(n);
end;
@@ -8997,7 +9027,11 @@ begin
if n=1 then s:=s+' le signal ' else s:=s+' les signaux ';
s:=s+ss+' ?';
if Application.MessageBox(pchar(s),pchar('confirm'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION)=idNo then exit;
clicliste:=true;
raz_champs_sig;
// suppression
n:=0;
i:=1;
@@ -9041,7 +9075,7 @@ begin
with Signaux[j].Lbl do
begin
Top:=HtImg+((HtImg+EspY+20)*((j-1) div NbreImagePLigne));
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
caption:='@'+IntToSTR(Signaux[j].adresse);
end;
if Signaux[j].checkFB<>nil then
@@ -9049,7 +9083,13 @@ begin
begin
Name:='CheckBoxFB'+intToSTR(Signaux[j].adresse);
Hint:='Feu blanc';
Top:=HtImg+15+((HtImg+EspY+20)*((j-1) div NbreImagePLigne));
Top:=HtImg+15+((HtImg+EspY+20)*((j-1) div NbreImagePLigne));
Left:=10+ (LargImg+5)*((j-1) mod (NbreImagePLigne));
end;
end;
dec(NbreSignaux);
i:=0;
end;
inc(i);
until i>NbreSignaux;
@@ -9064,17 +9104,18 @@ end;
begin
FormConfig.ListBoxSig.items.Add(s);
end;
begin
end;
ligneClicSig:=-1;
AncligneClicSig:=-1;
FormConfig.ListBoxSig.items.Add(s);
end;
end;
// calcule les index - ne pas trier les signaux, il faudrait trier la fenetre graphique
for i:=1 to NbreSignaux do
begin
tablo_index_signal[Signaux[i].adresse]:=i;
end;
clicliste:=false;
clicliste:=false;
end;
@@ -9085,7 +9126,7 @@ begin
// Ajouter le feu supprimé
procedure TFormConfig.ButtonInsFeuClick(Sender: TObject);
procedure TFormConfig.ButtonInsFeuClick(Sender: TObject);
var s : string;
begin
if Signal_supprime.adresse<>0 then
begin
@@ -10737,6 +10778,7 @@ begin
end;
procedure TFormConfig.EditP4Exit(Sender: TObject);
begin
adresse_p4;
end;
@@ -11114,7 +11156,7 @@ begin
begin
// boucle de ligne
for ligne:=1 to 6 do
begin
begin
s:=MemoCarre.Lines[ligne-1];
sO:=s;
// boucle de chaine
@@ -11152,7 +11194,7 @@ begin
s:=uppercase(MemoCarre.Lines[ligne-1]);
clicListe:=true;
MemoCarre.Lines[ligne-1]:=s;
clicListe:=false;
clicListe:=false;
sO:=s;
j:=1;
if s<>'' then
@@ -11716,7 +11758,7 @@ begin
procedure TFormConfig.CheckPnPulseClick(Sender: TObject);
var i : integer;
s : string;
s : string;
begin
if clicliste or (lignecliqueePN<0) then exit;
if affevt then affiche('Evt CheckPnPulse Change',clyellow);
@@ -11732,7 +11774,7 @@ begin
end;
procedure TFormConfig.CheckFVCClick(Sender: TObject);
var s : string;
var s : string;
begin
if clicliste or (ligneClicSig<0) then exit;
if affevt then Affiche('Evt FVC',clOrange);
@@ -12285,7 +12327,7 @@ procedure TFormConfig.CheckBoxVersContrevoieClick(Sender: TObject);
var i : integer;
begin
with Formconfig.RichCdeDCCpp do
begin
begin
i:=Selstart;
ligneDCC:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée
LabelInfo.caption:=decodeDCC(lines[ligneDCC]);
@@ -12302,12 +12344,12 @@ begin
i:=Selstart;
ligneDCC:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée
if ord(Key)=VK_UP then dec(ligneDCC);
if ord(Key)=VK_DOWN then inc(ligneDCC);
if ord(Key)=VK_DOWN then inc(ligneDCC);
if ligneDCC<0 then ligneDCC:=0;
LabelInfo.caption:=decodeDCC(lines[ligneDCC]);
end;
if (Shift=[ssCtrl]) and (key=ord('A')) then
begin
RichCdeDccpp.SelectAll;
@@ -12709,7 +12751,7 @@ begin
aff : boolean;
begin
// supprimer des décodeurs personalisés
if decCourant=0 then exit;
if decCourant=0 then exit;
s:='Voulez vous supprimer le décodeur personnalisé '#13+decodeur_pers[decCourant].nom+' ?';
if Application.MessageBox(pchar(s),pchar('confirm'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION)=idNo then exit;
@@ -12725,7 +12767,7 @@ begin
//supprimer de la liste des décodeurs si elle est affectée
if trouve_entree_combo(ComboBoxDecodeurPerso,s,i) then ComboBoxDecodeurPerso.Items.Delete(i)
else affiche('Anomalie ComboBox 1',clred);
//if decCourant>0 then dec(decCourant);
decCourant:=0;
ComboBoxDecodeurPerso.ItemIndex:=-1;
@@ -12796,7 +12838,7 @@ begin
j,erreur,adr,ligne,aspect : integer;
c : char;
begin
if (ligneClicSig<0) or clicListe then exit;
if (ligneClicSig<0) or clicListe then exit;
if affevt then affiche('Evt MemoBlanc change',clyellow);
j:=MemoCarre.Selstart;
clicMemo:=MemoCarre.Perform(EM_LINEFROMCHAR,j,0); // numéro de la ligne du curseur
@@ -12850,7 +12892,7 @@ begin
clicListe:=false;
end;
procedure TFormConfig.ListBoxAigDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
@@ -12869,7 +12911,7 @@ begin
if NbreSignaux<1 then exit;
raz_champs_sig;
with Formconfig.ListBoxSig do
begin
ligneClicSig:=itemindex;
@@ -13560,7 +13602,7 @@ begin
inc(i);
// inverse les deux entrées des périphériques
// inverse les deux entrées des périphériques
Periph:=Tablo_periph[i+1];
Tablo_periph[i+1]:=Tablo_periph[i];
Tablo_periph[i]:=Periph;