1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
// Union pour la récupération des broches du port parallèle
union TSChar
{
char chr;
struct
{
unsigned char Bit0 : 1;
unsigned char Bit1 : 1;
unsigned char Bit2 : 1;
unsigned char Bit3 : 1;
unsigned char Bit4 : 1;
unsigned char Bit5 : 1;
unsigned char Bit6 : 1;
unsigned char Bit7 : 1;
};
};
// Méthode chargée de dessiner l'écran
void __fastcall TSessionForm::OnPaint(TObject *Sender)
{
// Si OpenGL est actif
if(OpenGlActif)
{
// Si l'on est en mode Attente du port ou Mesure A Vide
if(AttentePort || AVide)
{
// On défini la couleur de dessin
DefinirCouleurDessin(CouleurCible);
// On dessine la croix
Croix();
}
}
// Méthode qui permet de lancer une session
void __fastcall TSessionForm::LancerSession(void)
{
// booléen pour savoir si l'on peut lancer la partie
bool Lancement = false;
// Si le memo est affiché
if(Memo->Visible == true)
{
// On le rend invisible
Memo->Visible = false;
// On désactive le menu de popup FermerProfil
FermerProfil->Enabled = false;
// On le vide
Memo->Clear();
// On marque que l'on peut lancer la partie
Lancement = true;
}
// Sinon
else
{
// Si la sélection du fichier XMl de profil à réussit
if(SelectionnerProfil())
{
// Si le Fichier XML est correct
if(ChargerProfilXML())
{
// On marque que l'on peut lancer la partie
Lancement = true;
}
}
}
// Si le booléen de lancement est à vrai
if(Lancement)
{
// On prépare le profil
PreparerProfil();
// On cache le curseur de la souris
Screen->Cursor = crNone;
// On désactive le menu de click droit
this->PopupMenu->AutoPopup = false;
// On modifie le contexte d'aide de la fenêtre de session
HelpContext = 8; // HELPCONTEXT = 8 => IDH_LANCERSESSION
if(Application->MessageBox("Utiliser la plateforme ?", "", MB_YESNO) == IDYES)
{
// On se met en attente sur le port parallèle
AttenteDuPort();
}
// Si l'on a pas arrêter pendant l'attente du port
if(!ArretPendantAttentePort)
{
// On marque que l'on démarre le premier groupe de cibles
NumGroupeCibles = 0;
// On lance la cible
DbtGroupeCibles();
}
}
}
// Méthode qui met en attente le programme
void __fastcall TSessionForm::AttenteDuPort(void)
{
TSChar donnee; // Structure permettant de récupérer les valeurs
// des broches du port parallèle
// Ouverture du port
OuvrirPort();
//ShowMessage("Le port est ouvert");
// Mettre le port en lecture
// Bit 5 du registre de base + 2 a 1
PortIO->Port [0x37A] = PortIO->Port [0x37A] | 0x20;
// On met le booléen d'attente de port à vrai
AttentePort = true;
// Si OpenGl n'est pas actif
if(!OpenGlActif)
{
// On initialise OpenGL
InitOpenGl();
}
Application->ProcessMessages();
while(AttentePort)
{
Application->ProcessMessages();
// On lit le port parallèle
donnee.chr = PortIO->Port [0x378];
// Si le bit passe à 1
if(donnee.Bit0 == 1)
{
// On arrète l'attente
AttentePort = false;
// On ferme le port
FermerPort();
}
}
} |