V7.0
This commit is contained in:
BIN
Binary file not shown.
+167
-17
@@ -1570,8 +1570,8 @@ object FormConfig: TFormConfig
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 633
|
||||
Height = 505
|
||||
ActivePage = TabSheetSig
|
||||
Height = 497
|
||||
ActivePage = TabSheetDecodeurs
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -11
|
||||
@@ -3158,7 +3158,7 @@ object FormConfig: TFormConfig
|
||||
Width = 129
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
ItemHeight = 0
|
||||
TabOrder = 1
|
||||
OnChange = ComboBoxDecChange
|
||||
end
|
||||
@@ -3262,22 +3262,9 @@ object FormConfig: TFormConfig
|
||||
Width = 129
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
ItemHeight = 0
|
||||
TabOrder = 2
|
||||
OnChange = ComboBoxAspChange
|
||||
Items.Strings = (
|
||||
'2 feux'
|
||||
'3 feux'
|
||||
'4 feux'
|
||||
'5 feux'
|
||||
'7 feux'
|
||||
'9 feux'
|
||||
'Directionnel 2 feux'
|
||||
'Directionnel 3 feux'
|
||||
'Directionnel 4 feux'
|
||||
'Directionnel 5 feux'
|
||||
'Directionnel 6 feux'
|
||||
'Signal belge type 1')
|
||||
end
|
||||
object EditSpecUni: TEdit
|
||||
Left = 8
|
||||
@@ -3437,6 +3424,169 @@ object FormConfig: TFormConfig
|
||||
OnChange = EditTempoFeuChange
|
||||
end
|
||||
end
|
||||
object TabSheetDecodeurs: TTabSheet
|
||||
Caption = 'D'#233'codeurs'
|
||||
ImageIndex = 8
|
||||
object Label61: TLabel
|
||||
Left = 13
|
||||
Top = 4
|
||||
Width = 284
|
||||
Height = 19
|
||||
Caption = 'D'#233'codeurs personnalis'#233's de signaux'
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -16
|
||||
Font.Name = 'Arial'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object Label62: TLabel
|
||||
Left = 24
|
||||
Top = 40
|
||||
Width = 36
|
||||
Height = 16
|
||||
Caption = 'Etats'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -13
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object Label63: TLabel
|
||||
Left = 160
|
||||
Top = 24
|
||||
Width = 73
|
||||
Height = 32
|
||||
Caption = 'D'#233'calage d'#39'adresse'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -13
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
WordWrap = True
|
||||
end
|
||||
object Label66: TLabel
|
||||
Left = 256
|
||||
Top = 40
|
||||
Width = 50
|
||||
Height = 16
|
||||
Caption = 'Sorties'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -13
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
WordWrap = True
|
||||
end
|
||||
object GroupBox26: TGroupBox
|
||||
Left = 376
|
||||
Top = 64
|
||||
Width = 241
|
||||
Height = 393
|
||||
Caption = 'Commandes'
|
||||
TabOrder = 0
|
||||
object Label67: TLabel
|
||||
Left = 22
|
||||
Top = 24
|
||||
Width = 195
|
||||
Height = 20
|
||||
Caption = 'Nom du d'#233'codeur personnalis'#233
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clBlack
|
||||
Font.Height = -16
|
||||
Font.Name = 'Arial Narrow'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object Label65: TLabel
|
||||
Left = 19
|
||||
Top = 96
|
||||
Width = 126
|
||||
Height = 39
|
||||
Alignment = taRightJustify
|
||||
Caption = 'Nombre d'#39'adresses occup'#233'es par le signal sur le d'#233'codeur:'
|
||||
WordWrap = True
|
||||
end
|
||||
object Label64: TLabel
|
||||
Left = 64
|
||||
Top = 160
|
||||
Width = 105
|
||||
Height = 13
|
||||
Caption = 'Signalisation nationale'
|
||||
end
|
||||
object Label68: TLabel
|
||||
Left = 23
|
||||
Top = 356
|
||||
Width = 178
|
||||
Height = 13
|
||||
Caption = 'Nombre de d'#233'codeurs personnalis'#233's :'
|
||||
end
|
||||
object LabelNbDecPers: TLabel
|
||||
Left = 208
|
||||
Top = 356
|
||||
Width = 6
|
||||
Height = 13
|
||||
Caption = '0'
|
||||
end
|
||||
object ComboBoxDecodeurPerso: TComboBox
|
||||
Left = 24
|
||||
Top = 56
|
||||
Width = 193
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
TabOrder = 0
|
||||
OnChange = ComboBoxDecodeurPersoChange
|
||||
end
|
||||
object EditNbreAdr: TEdit
|
||||
Left = 168
|
||||
Top = 104
|
||||
Width = 49
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
Text = '2'
|
||||
OnChange = EditNbreAdrChange
|
||||
end
|
||||
object ComboBoxNation: TComboBox
|
||||
Left = 48
|
||||
Top = 176
|
||||
Width = 145
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
OnChange = ComboBoxNationChange
|
||||
Items.Strings = (
|
||||
'Fran'#231'aise'
|
||||
'Belge')
|
||||
end
|
||||
object BoutonNouveau: TButton
|
||||
Left = 86
|
||||
Top = 216
|
||||
Width = 75
|
||||
Height = 25
|
||||
Hint = 'Ajouter un nouveau d'#233'codeur personnalis'#233
|
||||
Caption = 'Nouveau'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
OnClick = BoutonNouveauClick
|
||||
end
|
||||
object ButtonSup: TButton
|
||||
Left = 86
|
||||
Top = 248
|
||||
Width = 75
|
||||
Height = 25
|
||||
Hint = 'Supprimer le d'#233'codeur personnalis'#233
|
||||
Caption = 'Supprimer'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
OnClick = ButtonSupClick
|
||||
end
|
||||
end
|
||||
end
|
||||
object TabSheetAct: TTabSheet
|
||||
Caption = 'Actionneurs/D'#233'tecteurs'
|
||||
ImageIndex = 5
|
||||
|
||||
+741
-27
@@ -340,6 +340,22 @@ type
|
||||
CheckBoxContreVoie: TCheckBox;
|
||||
RadioButtonSpecifique: TRadioButton;
|
||||
EditSpecifique: TEdit;
|
||||
TabSheetDecodeurs: TTabSheet;
|
||||
Label61: TLabel;
|
||||
Label62: TLabel;
|
||||
Label63: TLabel;
|
||||
Label66: TLabel;
|
||||
GroupBox26: TGroupBox;
|
||||
Label67: TLabel;
|
||||
ComboBoxDecodeurPerso: TComboBox;
|
||||
Label65: TLabel;
|
||||
EditNbreAdr: TEdit;
|
||||
Label64: TLabel;
|
||||
ComboBoxNation: TComboBox;
|
||||
BoutonNouveau: TButton;
|
||||
ButtonSup: TButton;
|
||||
Label68: TLabel;
|
||||
LabelNbDecPers: TLabel;
|
||||
procedure ButtonAppliquerEtFermerClick(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
@@ -506,10 +522,18 @@ type
|
||||
procedure CheckBoxVersContrevoieClick(Sender: TObject);
|
||||
procedure CheckBoxContreVoieClick(Sender: TObject);
|
||||
procedure EditSpecifiqueChange(Sender: TObject);
|
||||
procedure BoutonNouveauClick(Sender: TObject);
|
||||
procedure EditNbreAdrChange(Sender: TObject);
|
||||
procedure ComboBoxDecodeurPersoChange(Sender: TObject);
|
||||
procedure ButtonSupClick(Sender: TObject);
|
||||
procedure ComboBoxNationChange(Sender: TObject);
|
||||
private
|
||||
{ Déclarations privées }
|
||||
public
|
||||
{ Déclarations publiques }
|
||||
procedure modif_editT(Sender : TObject);
|
||||
procedure modif_ComboTS(Sender : TObject);
|
||||
procedure modif_ComboL(Sender : TObject);
|
||||
end;
|
||||
|
||||
const
|
||||
@@ -564,7 +588,9 @@ section_dccpp_ch='[section_dcc++]';
|
||||
section_initpp_ch='[init_dcc++]';
|
||||
section_trains_ch='[section_trains]';
|
||||
section_placement_ch='[section_placement]';
|
||||
|
||||
section_DecPers_ch='[section_decodeurs]';
|
||||
Nba_ch='NombreAdresses';
|
||||
nation_ch='Nation';
|
||||
|
||||
var
|
||||
FormConfig: TFormConfig;
|
||||
@@ -575,13 +601,17 @@ var
|
||||
ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig,EnvAigDccpp,AdrBaseDetDccpp,
|
||||
ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,Adressefeuclic,NumTrameCDM,
|
||||
Algo_localisation,Verif_AdrXpressNet,ligneclicTrain,AncligneclicTrain,AntiTimeoutEthLenz,
|
||||
ligneDCC : integer;
|
||||
ligneDCC,decCourant,ligne_signal : integer;
|
||||
|
||||
ack_cdm,clicliste,config_modifie,clicproprietes,confasauver,trouve_MaxPort,
|
||||
modif_branches,ConfigPrete,trouve_section_dccpp,trouve_section_trains,
|
||||
trouveAvecVerifIconesTCO,Affiche_avert,activ : boolean;
|
||||
trouveAvecVerifIconesTCO,Affiche_avert,activ,trouve_section_dec_pers : boolean;
|
||||
fichier : text;
|
||||
|
||||
EditT : Array[1..10] of Tedit;
|
||||
ComboL1,ComboL2,ComboTS1,ComboTS2 : Array[1..10] of TComboBox;
|
||||
ShapeT : array[1..10] of TShape;
|
||||
|
||||
function config_com(s : string) : boolean;
|
||||
function envoi_CDM(s : string) : boolean;
|
||||
procedure connecte_CDM;
|
||||
@@ -634,14 +664,16 @@ begin
|
||||
place_id:=s;
|
||||
end;
|
||||
|
||||
procedure Maj_Hint_Signal(i : integer);
|
||||
procedure Maj_Hint_Signal(indexFeu : integer);
|
||||
var s : string;
|
||||
begin
|
||||
// ne pas supprimer le @= qui sert de marqueur pour identifier le feu
|
||||
s:='@='+inttostr(feux[i].Adresse)+' Decodeur='+intToSTR(feux[i].Decodeur)+' Adresse détecteur associé='+intToSTR(feux[i].Adr_det1)+
|
||||
' Adresse élement suivant='+intToSTR(feux[i].Adr_el_suiv1);
|
||||
if feux[i].Btype_suiv1=aig then s:=s+' (aig)';
|
||||
feux[i].Img.Hint:=s;
|
||||
s:='Index='+IntToSTR(IndexFeu)+' @='+inttostr(feux[IndexFeu].Adresse)+' Décodeur='+decodeur[feux[IndexFeu].Decodeur]+
|
||||
' Adresse détecteur associé='+intToSTR(feux[IndexFeu].Adr_det1)+
|
||||
' Adresse élement suivant='+intToSTR(feux[IndexFeu].Adr_el_suiv1);
|
||||
if feux[IndexFeu].Btype_suiv1=aig then s:=s+' (aig)';
|
||||
|
||||
feux[indexFeu].Img.Hint:=s;
|
||||
end;
|
||||
|
||||
// demande les services Com-IP à CDM
|
||||
@@ -981,6 +1013,7 @@ begin
|
||||
s:=s+IntToSTR(feux[i].decodeur)+',';
|
||||
|
||||
// detecteur et élement suivant (4 maxi)
|
||||
// signal non directionnel
|
||||
if (aspect<10) or (aspect>=20) then
|
||||
begin
|
||||
s:=s+'('+IntToSTR(feux[i].Adr_det1)+','+TypeEl_To_char(feux[i].Btype_suiv1)+IntToSTR(feux[i].Adr_el_suiv1);
|
||||
@@ -1059,7 +1092,7 @@ begin
|
||||
for j:=1 to NfeuxDir+1 do
|
||||
begin
|
||||
s:=s+'(';
|
||||
for k:=1 to Length(feux[i].AigDirection[j])-1 do
|
||||
for k:=1 to Length(feux[i].AigDirection[j])-1 do // boum
|
||||
begin
|
||||
s:=s+'A'+IntToSTR(feux[i].AigDirection[j][k].adresse) + feux[i].AigDirection[j][k].posaig;
|
||||
if k<Length(feux[i].AigDirection[j])-1 then s:=s+',';
|
||||
@@ -1171,7 +1204,7 @@ begin
|
||||
j:=pos(',',s);
|
||||
val(s,Feux[i].decodeur,erreur);
|
||||
|
||||
if (Feux[i].decodeur>NbDecodeur-1) then Affiche('Erreur 677 Ligne '+chaine_signal+' : erreur décodeur inconnu: '+intToSTR(Feux[i].decodeur),clred);
|
||||
if (Feux[i].decodeur>NbDecodeurdeBase+NbreDecPers-1) then Affiche('Erreur 677 Ligne '+chaine_signal+' : erreur décodeur inconnu: '+intToSTR(Feux[i].decodeur),clred);
|
||||
if j<>0 then delete(s,1,j);
|
||||
feux[i].Adr_el_suiv1:=0;feux[i].Adr_el_suiv2:=0;feux[i].Adr_el_suiv3:=0;feux[i].Adr_el_suiv4:=0;
|
||||
feux[i].Btype_Suiv1:=rien;feux[i].Btype_Suiv2:=rien;feux[i].Btype_Suiv3:=rien;feux[i].Btype_Suiv4:=rien;
|
||||
@@ -1516,7 +1549,7 @@ end;
|
||||
procedure genere_config;
|
||||
var s: string;
|
||||
fichierN : text;
|
||||
i : integer;
|
||||
i,j,n : integer;
|
||||
begin
|
||||
assign(fichierN,NomConfig);
|
||||
rewrite(fichierN);
|
||||
@@ -1658,6 +1691,30 @@ begin
|
||||
end;
|
||||
writeln(fichierN,'0');
|
||||
|
||||
writeln(fichierN,'/------------');
|
||||
|
||||
// décodeurs de signaux personnalisés (sauver avant les signaux pour avoir la liste des décodeurs personnalisés
|
||||
writeln(fichierN,section_DecPers_ch);
|
||||
for i:=1 to NbreDecPers do
|
||||
begin
|
||||
writeln(fichierN,decodeur_pers[i].nom);
|
||||
n:=decodeur_pers[i].NbreAdr;
|
||||
s:='NombreAdresses='+intToSTR(n);
|
||||
writeln(fichierN,s);
|
||||
n:=decodeur_pers[i].nation;
|
||||
s:='Nation='+intToSTR(n);
|
||||
writeln(fichierN,s);
|
||||
|
||||
for j:=1 to decodeur_pers[i].NbreAdr do
|
||||
begin
|
||||
s:=intToSTR(decodeur_pers[i].desc[j].etat1)+','+intToSTR(decodeur_pers[i].desc[j].etat2)+','+
|
||||
intToSTR(decodeur_pers[i].desc[j].offsetAdresse)+','+intToSTR(decodeur_pers[i].desc[j].sortie1)+','+
|
||||
intToSTR(decodeur_pers[i].desc[j].sortie2);
|
||||
writeln(fichierN,s);
|
||||
end;
|
||||
end;
|
||||
writeln(fichierN,'0');
|
||||
|
||||
writeln(fichierN,'/------------');
|
||||
writeln(fichierN,section_sig_ch);
|
||||
// feux
|
||||
@@ -1727,6 +1784,9 @@ begin
|
||||
end;
|
||||
writeln(fichierN,'0');
|
||||
|
||||
|
||||
|
||||
|
||||
closefile(fichierN);
|
||||
|
||||
end;
|
||||
@@ -2351,6 +2411,73 @@ begin
|
||||
until (sOrigine='0');
|
||||
end;
|
||||
|
||||
// compile les décodeurs personnalisés
|
||||
procedure compile_dec_pers;
|
||||
var nv,i,j,k,l,adr : integer;
|
||||
begin
|
||||
Nligne:=1;
|
||||
nv:=0;
|
||||
repeat
|
||||
s:=lit_ligne;
|
||||
inc(Nligne);
|
||||
if s<>'0' then
|
||||
begin
|
||||
if NbreDecPers<NbreMaxiDecPers then
|
||||
begin
|
||||
inc(NbreDecPers);
|
||||
decodeur_pers[NbreDecPers].nom:=sOrigine;
|
||||
decodeur[NbDecodeurdeBase+NbreDecPers-1]:=sOrigine;
|
||||
// nombre d'adresses
|
||||
s:=lit_ligne;
|
||||
k:=pos(uppercase(nba_ch)+'=',s);
|
||||
if k=1 then
|
||||
begin
|
||||
delete(s,1,length(nba_ch)+1);
|
||||
val(s,j,erreur); // ne pas écraser j
|
||||
decodeur_pers[NbreDecPers].NbreAdr:=j;
|
||||
end;
|
||||
// nation
|
||||
s:=lit_ligne;
|
||||
k:=pos(uppercase(nation_ch)+'=',s);
|
||||
if k=1 then
|
||||
begin
|
||||
delete(s,1,length(nation_ch)+1);
|
||||
val(s,k,erreur);
|
||||
if (k=0) or (k>2) then k:=1;
|
||||
decodeur_pers[NbreDecPers].Nation:=k;
|
||||
end;
|
||||
|
||||
adr:=1;
|
||||
repeat
|
||||
s:=lit_ligne;
|
||||
k:=pos(',',s);
|
||||
val(s,l,erreur);
|
||||
delete(s,1,k);
|
||||
decodeur_pers[NbreDecPers].desc[adr].etat1:=l;
|
||||
k:=pos(',',s);
|
||||
val(s,l,erreur);
|
||||
delete(s,1,k);
|
||||
decodeur_pers[NbreDecPers].desc[adr].etat2:=l;
|
||||
k:=pos(',',s);
|
||||
val(s,l,erreur);
|
||||
delete(s,1,k);
|
||||
decodeur_pers[NbreDecPers].desc[adr].offsetadresse:=l;
|
||||
k:=pos(',',s);
|
||||
val(s,l,erreur);
|
||||
delete(s,1,k);
|
||||
decodeur_pers[NbreDecPers].desc[adr].sortie1:=l;
|
||||
k:=pos(',',s);
|
||||
val(s,l,erreur);
|
||||
delete(s,1,k);
|
||||
decodeur_pers[NbreDecPers].desc[adr].sortie2:=l;
|
||||
s:='';
|
||||
inc(adr);
|
||||
until (adr>j);
|
||||
end;
|
||||
end;
|
||||
until eof(fichier) or (s='0');
|
||||
end;
|
||||
|
||||
procedure compile_dccpp;
|
||||
var nv,i : integer;
|
||||
begin
|
||||
@@ -2455,6 +2582,12 @@ begin
|
||||
editadrtrain.Text:=inttostr(trains[1].adresse);
|
||||
end;
|
||||
until (sOrigine='0') or (ntrains>=Max_Trains);
|
||||
for i:=1 to ntrains do
|
||||
begin
|
||||
trains[i].x:=-999999;
|
||||
trains[i].y:=-999999;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure lit_flux;
|
||||
@@ -2951,6 +3084,15 @@ begin
|
||||
compile_trains;
|
||||
end;
|
||||
|
||||
// section dédodeurs
|
||||
sa:=uppercase(section_DecPers_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
begin
|
||||
trouve_section_dec_pers:=true;
|
||||
compile_dec_pers;
|
||||
end;
|
||||
|
||||
|
||||
// section placement
|
||||
sa:=uppercase(section_placement_ch);
|
||||
if pos(sa,s)<>0 then
|
||||
@@ -3482,6 +3624,7 @@ begin
|
||||
RadioButtonXpress.Checked:=protocole=1;
|
||||
RadioButtonDcc.Checked:=protocole=2;
|
||||
|
||||
|
||||
clicListe:=true; // empeche le traitement de l'evt text
|
||||
EditDroit_BD.Text:='';
|
||||
EditPointe_BG.Text:='';
|
||||
@@ -3532,10 +3675,23 @@ begin
|
||||
// signaux
|
||||
RichSig.clear;
|
||||
ComboBoxDec.items.Clear;
|
||||
|
||||
for i:=0 to 11 do
|
||||
begin
|
||||
ComboBoxAsp.items.add(Aspects[i]);
|
||||
end;
|
||||
// décodeurs de base
|
||||
for i:=1 to NbDecodeur do
|
||||
begin
|
||||
ComboBoxDec.items.add(decodeur[i-1]);
|
||||
end;
|
||||
// décodeurs personalisés
|
||||
for i:=1 to NbreDecPers do
|
||||
begin
|
||||
s:=decodeur_pers[i].nom;
|
||||
formconfig.ComboBoxDec.Items.add(s);
|
||||
end;
|
||||
|
||||
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
@@ -3613,14 +3769,83 @@ begin
|
||||
Lines.Add(Train_tablo(i));
|
||||
end;
|
||||
end;
|
||||
|
||||
LabelNbDecPers.caption:=intToSTR(NbreDecPers);
|
||||
//l'onglet affiché est sélectionné à l'appel de la fiche dans l'unité UnitPrinc
|
||||
clicListe:=false;
|
||||
activ:=false;
|
||||
end;
|
||||
|
||||
// met à jour le décodeur courant dans le tableau de config
|
||||
procedure maj_decodeurs;
|
||||
var nAdr,i,j,a,nation : integer;
|
||||
begin
|
||||
begin
|
||||
// si pas de décodeur courant, on rend invisible toutes les adresses
|
||||
if decCourant=0 then nAdr:=0 else
|
||||
begin
|
||||
formConfig.ComboBoxNation.itemindex:=decodeur_pers[decCourant].nation-1;
|
||||
nAdr:=decodeur_pers[decCourant].NbreAdr;
|
||||
FormConfig.EditNbreAdr.Text:=intToSTR(decodeur_pers[decCourant].NbreAdr);
|
||||
nation:=decodeur_pers[decCourant].nation;
|
||||
end;
|
||||
|
||||
for i:=1 to nAdr do
|
||||
begin
|
||||
|
||||
comboL1[i].Items.Clear;
|
||||
comboL2[i].Items.Clear;
|
||||
if nation=1 then
|
||||
begin
|
||||
for j:=0 to 20 do
|
||||
begin
|
||||
comboL1[i].Items.add(Etats[j]);
|
||||
comboL2[i].Items.add(Etats[j]);
|
||||
end;
|
||||
end
|
||||
else
|
||||
for j:=0 to 9 do
|
||||
begin
|
||||
begin
|
||||
comboL1[i].Items.add(EtatSignBelge[j]);
|
||||
comboL2[i].Items.add(EtatSignBelge[j]);
|
||||
end;
|
||||
end;
|
||||
a:=decodeur_pers[decCourant].desc[i].etat1;
|
||||
ComboL1[i].itemIndex:=a;
|
||||
ComboL1[i].Visible:=true;
|
||||
|
||||
a:=decodeur_pers[decCourant].desc[i].etat2;
|
||||
ComboL2[i].Itemindex:=a;
|
||||
ComboL2[i].Visible:=true;
|
||||
|
||||
EditT[i].Text:=intToSTR(decodeur_pers[decCourant].desc[i].offsetAdresse);
|
||||
EditT[i].Visible:=true;
|
||||
a:=decodeur_pers[decCourant].desc[i].sortie1;
|
||||
ComboTS1[i].Itemindex:=a-1;
|
||||
ComboTS1[i].Visible:=true;
|
||||
a:=decodeur_pers[decCourant].desc[i].sortie2;
|
||||
ComboTS2[i].Itemindex:=a-1;
|
||||
ComboTS2[i].Visible:=true;
|
||||
ShapeT[i].Visible:=true;
|
||||
|
||||
end;
|
||||
for i:=nADr+1 to 10 do
|
||||
begin
|
||||
ComboL1[i].Visible:=false;
|
||||
ComboL2[i].Visible:=false;
|
||||
EditT[i].Visible:=false;
|
||||
ComboTS1[i].Visible:=false;
|
||||
ComboTS2[i].Visible:=false;
|
||||
ShapeT[i].Visible:=false;
|
||||
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TFormConfig.FormCreate(Sender: TObject);
|
||||
var i,j,y : integer;
|
||||
s : string;
|
||||
begin
|
||||
if debug=1 then Affiche('Création fenêtre config',clLime);
|
||||
clicListe:=true;
|
||||
@@ -3637,6 +3862,119 @@ begin
|
||||
groupBox21.Top:=304;
|
||||
GroupBox21.Left:=8;
|
||||
if debug=1 then Affiche('Fin création fenêtre config',clLime);
|
||||
|
||||
EditNbreAdr.Text:='2';
|
||||
|
||||
// création des champs dynamiques de l'onglet décodeurs
|
||||
for i:=1 to 10 do
|
||||
begin
|
||||
y:=i*40+20;
|
||||
|
||||
// rectangle
|
||||
ShapeT[i]:=Tshape.create(FormConfig.TabSheetDecodeurs);
|
||||
with ShapeT[i] do
|
||||
begin
|
||||
name:='Ligne'+intToSTR(i);
|
||||
left:=5;width:=350; top:=y;height:=42;
|
||||
brush.Style:=bsSolid;
|
||||
brush.Color:=clBtnFace;
|
||||
pen.color:=clBlack;
|
||||
shape:=stRectangle;
|
||||
parent:=TabSheetDecodeurs;
|
||||
end;
|
||||
|
||||
ComboL1[i]:=TcomboBox.create(FormConfig.TabSheetDecodeurs);
|
||||
with ComboL1[i] do
|
||||
begin
|
||||
Name:='ComboL1'+intToSTR(i);
|
||||
text:='';
|
||||
left:=10;Top:=y;Width:=150;Height:=15;
|
||||
parent:=TabSheetDecodeurs;
|
||||
itemIndex:=-1;
|
||||
for j:=0 to 19 do items.add(etats[j]);
|
||||
onChange:=formConfig.modif_ComboL;
|
||||
Style:=csDropDownList;
|
||||
visible:=false;
|
||||
end;
|
||||
|
||||
ComboL2[i]:=Tcombobox.create(FormConfig.TabSheetDecodeurs);
|
||||
with ComboL2[i] do
|
||||
begin
|
||||
Name:='ComboL2'+intToSTR(i);
|
||||
text:='';
|
||||
left:=10;Top:=y+20;Width:=150;Height:=15;
|
||||
parent:=TabSheetDecodeurs;
|
||||
itemIndex:=-1;
|
||||
for j:=0 to 19 do items.add(etats[j]);
|
||||
onChange:=formConfig.modif_ComboL;
|
||||
Style:=csDropDownList;
|
||||
visible:=false;
|
||||
end;
|
||||
|
||||
EditT[i]:=TEdit.create(FormConfig.TabSheetDecodeurs);
|
||||
with EditT[i] do
|
||||
begin
|
||||
Name:='EditT'+intToSTR(i);
|
||||
left:=180;Top:=y+10;Width:=30;Height:=15;
|
||||
text:='';
|
||||
parent:=TabSheetDecodeurs;
|
||||
visible:=false;
|
||||
Text:=intToSTR(i-1);
|
||||
onChange:=formConfig.modif_editT;
|
||||
end;
|
||||
|
||||
ComboTS1[i]:=TComboBox.create(FormConfig.TabSheetDecodeurs);
|
||||
with ComboTS1[i] do
|
||||
begin
|
||||
Name:='ComboTS1'+intToSTR(i);
|
||||
left:=240;Top:=y;Width:=110;Height:=13;
|
||||
text:='';
|
||||
parent:=TabSheetDecodeurs;
|
||||
itemIndex:=-1;
|
||||
items.add('- 1 rouge dévié');
|
||||
items.add('+ 2 vert droit');
|
||||
if (i-1) mod 2=0 then s:='Sortie 1' else s:='Sortie 2';
|
||||
Hint:=s;
|
||||
ShowHint:=true;
|
||||
visible:=false;
|
||||
Style:=csDropDownList;
|
||||
onChange:=formConfig.modif_ComboTS;
|
||||
end;
|
||||
|
||||
ComboTS2[i]:=TComboBox.create(FormConfig.TabSheetDecodeurs);
|
||||
with ComboTS2[i] do
|
||||
begin
|
||||
Name:='ComboBoxTS2'+intToSTR(i);
|
||||
left:=240;Top:=y+20;Width:=110;Height:=13;
|
||||
text:='';
|
||||
parent:=TabSheetDecodeurs;
|
||||
itemIndex:=-1;
|
||||
items.add('- 1 rouge dévié');
|
||||
items.add('+ 2 vert droit');
|
||||
if (i-1) mod 2=0 then s:='Sortie 1' else s:='Sortie 2';
|
||||
Hint:=s;
|
||||
ShowHint:=true;
|
||||
visible:=false;
|
||||
Style:=csDropDownList;
|
||||
onChange:=formConfig.modif_ComboTS;
|
||||
end;
|
||||
|
||||
|
||||
end;
|
||||
|
||||
for i:=1 to NbreDecPers do
|
||||
begin
|
||||
s:=decodeur_pers[i].nom;
|
||||
formconfig.ComboBoxDecodeurPerso.Items.add(s);
|
||||
end;
|
||||
if NbreDecPers>0 then
|
||||
begin
|
||||
decCourant:=1;
|
||||
formconfig.ComboBoxDecodeurPerso.ItemIndex:=0;
|
||||
ComboBoxNation.ItemHeight:=decodeur_pers[decCourant].nation;
|
||||
end
|
||||
else formconfig.ComboBoxDecodeurPerso.ItemIndex:=-1;
|
||||
maj_decodeurs;
|
||||
end;
|
||||
|
||||
|
||||
@@ -4096,7 +4434,7 @@ var i,j,l,d,p,k,nc,decodeur : integer;
|
||||
s : string;
|
||||
begin
|
||||
if Affevt then affiche('Aff_champs_sig_feux('+intToSTR(index)+')',clyellow);
|
||||
if index<0 then exit;
|
||||
if index<1 then exit;
|
||||
clicListe:=true;
|
||||
i:=index;
|
||||
FormConfig.EditAdrSig.text:=InttoSTr(feux[i].adresse);
|
||||
@@ -4299,6 +4637,9 @@ begin
|
||||
MemoCarre.Perform(EM_SCROLLCARET,0,0);
|
||||
end;
|
||||
end;
|
||||
|
||||
// vérifier les incompatibilités
|
||||
|
||||
clicListe:=false;
|
||||
end;
|
||||
|
||||
@@ -5153,6 +5494,67 @@ begin
|
||||
formconfig.RichAig.Lines[ligneclicAig]:=s;
|
||||
end;
|
||||
|
||||
function verif_dec_sig(aff : boolean) : boolean;
|
||||
var Adr,i,dec,aspect,indexAspect : integer;
|
||||
begin
|
||||
result:=true; // ok
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
dec:=feux[i].decodeur;
|
||||
aspect:=feux[i].aspect;
|
||||
case aspect of
|
||||
2 : indexAspect:=0;
|
||||
3 : indexAspect:=1;
|
||||
4 : indexAspect:=2;
|
||||
5 : indexAspect:=3;
|
||||
7 : indexAspect:=4;
|
||||
9 : indexAspect:=5;
|
||||
12 : indexAspect:=6;
|
||||
13 : indexAspect:=7;
|
||||
14 : indexAspect:=8;
|
||||
15 : indexAspect:=9;
|
||||
16 : indexAspect:=10;
|
||||
20 : indexAspect:=11;
|
||||
end;
|
||||
Adr:=feux[i].adresse;
|
||||
//Affiche(IntToSTR(i)+' '+intToSTR(indexAspect)+' '+inttoSTR(dec),clred);
|
||||
case dec of
|
||||
// digital bahn
|
||||
1: if aspect=20 then begin result:=false;if aff then Affiche('Erreur 340 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// cdf
|
||||
2: if (aspect>10) and (aspect<20) then begin result:=false;if aff then Affiche('Erreur 341 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// ls dec sncf
|
||||
3 : if (aspect>10) then begin result:=false;if aff then Affiche('Erreur 342 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// LEB
|
||||
4 : if aspect>10 then begin result:=false;if aff then Affiche('Erreur 343 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// dijikeijs
|
||||
5 : if aspect>10 then begin result:=false;if aff then Affiche('Erreur 344 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// paco unisemaf
|
||||
6 : if aspect>10 then begin result:=false;if aff then Affiche('Erreur 345 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// Stéphane ravaux
|
||||
7 : if aspect>10 then begin result:=false;if aff then Affiche('Erreur 346 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// Arcomora
|
||||
8 : if aspect>10 then begin result:=false;if aff then Affiche('Erreur 347 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// LS DEC NMBS
|
||||
9 : if aspect<>20 then begin result:=false;if aff then Affiche('Erreur 348 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
// B-models
|
||||
10 : if aspect<>20 then begin result:=false;if aff then Affiche('Erreur 349 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);end;
|
||||
end;
|
||||
// personnalisé
|
||||
if (dec>=NbDecodeurdeBase) then
|
||||
begin
|
||||
// nationalité du décodeur
|
||||
if ((decodeur_pers[dec-NbDecodeurdeBase+1].nation=2) and (aspect<>20)) or
|
||||
((decodeur_pers[dec-NbDecodeurdeBase+1].nation=1) and (aspect=20)) then
|
||||
begin
|
||||
result:=false;
|
||||
if aff then Affiche('Erreur 350 : Signal '+intToSTR(Adr)+': Combinaison décodeur '+decodeur[dec]+' et aspect '+aspects[indexAspect]+' incompatibles',clred);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TFormConfig.ComboBoxDecChange(Sender: TObject);
|
||||
var s: string;
|
||||
i,decodeur : integer;
|
||||
@@ -5162,9 +5564,21 @@ begin
|
||||
|
||||
if NbreFeux<ligneclicSig+1 then exit;
|
||||
i:=ligneclicSig+1;
|
||||
if i<1 then exit;
|
||||
if i<1 then
|
||||
begin
|
||||
ComboBoxDec.ItemIndex:=-1;
|
||||
if NbreFeux=0 then s:='Crééz un signal ou ';
|
||||
s:='sélectionnez un signal dans la liste';
|
||||
LabelInfo.Caption:=s;
|
||||
exit;
|
||||
end;
|
||||
|
||||
decodeur:=ComboBoxDec.ItemIndex;
|
||||
|
||||
if decodeur>NbDecodeur+NbreDecPers then exit;
|
||||
|
||||
feux[i].decodeur:=decodeur;
|
||||
|
||||
Maj_Hint_Signal(i);
|
||||
|
||||
case decodeur of
|
||||
@@ -5187,6 +5601,8 @@ begin
|
||||
s:=encode_sig_feux(i);
|
||||
formconfig.RichSig.Lines[ligneclicSig]:=s;
|
||||
aff_champs_sig_feux(i);
|
||||
if not(verif_dec_sig(false)) then FormConfig.labelInfo.Caption:='Combinaison décodeur / aspect incompatible';
|
||||
|
||||
if affevt then Affiche('Evt ComboBox Decodeur',clOrange);
|
||||
end;
|
||||
|
||||
@@ -5202,6 +5618,7 @@ begin
|
||||
begin
|
||||
i:=Selstart;
|
||||
lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée
|
||||
ligne_signal:=lc;
|
||||
clicListeSignal(feux[lc+1].adresse);
|
||||
end;
|
||||
|
||||
@@ -5995,15 +6412,25 @@ begin
|
||||
else aspect:=i+6;
|
||||
end;
|
||||
index:=ligneClicSig+1; // index du feu
|
||||
if index<1 then exit;
|
||||
if index<1 then
|
||||
begin
|
||||
ComboBoxAsp.ItemIndex:=-1;
|
||||
if NbreFeux=0 then s:='Crééz un signal ou ';
|
||||
s:='sélectionnez un signal dans la liste';
|
||||
LabelInfo.Caption:=s;
|
||||
exit;
|
||||
end;
|
||||
if NbreFeux<index then exit;
|
||||
//Affiche('Ligne cliquée='+IntToSTR(index),clyellow);
|
||||
|
||||
feux[index].aspect:=aspect;
|
||||
|
||||
s:=encode_sig_feux(index);
|
||||
RichSig.Lines[ligneClicSig]:=s;
|
||||
aff_champs_sig_feux(index); // redessine les champs et le feu
|
||||
|
||||
if not(verif_dec_sig(false)) then labelInfo.Caption:='Combinaison décodeur / aspect incompatible';
|
||||
|
||||
// change l'image du feu dans la feuille graphique principale
|
||||
bm:=Select_dessin_feu(feux[index].aspect);
|
||||
if bm=nil then exit;
|
||||
@@ -6827,11 +7254,8 @@ begin
|
||||
Top:=(HtImg+espY+20)*((IndexFeu-1) div NbreImagePLigne); // détermine les points d'origine
|
||||
Left:=10+ (LargImg+5)*((IndexFeu-1) mod (NbreImagePLigne));
|
||||
Name:='ImageFeu'+IntToSTR(adresse);
|
||||
s:='Index='+IntToSTR(IndexFeu)+' @='+inttostr(feux[IndexFeu].Adresse)+' Décodeur='+intToSTR(feux[IndexFeu].Decodeur)+
|
||||
' Adresse détecteur associé='+intToSTR(feux[IndexFeu].Adr_det1)+
|
||||
' Adresse élement suivant='+intToSTR(feux[IndexFeu].Adr_el_suiv1);
|
||||
if feux[IndexFeu].Btype_suiv1=aig then s:=s+' (aig)';
|
||||
Hint:=s;
|
||||
Maj_Hint_Signal(indexFeu);
|
||||
|
||||
end;
|
||||
with feux[IndexFeu].Lbl do
|
||||
begin
|
||||
@@ -6980,8 +7404,8 @@ begin
|
||||
93,94,95,96,97,98,99 : nc:=4;
|
||||
end;
|
||||
end;
|
||||
if dec=7 then nc:=8; // sr
|
||||
if dec=8 then
|
||||
if dec=7 then nc:=8; // SR
|
||||
if dec=8 then // arcomora
|
||||
begin
|
||||
case x of
|
||||
3 : nc:=3;
|
||||
@@ -6990,11 +7414,12 @@ begin
|
||||
9 : nc:=5;
|
||||
end;
|
||||
end;
|
||||
if dec=9 then nc:=2;
|
||||
if dec=10 then nc:=feux[i].Na;
|
||||
if dec=9 then nc:=2; // LS-DEC-NMBS
|
||||
if dec=10 then nc:=feux[i].Na; // Bmodels
|
||||
nombre_adresses_signal:=nc;
|
||||
end;
|
||||
|
||||
|
||||
function verif_coherence : boolean;
|
||||
var AncAdr,i,j,k,l,Indexaig,adr,adr2,extr,detect,condcarre,nc,index2,SuivAdr,
|
||||
x,y,extr2,adr3,index3,det1Br,det2Br,det1index,det2index,adresse,Adresse2,dec,nc2 : integer;
|
||||
@@ -7821,6 +8246,9 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
// vérification des compatibilités des décodeurs de signaux et des aspects
|
||||
if not(verif_dec_sig(true)) then ok:=false;
|
||||
|
||||
verif_coherence:=ok;
|
||||
end;
|
||||
|
||||
@@ -10543,19 +10971,305 @@ begin
|
||||
// maj le signal dans la fenetre principale
|
||||
Feux[ligneClicSig+1].Img.picture.Bitmap:=ImageSIgnal.Picture.Bitmap; // et recopie le feu
|
||||
adr:=feux[ligneClicSig+1].adresse;
|
||||
if feux[ligneClicSig+1].contrevoie then Maj_Etat_Signal(adr,clign) else Maj_Etat_Signal(adr,clign or setRaz_F);
|
||||
if feux[ligneClicSig+1].contrevoie then Maj_Etat_Signal(adr,clignote_f or bita1_F) else Maj_Etat_Signal(adr,clignote_F);
|
||||
dessine_feu_mx(Feux[ligneClicSig+1].Img.Canvas,0,0,1,1,feux[ligneClicSig+1].adresse,1); // dessine les feux du signal
|
||||
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
// modif editT
|
||||
procedure Tformconfig.modif_editT(Sender : TObject);
|
||||
var te : tEdit;
|
||||
adr,i,erreur :integer;
|
||||
begin
|
||||
if deccourant=0 then exit;
|
||||
te:=Sender as Tedit;
|
||||
adr:=extract_int(te.name);
|
||||
val(te.Text,i,erreur);
|
||||
if erreur<>0 then
|
||||
begin
|
||||
labelInfo.caption:='Erreur adresse';
|
||||
exit;
|
||||
end;
|
||||
labelInfo.caption:='';
|
||||
decodeur_pers[deccourant].desc[adr].offsetAdresse:=i;
|
||||
end;
|
||||
|
||||
// changement combobox choix sorties 1 ou 2
|
||||
procedure Tformconfig.modif_ComboTS(Sender : TObject);
|
||||
var co : tComboBox;
|
||||
i,idx,adresse,erreur : integer;
|
||||
s : string;
|
||||
begin
|
||||
if deccourant=0 then exit;
|
||||
co:=Sender as TCombobox;
|
||||
//i:=co.itemIndex;
|
||||
i:=extract_int(co.name);
|
||||
s:=intToSTR(i);
|
||||
idx:=co.itemIndex;
|
||||
|
||||
val(s[1],i,erreur); // rang
|
||||
delete(s,1,1);
|
||||
val(s,adresse,erreur); // adresse
|
||||
|
||||
if i=1 then decodeur_pers[deccourant].desc[adresse].sortie1:=idx+1;
|
||||
if i=2 then decodeur_pers[deccourant].desc[adresse].sortie2:=idx+1;
|
||||
end;
|
||||
|
||||
// changement combobox Etats
|
||||
procedure Tformconfig.modif_ComboL(Sender : TObject);
|
||||
var co : tComboBox;
|
||||
idx,i,adresse,erreur : integer;
|
||||
s : string;
|
||||
begin
|
||||
if deccourant=0 then exit;
|
||||
co:=Sender as TCombobox;
|
||||
//i:=co.itemIndex;
|
||||
i:=extract_int(co.name);
|
||||
s:=intToSTR(i);
|
||||
idx:=co.itemIndex;
|
||||
val(s[1],i,erreur); // rang
|
||||
delete(s,1,1);
|
||||
val(s,adresse,erreur); // adresse
|
||||
|
||||
if i=1 then decodeur_pers[deccourant].desc[adresse].etat1:=idx;
|
||||
if i=2 then decodeur_pers[deccourant].desc[adresse].etat2:=idx;
|
||||
end;
|
||||
|
||||
|
||||
procedure rend_visible;
|
||||
var i,erreur,nombre : integer;
|
||||
begin
|
||||
val(formconfig.EditNbreAdr.Text,nombre,erreur);
|
||||
if (erreur<>0) or (nombre>10) then exit;
|
||||
|
||||
decCourant:=formconfig.ComboBoxDecodeurPerso.ItemIndex+1;
|
||||
if decCourant<1 then exit;
|
||||
decodeur_pers[decCourant].nbreAdr:=nombre;
|
||||
|
||||
decodeur_pers[decCourant].nom:=formconfig.ComboBoxDecodeurPerso.items[decCourant-1];
|
||||
|
||||
maj_decodeurs;
|
||||
exit;
|
||||
|
||||
for i:=1 to nombre do
|
||||
begin
|
||||
ComboTS1[i].Visible:=true;
|
||||
ComboTS2[i].Visible:=true;
|
||||
EditT[i].visible:=true;
|
||||
ComboL1[i].Visible:=true;
|
||||
ComboL2[i].Visible:=true;
|
||||
end;
|
||||
|
||||
for i:=nombre+1 to 10 do
|
||||
begin
|
||||
ComboTS1[i].Visible:=false;
|
||||
ComboTS2[i].Visible:=false;
|
||||
EditT[i].visible:=false;
|
||||
ComboL1[i].Visible:=false;
|
||||
ComboL2[i].Visible:=false;
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
// nouveau décodeur personnalisé
|
||||
procedure TFormConfig.BoutonNouveauClick(Sender: TObject);
|
||||
var s: string;
|
||||
cb : TcomboBox;
|
||||
te : Tedit;
|
||||
i,nombre,erreur,decCourant : integer;
|
||||
begin
|
||||
if NbreDecPers>=NbreMaxiDecPers then exit;
|
||||
|
||||
|
||||
inc(NbreDecPers);
|
||||
s:='Personnalisé '+intToSTR(NbreDecPers);
|
||||
decodeur_pers[NbreDecPers].nom:=s;
|
||||
decodeur_pers[NbreDecPers].Nation:=1;
|
||||
nombre:=4;
|
||||
decodeur_pers[NbreDecPers].NbreAdr:=nombre;
|
||||
formconfig.EditNbreAdr.Text:=intToSTR(nombre);
|
||||
|
||||
ComboBoxDecodeurPerso.Items.Add(s);
|
||||
ComboBoxDecodeurPerso.ItemIndex:=NbreDecPers-1;
|
||||
|
||||
decCourant:=formconfig.ComboBoxDecodeurPerso.ItemIndex+1;
|
||||
|
||||
for i:=1 to Nombre do
|
||||
begin
|
||||
editT[i].Text:=IntToSTR(i-1);
|
||||
decodeur_pers[decCourant].desc[i].offsetAdresse:=i-1;
|
||||
end;
|
||||
|
||||
rend_visible;
|
||||
// ajouter aux décodeurs personalisés
|
||||
s:=decodeur_pers[decCourant].nom;
|
||||
formconfig.ComboBoxDec.Items.add(s);
|
||||
config_modifie:=true;
|
||||
// ajouter aux décodeurs
|
||||
inc(NbDecodeur);
|
||||
decodeur[NbDecodeur]:=s;
|
||||
LabelNbDecPers.caption:=intToSTR(NbreDecPers);
|
||||
|
||||
//vérifier si le décodeur est utilisé dans les signaux pour changer son hint
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
if feux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.EditNbreAdrChange(Sender: TObject);
|
||||
var i,erreur : integer;
|
||||
begin
|
||||
val(EditNbreAdr.text,i,erreur);
|
||||
if (erreur<>0) or (i<1) or (i>10) then
|
||||
begin
|
||||
LabelInfo.Caption:='Nombre d''adresses valides de 1 à 10';
|
||||
exit;
|
||||
end;
|
||||
LabelInfo.Caption:='';
|
||||
rend_visible;
|
||||
end;
|
||||
|
||||
|
||||
procedure TFormConfig.ComboBoxDecodeurPersoChange(Sender: TObject);
|
||||
var i,nAdr,a : integer;
|
||||
s: string;
|
||||
begin
|
||||
if affevt then Affiche('Evt ComboBoxDecodeurPerso',clyellow);
|
||||
|
||||
a:=ComboBoxDecodeurPerso.ItemIndex;
|
||||
if a=-1 then
|
||||
begin
|
||||
// changement du nom
|
||||
if decCourant=0 then exit;
|
||||
s:=ComboBoxDecodeurPerso.Text;
|
||||
ComboBoxDecodeurPerso.items[decCourant-1]:=s;
|
||||
decodeur_pers[decCourant].nom:=s;
|
||||
decodeur[NbDecodeurdeBase+DecCourant-1]:=s;
|
||||
ComboBoxDec.Items[NbDecodeurdeBase+DecCourant-1]:=s;
|
||||
|
||||
//vérifier si le décodeur est utilisé dans les signaux pour changer son hint
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
if feux[i].decodeur=NbDecodeurdeBase+decCourant-1 then Maj_Hint_Signal(i);
|
||||
end;
|
||||
|
||||
exit;
|
||||
end;
|
||||
decCourant:=a+1;
|
||||
EditNbreAdr.Text:=intToSTR(decodeur_pers[decCourant].NbreAdr);
|
||||
//Affiche('Décodeur courant = '+intToSTR(decCourant),clyellow);
|
||||
maj_decodeurs;
|
||||
|
||||
end;
|
||||
|
||||
// renvoie vrai si chaine est dans le combobox 'combo' et renvoie son index
|
||||
function trouve_entree_combo(combo : Tcombobox;chaine : string;var index : integer) : boolean;
|
||||
var i,maxi : integer;
|
||||
trouve : boolean;
|
||||
begin
|
||||
i:=0;
|
||||
maxi:=combo.items.Count;
|
||||
repeat
|
||||
trouve:=combo.Items[i]=chaine;
|
||||
inc(i);
|
||||
until trouve or (i=maxi);
|
||||
result:=trouve;
|
||||
index:=i-1;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ButtonSupClick(Sender: TObject);
|
||||
var s : string;
|
||||
i,ma,deco,supp : integer;
|
||||
aff : boolean;
|
||||
begin
|
||||
// supprimer des décodeurs personalisés
|
||||
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;
|
||||
|
||||
//supprimer de la liste des décodeurs peronnalisés
|
||||
s:=decodeur_pers[decCourant].nom;
|
||||
if trouve_entree_combo(ComboBoxDec,s,i) then ComboBoxDec.Items.Delete(i)
|
||||
else exit;
|
||||
|
||||
supp:=i;
|
||||
Affiche('Suppression décodeur '+intToSTR(supp-1)+' '+s,clOrange);
|
||||
|
||||
//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 1',clred);
|
||||
|
||||
//if decCourant>0 then dec(decCourant);
|
||||
decCourant:=0;
|
||||
ComboBoxDecodeurPerso.ItemIndex:=-1;
|
||||
|
||||
inc(i);
|
||||
ma:=i;
|
||||
// et supprimer la base
|
||||
for i:=ma to NbreDecPers-1 do
|
||||
begin
|
||||
decodeur_pers[i]:=decodeur_pers[i+1];
|
||||
end;
|
||||
dec(NbreDecPers);
|
||||
if NbreDecPers=0 then ComboBoxDecodeurPerso.Text:='';
|
||||
config_modifie:=true;
|
||||
maj_decodeurs;
|
||||
|
||||
// supprimer des décodeurs
|
||||
decodeur[NbDecodeur]:='';
|
||||
dec(NbDecodeur);
|
||||
LabelNbDecPers.caption:=intToSTR(NbreDecPers);
|
||||
|
||||
// si le décodeur est attribué aux signaux, les passer en rien
|
||||
aff:=false;
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
deco:=feux[i].decodeur;
|
||||
if deco=supp then
|
||||
begin
|
||||
Affiche('Le décodeur du signal '+intToSTR(Feux[i].adresse)+' a été réaffacté à rien',clOrange);
|
||||
feux[i].decodeur:=0;
|
||||
if i=ligne_signal+1 then aff_champs_sig_feux(ligne_signal+1);
|
||||
aff:=true;
|
||||
end;
|
||||
if deco>supp then
|
||||
begin
|
||||
dec(feux[i].decodeur); // et décrémenter les autres décodeurs personnalisés de rang supérieur
|
||||
aff:=true;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
// réafficher le richedit des signaux
|
||||
if aff then
|
||||
begin
|
||||
richSig.Clear;
|
||||
for i:=1 to NbreFeux do
|
||||
begin
|
||||
s:=encode_sig_feux(i); // encode la ligne depuis le tableau feux
|
||||
if s<>'' then
|
||||
begin
|
||||
RichSig.Lines.Add(s);
|
||||
RE_ColorLine(RichSig,RichSig.lines.count-1,ClAqua);
|
||||
Feux[i].modifie:=false;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFormConfig.ComboBoxNationChange(Sender: TObject);
|
||||
var nation : integer;
|
||||
begin
|
||||
if deccourant=0 then exit;
|
||||
nation:=ComboBoxNation.itemIndex+1;
|
||||
decodeur_pers[decCourant].nation:=nation;
|
||||
maj_decodeurs;
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -20,8 +20,8 @@ object FormDebug: TFormDebug
|
||||
OnCreate = FormCreate
|
||||
OnKeyPress = FormKeyPress
|
||||
DesignSize = (
|
||||
831
|
||||
749)
|
||||
839
|
||||
757)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Label1: TLabel
|
||||
|
||||
+7
-5
@@ -50,10 +50,11 @@ object FormPilote: TFormPilote
|
||||
Caption = 'Nombre de feux '#224' allumer'
|
||||
end
|
||||
object LabelDec: TLabel
|
||||
Left = 208
|
||||
Left = 200
|
||||
Top = 192
|
||||
Width = 72
|
||||
Width = 129
|
||||
Height = 19
|
||||
Alignment = taCenter
|
||||
Caption = 'LabelDec'
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
@@ -61,6 +62,7 @@ object FormPilote: TFormPilote
|
||||
Font.Name = 'Arial'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
Layout = tlCenter
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 240
|
||||
@@ -126,7 +128,7 @@ object FormPilote: TFormPilote
|
||||
Top = 96
|
||||
Width = 161
|
||||
Height = 17
|
||||
Caption = 'S'#233'maphore clignotant'
|
||||
Caption = 'Rouge cli'
|
||||
TabOrder = 5
|
||||
OnClick = RadioRougeCliClick
|
||||
end
|
||||
@@ -239,8 +241,8 @@ object FormPilote: TFormPilote
|
||||
OnClick = CheckVerrouCarreClick
|
||||
end
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 8
|
||||
Top = 224
|
||||
Left = 120
|
||||
Top = 40
|
||||
Width = 193
|
||||
Height = 73
|
||||
Caption = 'Signalisation combin'#233'e'
|
||||
|
||||
+43
-30
@@ -72,43 +72,36 @@ type
|
||||
const
|
||||
|
||||
carre =0 ; carre_F=1;
|
||||
vert_jaune_H =0 ; vert_jaune_H_F=1; // signal belge
|
||||
|
||||
semaphore =1 ; semaphore_F=2;
|
||||
semaphore_cli =2 ; semaphore_cli_F=4;
|
||||
|
||||
vert =3 ; vert_F=8;
|
||||
vert_cli =4 ; vert_cli_F=16;
|
||||
|
||||
violet =5 ; violet_F=32;
|
||||
vert_jaune_V =5 ; vert_jaune_V_F=32;
|
||||
|
||||
blanc =6 ; blanc_F=64;
|
||||
rouge_blanc =6 ; rouge_blanc_F=64; // signal belge
|
||||
blanc_cli =7 ; blanc_cli_F=128;
|
||||
|
||||
jaune =8 ; jaune_F=256;
|
||||
deux_jaunes =8 ; deux_jaunes_F=256; // signal belge
|
||||
jaune_cli =9 ; jaune_cli_F=512;
|
||||
|
||||
ral_30 =10; ral_30_F=1024;
|
||||
chiffre =10; chiffre_F=1024;
|
||||
|
||||
ral_60 =11; ral_60_F=2048;
|
||||
chevron =11; chevron_F=2048;
|
||||
|
||||
rappel_30 =12; rappel_30_F=4096;
|
||||
clign =12 ; clign_F=4096;
|
||||
|
||||
rappel_60 =13; rappel_60_F=8192;
|
||||
|
||||
Disque_D =14; // pour décodeur LDT
|
||||
|
||||
ral_60_jaune_cli =15;ral_60_jaune_cli_F=32768; // pour décodeur LDT
|
||||
SetRaz =15;SetRaz_F=32768; // pour belge
|
||||
|
||||
aspect8 =16 ;
|
||||
|
||||
// signal belge
|
||||
// base
|
||||
vert_jaune_H =0 ; vert_jaune_H_F=1; // signal belge
|
||||
rouge =1 ; rouge_F=2;
|
||||
vertB =2 ; vertB_F=4;
|
||||
vert_jaune_V =3 ; vert_jaune_V_F=8;
|
||||
rouge_blanc =4 ; rouge_blanc_F=16; // signal belge
|
||||
deux_jaunes =5 ; deux_jaunes_F=32; // signal belge
|
||||
// combinée
|
||||
chiffre =6; chiffre_F=64;
|
||||
chevron =7; chevron_F=128;
|
||||
clignote =8; clignote_F=256;
|
||||
Bita1 =15; Bita1_F=32768; // mise à 1 de bit signal combiné pour belge
|
||||
|
||||
var
|
||||
FormPilote: TFormPilote;
|
||||
@@ -150,9 +143,26 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
// renvoie la nation du signal 0
|
||||
function nation : integer;
|
||||
var i,dec,asp : integer;
|
||||
begin
|
||||
i:=1;
|
||||
dec:=feux[0].decodeur;
|
||||
asp:=feux[0].aspect;
|
||||
if asp=20 then i:=2;
|
||||
// si décodeur personalisé
|
||||
if (dec>=NbDecodeurdeBase) and (dec<NbDecodeurdeBase+NbreDecPers) then
|
||||
begin
|
||||
if decodeur_pers[dec-NbDecodeurdeBase+1].nation=2 then i:=2;
|
||||
end;
|
||||
result:=i;
|
||||
|
||||
end;
|
||||
|
||||
procedure TFormPilote.RadioVertClick(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,vert);
|
||||
if nation=1 then Maj_Etat_Signal(0,vert) else Maj_Etat_Signal(0,vertB) ;
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
@@ -164,7 +174,7 @@ end;
|
||||
|
||||
procedure TFormPilote.RadioJauneClick(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,jaune);
|
||||
if nation=1 then Maj_Etat_Signal(0,jaune) else Maj_Etat_Signal(0,deux_jaunes);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
@@ -188,19 +198,19 @@ end;
|
||||
|
||||
procedure TFormPilote.RadioCarreClick(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,carre);
|
||||
if nation=1 then Maj_Etat_Signal(0,carre) else Maj_Etat_Signal(0,vert_jaune_H);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
procedure TFormPilote.RadioBlancClick(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,blanc);
|
||||
if nation=1 then Maj_Etat_Signal(0,blanc) else Maj_Etat_Signal(0,rouge_blanc);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
procedure TFormPilote.RadioVioletClick(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,violet);
|
||||
if nation=1 then Maj_Etat_Signal(0,violet) else Maj_Etat_Signal(0,vert_jaune_V);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
@@ -218,7 +228,7 @@ end;
|
||||
|
||||
procedure TFormPilote.RadioRalen30Click(Sender: TObject);
|
||||
begin
|
||||
Maj_Etat_Signal(0,chevron);
|
||||
Maj_Etat_Signal(0,ral_30);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
@@ -292,6 +302,7 @@ begin
|
||||
LabelDec.Caption:=decodeur[d];
|
||||
feux[0].decodeur:=d;
|
||||
feux[0].aspect:=n;
|
||||
feux[0].contrevoie:=feux[i].contrevoie;
|
||||
// signal belge
|
||||
if (n=20) then
|
||||
begin
|
||||
@@ -313,8 +324,9 @@ begin
|
||||
groupBox3.Visible:=true;
|
||||
end;
|
||||
|
||||
if n<>20 then
|
||||
if n<>20 then
|
||||
begin
|
||||
groupBox3.Visible:=false;
|
||||
Radiocarre.Caption:='Carré';
|
||||
Radioviolet.Caption:='Violet';
|
||||
RadioJauneCli.Caption:='Avertissement clignotant';
|
||||
@@ -325,6 +337,7 @@ begin
|
||||
radioJaunecli.visible:=true;
|
||||
radioRougecli.visible:=true;
|
||||
radioBlanccli.visible:=true;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
@@ -383,19 +396,19 @@ end;
|
||||
|
||||
procedure TFormPilote.CheckChiffreClick(Sender: TObject);
|
||||
begin
|
||||
if checkChiffre.Checked then Maj_Etat_Signal(0,chiffre) else Maj_Etat_Signal(0,chiffre or SetRaz_F);
|
||||
if checkChiffre.Checked then Maj_Etat_Signal_belge(0,chiffre_F or bita1_F) else Maj_Etat_Signal_belge(0,chiffre_F);
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
procedure TFormPilote.CheckChevronClick(Sender: TObject);
|
||||
begin
|
||||
if checkChevron.Checked then Maj_Etat_Signal(0,chevron) else Maj_Etat_Signal(0,chevron or setRaz_F);
|
||||
if checkChevron.Checked then Maj_Etat_Signal(0,chevron_F or bita1_F) else Maj_Etat_Signal(0,chevron_F );
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
procedure TFormPilote.CheckClignoteClick(Sender: TObject);
|
||||
begin
|
||||
if checkclignote.Checked then Maj_Etat_Signal(0,clign) else Maj_Etat_Signal(0,clign or setRaz_F);
|
||||
if checkclignote.Checked then Maj_Etat_Signal(0,clignote_F or bita1_F) else Maj_Etat_Signal(0,clignote_F );
|
||||
dessine_feu_pilote;
|
||||
end;
|
||||
|
||||
|
||||
+2
-2
@@ -2224,8 +2224,8 @@ object FormPrinc: TFormPrinc
|
||||
Top = 65528
|
||||
end
|
||||
object SaveDialog: TSaveDialog
|
||||
Left = 888
|
||||
Top = 16
|
||||
Left = 832
|
||||
Top = 65528
|
||||
end
|
||||
object PopupMenuFenRich: TPopupMenu
|
||||
Left = 208
|
||||
|
||||
+369
-162
File diff suppressed because it is too large
Load Diff
+1
-4
@@ -5215,7 +5215,7 @@ begin
|
||||
begin
|
||||
HorzScrollBar.Range:=DimX;
|
||||
HorzScrollBar.Tracking:=true;
|
||||
HorzScrollBar.Smooth:=false; // ne pas mettre true sinon figeage dans W11 si onclique sur la trackbar!!
|
||||
HorzScrollBar.Smooth:=false; // ne pas mettre true sinon figeage dans W11 si on clique sur la trackbar!!
|
||||
VertScrollBar.Range:=DimY;
|
||||
VertScrollBar.Tracking:=true;
|
||||
VertScrollBar.Smooth:=false;
|
||||
@@ -5243,9 +5243,7 @@ begin
|
||||
|
||||
r:=rect(x1,y1,x1+LargeurCell,y1+HauteurCell);
|
||||
FillRect(r);
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
//afficher les cellules sauf les signaux
|
||||
@@ -5293,7 +5291,6 @@ begin
|
||||
offsetSourisY:=-10;
|
||||
offsetSourisX:=-10;
|
||||
caption:='TCO';
|
||||
AvecGrille:=true;
|
||||
TCO_modifie:=false;
|
||||
rangUndo:=1;
|
||||
XclicCell:=1;
|
||||
|
||||
Binary file not shown.
+3
-1
@@ -170,7 +170,9 @@ version 6.1 : Am
|
||||
version 6.2 : Déplacement du curseur du TCO avec les touches curseur.
|
||||
Dessin du TCO à la souris.
|
||||
version 6.3 : Choix du graphisme du TCO en lignes brisées ou courbes.
|
||||
version 7.0 : Gestion des signaux belges (avec chevron et réduction de vitesse).
|
||||
version 6.4 : Gestion des signaux belges (avec chevron et réduction de vitesse).
|
||||
version 7.0 : Possibilité de créer des décodeurs spécifiques de signaux.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user