unit UnitPilote; // cette unité stocke l'état du signal de pilotage dans l'index 0 du tableau EtatSignalcplx interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, UnitPrinc; type TFormPilote = class(TForm) LabelTitrePilote: TLabel; ImagePilote: TImage; GroupBox1: TGroupBox; RadioVert: TRadioButton; RadioVertCli: TRadioButton; RadioJaune: TRadioButton; RadioJaunecli: TRadioButton; RadioRouge: TRadioButton; RadioRougeCli: TRadioButton; RadioCarre: TRadioButton; RadioBlanc: TRadioButton; RadioBlancCli: TRadioButton; RadioViolet: TRadioButton; GroupBox2: TGroupBox; RadioRalen30: TRadioButton; RadioRappel30: TRadioButton; RadioRalen60: TRadioButton; RadioRappel60: TRadioButton; ButtonPilote: TButton; EditNbreFeux: TEdit; LabelNbFeux: TLabel; LabelDec: TLabel; Label1: TLabel; CheckVerrouCarre: TCheckBox; procedure RadioVertClick(Sender: TObject); procedure RadioVertCliClick(Sender: TObject); procedure RadioJauneClick(Sender: TObject); procedure RadioJaunecliClick(Sender: TObject); procedure RadioRougeClick(Sender: TObject); procedure RadioRougeCliClick(Sender: TObject); procedure RadioCarreClick(Sender: TObject); procedure RadioBlancClick(Sender: TObject); procedure RadioVioletClick(Sender: TObject); procedure RadioBlancCliClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure RadioRalen30Click(Sender: TObject); procedure RadioRappel60Click(Sender: TObject); procedure RadioRalen60Click(Sender: TObject); procedure RadioRappel30Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ButtonPiloteClick(Sender: TObject); procedure EditNbreFeuxKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); procedure CheckVerrouCarreClick(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private { Déclarations privées } public { Déclarations publiques } end; // code des aspects des signaux const carre =0 ; carre_F=1; 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; blanc =6 ; blanc_F=64; blanc_cli =7 ; blanc_cli_F=128; jaune =8 ; jaune_F=256; jaune_cli =9 ; jaune_cli_F=512; ral_30 =10; ral_30_F=1024; ral_60 =11; ral_60_F=2048; rappel_30 =12; rappel_30_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=16384; // pour décodeur LDT aspect8 =16 ; var FormPilote: TFormPilote; EtatFeuPilote : word; AdrPilote : integer; procedure dessine_feu_pilote; implementation {$R *.dfm} procedure dessine_feu_pilote; var i : integer; Vcanvas : Tcanvas; begin i:=Index_feu(AdrPilote); // adresse du feu d'origine if i<>0 then //ImagePilote.Picture.Bitmap:=FormPilote.ImagePilote.picture.bitmap; EtatFeuPilote:=feux[0].EtatSignal; Vcanvas:=FormPilote.ImagePilote.picture.bitmap.Canvas; case feux[i].aspect of // feux de signalisation 2 : dessine_feu2(Vcanvas,0,0,1,1,EtatFeupilote,1); 3 : dessine_feu3(Vcanvas,0,0,1,1,EtatFeupilote,1); 4 : dessine_feu4(VCanvas,0,0,1,1,EtatFeupilote,1); 5 : dessine_feu5(VCanvas,0,0,1,1,EtatFeupilote,1); 7 : dessine_feu7(VCanvas,0,0,1,1,EtatFeupilote,1); 9 : dessine_feu9(VCanvas,0,0,1,1,EtatFeupilote,1); // indicateurs de direction 12 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,2); 13 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,3); 14 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,4); 15 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,5); 16 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,6); end; end; procedure TFormPilote.RadioVertClick(Sender: TObject); begin Maj_Etat_Signal(0,vert); dessine_feu_pilote; end; procedure TFormPilote.RadioVertCliClick(Sender: TObject); begin Maj_Etat_Signal(0,vert_cli); dessine_feu_pilote; end; procedure TFormPilote.RadioJauneClick(Sender: TObject); begin Maj_Etat_Signal(0,jaune); dessine_feu_pilote; end; procedure TFormPilote.RadioJaunecliClick(Sender: TObject); begin Maj_Etat_Signal(0,jaune_cli); dessine_feu_pilote; end; procedure TFormPilote.RadioRougeClick(Sender: TObject); begin Maj_Etat_Signal(0,semaphore); dessine_feu_pilote; end; procedure TFormPilote.RadioRougeCliClick(Sender: TObject); begin Maj_Etat_Signal(0,semaphore_cli); dessine_feu_pilote; end; procedure TFormPilote.RadioCarreClick(Sender: TObject); begin Maj_Etat_Signal(0,carre); dessine_feu_pilote; end; procedure TFormPilote.RadioBlancClick(Sender: TObject); begin Maj_Etat_Signal(0,blanc); dessine_feu_pilote; end; procedure TFormPilote.RadioVioletClick(Sender: TObject); begin Maj_Etat_Signal(0,violet); dessine_feu_pilote; end; procedure TFormPilote.RadioBlancCliClick(Sender: TObject); begin Maj_Etat_Signal(0,blanc_cli); dessine_feu_pilote; end; procedure TFormPilote.FormClose(Sender: TObject; var Action: TCloseAction); begin //Affiche('close',clyellow); AdrPilote:=0; // pour désactiver le test des clignotements end; procedure TFormPilote.RadioRalen30Click(Sender: TObject); begin Maj_Etat_Signal(0,ral_30); dessine_feu_pilote; end; procedure TFormPilote.RadioRappel60Click(Sender: TObject); begin Maj_Etat_Signal(0,rappel_60); dessine_feu_pilote; end; procedure TFormPilote.RadioRalen60Click(Sender: TObject); begin Maj_Etat_Signal(0,ral_60); dessine_feu_pilote; end; procedure TFormPilote.RadioRappel30Click(Sender: TObject); begin Maj_Etat_Signal(0,rappel_30); dessine_feu_pilote; end; procedure TFormPilote.FormCreate(Sender: TObject); begin // radioVert.Checked:=false; // radioVertCli.Checked:=false; end; procedure TFormPilote.ButtonPiloteClick(Sender: TObject); var i,index,e : integer; begin index:=index_feu(AdrPilote); if feux[index].aspect>10 then begin val(EditNbreFeux.Text,i,e); feux[0].EtatSignal:=i; pilote_direction(AdrPilote,i); end; feux[index].EtatSignal:=feux[0].EtatSignal; envoi_signal(AdrPilote); end; procedure TFormPilote.EditNbreFeuxKeyPress(Sender: TObject; var Key: Char); var i,e : integer; begin if ord(Key) = VK_RETURN then begin Key := #0; // prevent beeping val(EditNbreFeux.text,i,e); if e=0 then begin if (i>=0) and (i<=6) then begin feux[0].EtatSignal:=i; dessine_feu_pilote; end; if (i<0) and (i>6) then EditNbreFeux.text:='1'; end else EditNbreFeux.text:='1'; end; end; procedure TFormPilote.FormActivate(Sender: TObject); var n,i,d : integer; begin // mise à jour du champ décodeur i:=index_feu(AdrPilote); d:=feux[i].decodeur; n:=feux[i].aspect; LabelDec.Caption:=decodeur[d]; // checkcarré if (n<4) or (n>10) then checkVerrouCarre.Visible:=false else begin checkVerrouCarre.Visible:=true; checkVerrouCarre.Checked:=feux[i].VerrouilleCarre; end; end; procedure TFormPilote.CheckVerrouCarreClick(Sender: TObject); var i : integer; begin i:=index_feu(AdrPilote); feux[i].VerrouilleCarre:=checkVerrouCarre.Checked=true; if feux[i].VerrouilleCarre then begin Maj_Etat_Signal(AdrPilote,carre); envoi_signal(Adrpilote); Maj_Etat_Signal(0,carre); dessine_feu_pilote; end; end; procedure TFormPilote.FormKeyPress(Sender: TObject; var Key: Char); begin if key=chr(27) then close; end; begin end.