This commit is contained in:
f1iwq2
2020-05-03 21:00:41 +02:00
parent 2df0b53fce
commit bced6393eb
6 changed files with 1738 additions and 1302 deletions
BIN
View File
Binary file not shown.
+1476 -1288
View File
File diff suppressed because it is too large Load Diff
+182 -2
View File
@@ -4,7 +4,7 @@ interface
uses uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls , verif_version, jpeg, ComCtrls ; Dialogs, ExtCtrls, StdCtrls , verif_version, jpeg, ComCtrls ,StrUtils ;
type type
TFormConfig = class(TForm) TFormConfig = class(TForm)
@@ -88,10 +88,32 @@ type
Memo4: TMemo; Memo4: TMemo;
GroupBox9: TGroupBox; GroupBox9: TGroupBox;
CheckBoxRazSignaux: TCheckBox; CheckBoxRazSignaux: TCheckBox;
GroupBox11: TGroupBox;
LabelAdresse: TLabel;
GroupBox10: TGroupBox;
RadioButtonsans: TRadioButton;
RadioButton30kmh: TRadioButton;
RadioButton60kmh: TRadioButton;
EditDroit_BD: TEdit;
EditDevie_HD: TEdit;
EditPointe_BG: TEdit;
LabelLigne: TLabel;
LabelBG: TLabel;
LabelHD: TLabel;
LabelBD: TLabel;
ImageAig: TImage;
ImageAffiche: TImage;
ImageTJD: TImage;
Edit_HG: TEdit;
LabelHG: TLabel;
EditP1: TEdit;
EditP2: TEdit;
procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure ButtonAppliquerEtFermerClick(Sender: TObject);
procedure Button2Click(Sender: TObject); procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject); procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure MemoAigDblClick(Sender: TObject);
procedure MemoAigClick(Sender: TObject);
private private
{ Déclarations privées } { Déclarations privées }
public public
@@ -99,6 +121,8 @@ type
end; end;
const TitreAig='Description de l''aiguillage ';
var var
FormConfig: TFormConfig; FormConfig: TFormConfig;
AdresseIPCDM,AdresseIP,PortCom,recuCDM : string; AdresseIPCDM,AdresseIP,PortCom,recuCDM : string;
@@ -108,6 +132,7 @@ function config_com(s : string) : boolean;
function envoi_CDM(s : string) : boolean; function envoi_CDM(s : string) : boolean;
procedure connecte_CDM; procedure connecte_CDM;
function place_id(s : string) : string; function place_id(s : string) : string;
procedure decodeAig(s : string;var adr : integer;var B : char;var bis : boolean);
implementation implementation
@@ -502,7 +527,7 @@ begin
// contrôle adresse IP interface // contrôle adresse IP interface
s:=EditIPLenz.text; s:=EditIPLenz.text;
if not(IpOk(s)) then begin labelInfo.Caption:='Adresse IP Lenz incorrecte';exit;end; if not(IpOk(s)) and (s<>'0') then begin labelInfo.Caption:='Adresse IP Lenz incorrecte';exit;end;
changeInterface:=s<>AdresseIP; changeInterface:=s<>AdresseIP;
AdresseIP:=s; AdresseIP:=s;
@@ -609,6 +634,19 @@ end;
procedure TFormConfig.FormActivate(Sender: TObject); procedure TFormConfig.FormActivate(Sender: TObject);
var i : integer; var i : integer;
begin begin
Edit_HG.Visible:=false;
labelHG.Visible:=false;
EditP1.Visible:=false;
EditP2.Visible:=false;
Edit_HG.ReadOnly:=true;
EditP1.ReadOnly:=true;
EditP2.ReadOnly:=true;
EditPointe_BG.ReadOnly:=true;
EditDevie_HD.ReadOnly:=true;
EditDroit_BD.ReadOnly:=true;
EditAdrIPCDM.text:=adresseIPCDM; EditAdrIPCDM.text:=adresseIPCDM;
EditPortCDM.Text:=IntToSTR(portCDM); EditPortCDM.Text:=IntToSTR(portCDM);
EditIPLenz.text:=AdresseIP; EditIPLenz.text:=AdresseIP;
@@ -651,6 +689,11 @@ begin
CheckBoxServAct.checked:=Srvc_Act; CheckBoxServAct.checked:=Srvc_Act;
CheckServPosTrains.checked:=Srvc_PosTrain; CheckServPosTrains.checked:=Srvc_PosTrain;
CheckBoxRazSignaux.checked:=Raz_Acc_signaux; CheckBoxRazSignaux.checked:=Raz_Acc_signaux;
EditDroit_BD.Text:='';
EditPointe_BG.Text:='';
EditDevie_HD.Text:='';
end; end;
@@ -672,10 +715,147 @@ begin
end; end;
procedure decodeAig(s : string;var adr : integer;var B : char;var bis : boolean);
var erreur,i : integer;
begin
if (s[1]='P') or (s[1]='S') or (s[1]='D') then delete(s,1,1);
// supprimer le champ suivant éventuel
i:=pos(',',s);
if i<>0 then delete(s,i,length(s)-i+1);
val(s,adr,erreur);
bis:=pos(s,'B')<>0;
B:=#0;
i:=pos('S',s);if i<>0 then B:='S';
i:=pos('P',s);if i<>0 then B:='P';
i:=pos('D',s);if i<>0 then B:='D';
end;
procedure Aff_champs_aig;
var Adresse,Adr2,traite,erreur,ligne,i,j,Nboucle,selpos : integer;
bis,tjd : boolean;
s,ss : string;
B : char;
begin
with formConfig.MemoAig do
begin
ligne:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée
s:=Uppercase(Lines[ligne]);
SelStart:=Perform(EM_LINEINDEX,Ligne,0); // début de la sélection
SelLength:=Length(s) ; // fin de la sélection
SetFocus;
end;
Val(s,Adresse,erreur);
formconfig.LabelAdresse.Caption:=TitreAig+InttoSTr(Adresse);
with formconfig do
begin
LabelLigne.caption:=s;
ImageAffiche.Picture.Bitmap.TransparentMode:=tmAuto;
ImageAffiche.Picture.Bitmap.TransparentColor:=clblue;
ImageAffiche.Transparent:=true;
if pos('TJD',s)<>0 then
begin
ImageAffiche.Picture.BitMap:=Imagetjd.Picture.Bitmap;
Edit_HG.Visible:=true;
tjd:=true;
labelHG.Visible:=true;
EditP1.Visible:=true;
EditP2.Visible:=true;
EditPointe_BG.Text:=intToSTR(aiguillage[adresse].ADevie)+aiguillage[adresse].ADevieB;
Edit_HG.Text:=intToSTR(aiguillage[adresse].ADroit)+aiguillage[adresse].ADroitB;
Adr2:=aiguillage[adresse].Apointe;
EditDevie_HD.Text:=intToSTR(aiguillage[adr2].ADevie)+aiguillage[adr2].ADevieB;
EditDroit_BD.Text:=intToSTR(aiguillage[adr2].ADroit)+aiguillage[adr2].ADroitB;
EditP1.Text:=intToSTR(aiguillage[adresse].APointe);
EditP2.Text:=intToSTR(aiguillage[adr2].APointe);
end
else
begin
ImageAffiche.Picture.BitMap:=Imageaig.Picture.Bitmap;
Edit_HG.Visible:=false;
labelHG.Visible:=false;
EditP1.Visible:=false;
EditP2.Visible:=false;
tjd:=false;
end;
end;
// affiche(s,clOrange);
i:=pos(',',s);Delete(s,1,i);
traite:=0;nBoucle:=0;
if not(tjd) then
repeat
if s<>'' then
if s[1]='P' then
begin
decodeAig(s,adresse,B,bis);
ss:=intToSTR(Adresse);
if bis then ss:=ss+'B';
formconfig.EditPointe_BG.Text:=ss+B;
i:=pos(',',s);if i=0 then i:=length(s)+1;
Delete(s,1,i);
inc(traite);
end;
if s<>'' then
if s[1]='S' then
begin
decodeAig(s,adresse,B,bis);
ss:=intToSTR(Adresse);
if bis then ss:=ss+'B';
formconfig.EditDevie_HD.Text:=ss+B;
i:=pos(',',s);if i=0 then i:=length(s)+1;
Delete(s,1,i);
inc(traite);
end;
if s<>'' then
if s[1]='D' then
begin
decodeAig(s,adresse,B,bis);
ss:=intToSTR(Adresse);
if bis then ss:=ss+'B';
formconfig.EditDroit_BD.Text:=ss+B;
i:=pos(',',s);if i=0 then i:=length(s)+1;
Delete(s,1,i);
inc(traite);
end;
inc(nBoucle);
until (traite=3) or (nboucle=3);
if s='' then
with formconfig do
begin
RadioButtonsans.Checked:=true;
RadioButton30kmh.Checked:=false;
RadioButton60kmh.Checked:=false;
end;
if s='30' then
with formconfig do
begin
RadioButtonsans.Checked:=false;
RadioButton30kmh.Checked:=true;
RadioButton60kmh.Checked:=false;
end;
if s='60' then
with formconfig do
begin
RadioButtonsans.Checked:=false;
RadioButton30kmh.Checked:=false;
RadioButton60kmh.Checked:=true;
end;
end;
procedure TFormConfig.MemoAigDblClick(Sender: TObject);
begin
Aff_champs_aig;
end;
procedure TFormConfig.MemoAigClick(Sender: TObject);
begin
Aff_champs_aig
end;
end. end.
BIN
View File
Binary file not shown.
+77 -12
View File
@@ -3364,7 +3364,7 @@ end;
procedure lit_config; procedure lit_config;
var s,sa,chaine,SOrigine: string; var s,sa,chaine,SOrigine: string;
c,paig : char; c,paig : char;
tec,bistec,tjd,tjs,s2,trouve,triple,debugConfig,multiple,fini,finifeux : boolean; tec,bistec,tjd,tjs,s2,trouve,triple,debugConfig,multiple,fini,finifeux,bisBool : boolean;
bd,virgule,i_detect,i,erreur,aig,detect,offset,index, adresse,j,position,temporisation,invers,indexPointe,indexDevie,indexDroit, bd,virgule,i_detect,i,erreur,aig,detect,offset,index, adresse,j,position,temporisation,invers,indexPointe,indexDevie,indexDroit,
ComptEl,Compt_IT,Num_Element,k,modele,aig2,adr,erreur2,l,t,bis,Nligne : integer; ComptEl,Compt_IT,Num_Element,k,modele,aig2,adr,erreur2,l,t,bis,Nligne : integer;
function lit_ligne : string ; function lit_ligne : string ;
@@ -3605,6 +3605,39 @@ begin
begin begin
if debugconfig then Affiche('Section P - enregistrement='+enregistrement,clYellow); if debugconfig then Affiche('Section P - enregistrement='+enregistrement,clYellow);
ComptEl:=ComptEl+1; ComptEl:=ComptEl+1;
decodeAig(enregistrement,detect,c,bisBool);
if c='' then c:='Z';
if (bis=1) and (bisBool=false) then
begin
aiguillageB[aig].ApointeBis:=0;
aiguillageB[aig].Apointe:=detect;
aiguillageB[aig].ApointeB:=c;
end;
if (bis=0) and (bisBool=true) then
begin
aiguillage[aig].ApointeBis:=1;
aiguillage[aig].Apointe:=detect;
aiguillage[aig].ApointeB:=c;
end;
if (bis=0) and (bisBool=false) then
begin
aiguillage[aig].ApointeBis:=0;
aiguillage[aig].Apointe:=detect;
aiguillage[aig].ApointeB:=c;
end;
if (bis=1) and (bisBool=true) then
begin
aiguillageB[aig].ApointeBis:=1;
aiguillageB[aig].Apointe:=detect;
aiguillageB[aig].ApointeB:=c;
end;
virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1;
enregistrement:=copy(s,1,virgule-1);
delete(s,1,virgule);
{
delete(enregistrement,1,1); // supprime le P delete(enregistrement,1,1); // supprime le P
detect:=0; detect:=0;
Val(enregistrement,detect,erreur); Val(enregistrement,detect,erreur);
@@ -3627,13 +3660,44 @@ begin
virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1;
enregistrement:=copy(s,1,virgule-1); enregistrement:=copy(s,1,virgule-1);
delete(s,1,virgule); delete(s,1,virgule);
end; }
end;
if (length(enregistrement)<>0) then // section droite if (length(enregistrement)<>0) then // section droite
if (enregistrement[1]='D') then if (enregistrement[1]='D') then
begin begin
if debugconfig then Affiche('Section D - enregistrement='+enregistrement,clYellow); if debugconfig then Affiche('Section D - enregistrement='+enregistrement,clYellow);
ComptEl:=ComptEl+1; ComptEl:=ComptEl+1;
decodeAig(enregistrement,detect,c,bisBool);
if c='' then c:='Z';
if (bis=1) and (bisBool=false) then
begin
aiguillageB[aig].AdroitBis:=0;
aiguillageB[aig].Adroit:=detect;
aiguillageB[aig].AdroitB:=c;
end;
if (bis=0) and (bisBool=true) then
begin
aiguillage[aig].AdroitBis:=1;
aiguillage[aig].Adroit:=detect;
aiguillage[aig].AdroitB:=c;
end;
if (bis=0) and (bisBool=false) then
begin
aiguillage[aig].AdroitBis:=0;
aiguillage[aig].Adroit:=detect;
aiguillage[aig].AdroitB:=c;
end;
if (bis=1) and (bisBool=true) then
begin
aiguillageB[aig].AdroitBis:=1;
aiguillageB[aig].Adroit:=detect;
aiguillageB[aig].AdroitB:=c;
end;
virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1;
enregistrement:=copy(s,1,virgule-1);
delete(s,1,virgule);
{
delete(enregistrement,1,1); // supprime le P delete(enregistrement,1,1); // supprime le P
Val(enregistrement,detect,erreur); Val(enregistrement,detect,erreur);
if erreur<>0 then delete(enregistrement,1,erreur-1); if erreur<>0 then delete(enregistrement,1,erreur-1);
@@ -3660,7 +3724,7 @@ begin
end; end;
virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1; virgule:=pos(',',s);if virgule=0 then virgule:=length(s)+1;
enregistrement:=copy(s,1,virgule-1); enregistrement:=copy(s,1,virgule-1);
delete(s,1,virgule); delete(s,1,virgule);}
end; end;
if (length(enregistrement)<>0) then if (length(enregistrement)<>0) then
@@ -6696,13 +6760,6 @@ procedure SendKey(Wnd,VK : Cardinal; Ctrl,Alt,Shift : Boolean);
var var
MC,MA,MS : Boolean; MC,MA,MS : Boolean;
begin begin
// Met la fenetre de destination en arrière
//ShowWindow(Wnd,SW_SHOW);
//SetForegroundWindow(Wnd);
//if VK=ord('\') then Vk:=58; // *
// Etats des touches spéciales // Etats des touches spéciales
MC:=Hi(GetAsyncKeyState(VK_CONTROL))>127; MC:=Hi(GetAsyncKeyState(VK_CONTROL))>127;
MA:=Hi(GetAsyncKeyState(VK_MENU))>127; MA:=Hi(GetAsyncKeyState(VK_MENU))>127;
@@ -6720,7 +6777,7 @@ begin
// keybd_event(MapVirtualKeyA(VK,0),0,0,0); // keybd_event(MapVirtualKeyA(VK,0),0,0,0);
// keybd_event(MapVirtualKeyA(VK,0),0,KEYEVENTF_KEYUP,0); // keybd_event(MapVirtualKeyA(VK,0),0,KEYEVENTF_KEYUP,0);
// Release modifier keys if necessary // Relâchement des touches si nécessaire
if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(Ctrl)*KEYEVENTF_KEYUP,0); if Ctrl<>MC then keybd_event(VK_CONTROL,0,Byte(Ctrl)*KEYEVENTF_KEYUP,0);
if Alt<>MA then keybd_event(VK_MENU,0,Byte(Alt)*KEYEVENTF_KEYUP,0); if Alt<>MA then keybd_event(VK_MENU,0,Byte(Alt)*KEYEVENTF_KEYUP,0);
if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(Shift)*KEYEVENTF_KEYUP,0); if Shift<>MS then keybd_event(VK_SHIFT,0,Byte(Shift)*KEYEVENTF_KEYUP,0);
@@ -6780,10 +6837,18 @@ begin
Pchar('-f '+lay), // paramètre Pchar('-f '+lay), // paramètre
PChar('C:\Program Files (x86)\CDM-Rail\') // répertoire PChar('C:\Program Files (x86)\CDM-Rail\') // répertoire
,SW_SHOWNORMAL)<=32 then ,SW_SHOWNORMAL)<=32 then
begin
// si çà marche pas essayer depuis l'autre répertoire
if ShellExecute(Formprinc.Handle,
'open',PChar('C:\Program Files\CDM-Rail\cdr.exe'),
Pchar('-f '+lay), // paramètre
PChar('C:\Program Files\CDM-Rail\') // répertoire
,SW_SHOWNORMAL)<=32 then
begin begin
ShowMessage(SysErrorMessage(GetLastError)); ShowMessage('répertoire CDM rail introuvable');
Lance_CDM:=false;exit; Lance_CDM:=false;exit;
end end
end
else else
begin begin
+3
View File
@@ -21,4 +21,7 @@ Version 1.5 : Nouvel algorithme de suivi des trains - Gestion des feux provenan
Version 1.6 : Implémentation du TCO. Ouverture de CDM rail au démarrage avec LAY à la demande Version 1.6 : Implémentation du TCO. Ouverture de CDM rail au démarrage avec LAY à la demande
Version 1.7 : Sauvegarde de la configuration dans les fichier client_gl.cfg et config.cfg si modification des paramètres depuis le menu de configuration. Version 1.7 : Sauvegarde de la configuration dans les fichier client_gl.cfg et config.cfg si modification des paramètres depuis le menu de configuration.
Feu violet disponible sur signaux à 5, 7 et 9 feux. Feu violet disponible sur signaux à 5, 7 et 9 feux.
version 1.71 : correction d'un bug de la v1.7 sur le protocole COM/USB direct à l'interface
version 1.72 : affichage message si configuration erronnée dans la fenêtre de configuration - Démarrage de CDM assuré pour les répertoires
Program Files et Program Files (x86)