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