Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Free Pascal
Free Pascal Le compilateur Pascal multiplateforme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/10/2008, 11h41   #1
Pfeifer
Invité de passage
 
Inscription : octobre 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 4
Points : 0
Points : 0
Par défaut [Graph] Actions clavier dans la fenêtre graphique

Bonjour à tous!
Je commence à programmer en Pascal sous Windowns X_P et j'utilise FreePascal afin de compiler mon code. Je souhaite réaliser une petite application graphique dos afin de prendre en main le langage avant de ma lancer dans un projet plus conséquent.
J'ai cependant rencontré plusieurs problèmes que vous pourrez peut être m'aider à résoudre.
Voici le programme sur lequel je me suis appuyé pour faire mes essais:
Code :
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
 
Program inigraph1;
{ Program to demonstrate static graphics mode selection }
uses graph;
const
  TheLine = 'We are now in 640 x 480 x 256 colors!'+
            ' (press <Return> to continue)';
 
var
  gd, gm, lo, hi, error,tw,th: integer;
  found: boolean;
 
begin
  { We want an 8 bit mode }
  gd := D8bit;
  gm := m640x480;
  initgraph(gd,gm,'');
  { Make sure you always check graphresult! }
  error := graphResult;
  if (error <> grOk) Then
    begin
    writeln('640x480x256 is not supported!');
    halt(1)
    end;
  { We are now in 640x480x256 }
  setColor(cyan);
  rectangle(0,0,getmaxx,getmaxy);
  { Write a nice message in the center of the screen }
  setTextStyle(defaultFont,horizDir,1);
  tw:=TextWidth(TheLine);
  th:=TextHeight(TheLine);
  outTextXY((getMaxX - TW) div 2,
            (getMaxY - TH) div 2,TheLine);
  { Wait for return }
  readln;
  { Back to text mode }
  closegraph;
end.
Voici les problèmes rencontrés :
- Le programme se compile correctement et ce lance semble t'il correctement cependant il se passe 6 bonnes seconde entre l'affichage de la fenêtre de saisie texte et l'affichage de la fenêtre graphique. Est ce normal ? N'est il pas possible d'executer l'affichage plus rapidement ?
- Le code comporte l'instruction "readln" cependant lorsque la fenêtre graphique est apparue avec le message "We are now in 640 x 480 x 256 colors (press <Return> to continue)" et bien lorsque j'appuie sur Return, il ne se passe rien. Il faut que je ferme le fernêtre graphique, alors seulement dans la fenêtre de texte cela fonctionne et la touche return permet de quitter le programme.

Pourriez vous éclairer mes lanternes sur le comportement de ce code?
Je vous remercie par avance.
Pfeifer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 19h15   #2
Pfeifer
Invité de passage
 
Inscription : octobre 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 4
Points : 0
Points : 0
Après avoir visité d'autre forums, il semblerait que lors de l'ouverture d'une fenêtre graphique, celle ci devient la fenêtre active, or c'est dans la fenêtre de texte que les actions sont attendues si bien qu'en rendant le fenêtre de texte active le programme répond au instructions qui attendent une actions telle que dans mon cas le "readln".

Savez vous s'il existe une solution pour le programme réagisse aux actions dans la fenêtre graphique ?

Merci de votre aide.
Pfeifer
Pfeifer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 21h46   #3
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 511
Points : 39 372
Points : 39 372
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
Bonjour et bienvenue !

La fenêtre graphique créée au moment de l'exécution du programme est une vraie fenêtre GUI Windows.
Pour simuler le ReadLn dans la fenêtre graphique, une solution est d'utiliser l'API : la fonction GetKeyState renvoie l'état actuel d'une touche du clavier.

Il faut donc déclarer l'unité Windows dans l'en-tête :
et remplacer le ReadLn par une boucle comme celle-ci :
Code :
1
2
3
  { Wait for return }
  repeat
  until GetKeyState(VK_RETURN) <> 0;
Attention cependant : la fonction Rectangle existe également dans l'unité Windows. Pour éviter une erreur de compilation, il faut préciser qu'il s'agit de la routine de l'unité Graph :
Code :
  Graph.rectangle(0,0,getmaxx,getmaxy);
J'ai testé cette solution avec succès. Mais ce n'est pas très élégant, d'autres en trouveront peut-être de meilleures.

Bonne prog !
__________________
Règles du forum
Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
Mes tutoriels et sources Pascal
FAQ Assembleur

Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/10/2008, 16h27   #4
Pfeifer
Invité de passage
 
Inscription : octobre 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 4
Points : 0
Points : 0
Ok, merci beaucoup pour ces précisions, je vais creuser la question.

Par contre en ce qui concerne la lenteur de l'initialisation de la fenêtre graphique? Avez vous une idée?

Pfeifer
Pfeifer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2008, 21h05   #5
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 511
Points : 39 372
Points : 39 372
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
J'imagine que tu exécutes l'appli à partir de la console en plein écran ? Si oui, fais l'expérience de la démarrer depuis la console fenêtrée : le démarrage devrait être beaucoup plus rapide.

Windows met pas mal de temps pour commuter du mode texte plein écran vers le mode graphique fenêtré (et vice-versa d'ailleurs).
__________________
Règles du forum
Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
Mes tutoriels et sources Pascal
FAQ Assembleur

Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2008, 21h34   #6
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 419
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 419
Points : 3 774
Points : 3 774
Kai,
Citation:
Envoyé par Alcatîz Voir le message
J'imagine que tu exécutes l'appli à partir de la console en plein écran ? Si oui, fais l'expérience de la démarrer depuis la console fenêtrée : le démarrage devrait être beaucoup plus rapide.

Windows met pas mal de temps pour commuter du mode texte plein écran vers le mode graphique fenêtré (et vice-versa d'ailleurs).
J'allais répondre quelque chose dans le genre, en ajoutant que c'est aussi un problème de matériel, l'écran surtout, qui ne bascule pas en un clin d'œil (la carte graphique non plus, d'ailleurs).
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2012, 20h00   #7
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
Citation:
Envoyé par Pfeifer Voir le message
lorsque j'appuie sur Return, il ne se passe rien.
La documentation mise à jour (?) en décembre 2011 propose toujours le même exemple, et il ne se passe toujours rien quand on appuie sur Return.

Merci à Alcatîz pour la solution proposée.

Une autre solution qui est indiquée ici est d'utiliser l'unité WinCrt et ses fonctions ReadKey et KeyPressed, les fonctions homonymes de l'unité Crt étant indisponibles en mode graphique.
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h37.


 
 
 
 
Partenaires

Hébergement Web