Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Annexe 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Référence des procédures et des fonctions
Les premiers pas
Les fondements de WinGraph
Norme
Standard
Loi

Les premiers pas

Cette section contient des conseils de programmation et des recettes de code pour WinGraph. Si vous avez des questions, veuillez d'abord consulter cette section.

Comment compiler les unités WinGraph ?

Les fichiers sources sont situés dans le dossier \src. Ce sont 'wingraph.pas', 'wincrt.pas' et 'winmouse.pas'. Ils peuvent être compilés directement à l'aide du compilateur en ligne de commande (même après avoir déplacé les fichiers dans un autre dossier) ou à l'aide des scripts de traitement par lots fournis. Dans ce dernier cas, consultez le fichier 'compile.txt' pour plus de détails.

Comment utiliser les commutateurs du compilateur dans WinGraph ?

Dans l'unité 'wingraph.pas', il y a trois commutateurs avec lesquels vous pouvez jouer. Le commutateur 256_COLOR_NAMES définit 256 variables de nom de couleur pouvant être utilisées lors de la sélection des couleurs. Si un pilote graphique hérité est sélectionné (avec 16 couleurs ou moins), il vaut mieux laisser ce commutateur désactivé, car les couleurs ne sont pas cartographiées correctement. Le commutateur INIT_OPENGL active les dessins OpenGL dans la fenêtre graphique, sinon il peut être désactivé. Le commutateur HIDE_CONSOLE masque temporairement la fenêtre de la console parente (si le programme en a une) au moment où la fenêtre graphique est affichée.

Si le programme génère une sortie utile dans la console pendant l'exécution, laissez ce commutateur désactivé. Notez que tous les commutateurs mentionnés ci-dessus ne sont pas activés par défaut.

Comment utiliser les unités WinGraph pour mon projet ?

Vous avez ici deux options :

Les unités WinCrt et WinMouse sont facultatives (elles ajoutent le support du clavier et de la souris à WinGraph).

À propos de la philosophie de WinGraph

Votre fenêtre de programme principale peut être une console ou une interface graphique. Peu importe, puisque WinGraph crée sa propre fenêtre graphique avec un processus léger dédié pour gérer ses messages. Il gérera également tous les événements de clavier et de souris, si les unités WinCrt et WinMouse sont incluses. Tout cela ne se produit qu'après avoir appelé la routine InitGraph.

Vous devez d'abord définir les dimensions de la fenêtre et le nombre de couleurs dans la palette en jouant avec les pilotes et les modes. Après avoir défini certains attributs (couleur, police de caractères, style des lignes, remplissage,...), vous pouvez commencer à dessiner comme dans l'unité Graph de Borland Pascal. Après chaque opération graphique, vous pouvez vérifier GraphResult pour découvrir si quelque chose s'est mal passé.

Si vous essayez de porter le code hérité de Borland Pascal vers WinGraph, faites attention aux aspects suivants : les routines marquées avec le symbole (P) ou (D) peuvent se comporter différemment (vérifiez les paramètres), les routines marquées avec (N) sont manquantes et les routines Crt pour la gestion du clavier est émulée par l'unité WinCrt uniquement après InitGraph. C'est une bonne idée de porter d'abord le code pour la cible GO32v2 du compilateur Free Pascal.

Plusieurs démonstrations sont incluses pour vous adapter au style de programmation WinGraph.

Incompatibilités importantes avec l'unité Graph de Borland Pascal

Comment initialiser la fenêtre graphique ?

Le code le plus simple est :

  1. gd:=Detect;
  2. InitGraph(gd,gm,'');
  3.  { ... Mettre votre code ici ... }
  4. Repeat Until CloseGraphRequest; { Ces instructions attend que le bouton de fermeture soit cliqué }
  5. CloseGraph;

Si l'unité WinCrt est incluse, la quatrième ligne peut être remplacée par :

  1. ReadKey; { Cette fonction attend que n'importe quelle touche soit pressée }

Cependant, n'utilisez pas la routine standard ReadLn pour attendre les entrées du clavier.

Comment ouvrir une fenêtre de taille personnalisée ?

Supposons que nous voulions ouvrir une minuscule fenêtre graphique de 200 par 100. Nous avons :

  1. SetWindowSize(200,100);
  2. gd:=nopalette; gm:=mCustom;
  3. InitGraph(gd,gm,'Une fenêtre de petite taille');
  4.  { ... Mettre votre code ici ... }
  5. Repeat
  6.  Delay(10); { cette instruction donne un peu de repos au microprocesseur (nécessite l'unité WinCrt) }
  7. Until CloseGraphRequest; { Ces instructions attend que le bouton de fermeture soit cliqué }
  8. CloseGraph;

Quel est le problème avec la routine ReadLn ?

La routine ReadLn attend une entrée de la fenêtre de la console parente, étant masquée après l'appel à InitGraph. Il n'y a aucun moyen de recevoir des entrées. Cependant, si vous souhaitez compiler beaucoup de code hérité, vous pouvez redéfinir la routine ReadLn comme suit :

  1. Procedure ReadLn;Begin
  2.  Repeat Until (ReadKey=#13);
  3. End;

Vous pouvez maintenant utiliser cette routine comme prévu, mais l'unité WinCrt doit être incluse.

Comment éviter que la fenêtre de la console parent n'apparaisse ?

Dans votre programme principal, utilisez la directive de compilation suivante :

  1. {$APPTYPE GUI}

Notez que dans Delphi, c'est la valeur par défaut.

La fenêtre de la console parent est-elle utile, de toute façon ?

Parfois oui. Par exemple, dans la phase de débogage de votre programme. Si la fenêtre de console parente n'est pas inhibée, vous pouvez utiliser la routine standard WriteLn pour sortir des choses utiles pendant l'exécution dans la console.

Notez qu'en Delphi, vous devez utiliser, dans ce cas, la directive :

  1. {$APPTYPE CONSOLE}

Comment écrire du texte avec des polices de caractères personnalisées ?

Supposons que vous vouliez écrire du texte en utilisant une police de caractères spécifique, par exemple 'Verdana' avec une taille de police de caractères de 18. La routine suivante vérifie si la police est enregistrée dans le système et définit les attributs de texte en conséquence.

  1. Procedure ChangeFont;
  2. Var 
  3.  Font:SmallInt;
  4. Begin
  5.  Font:=InstallUserFont('Verdana');
  6.  If(font<0)Then Exit;
  7.  SetTextStyle(font,HorizDir,18);
  8. End;

Notez que plusieurs polices de caractères sont installées par défaut lors de l'initialisation. Voir la documentation.

Comment effectuer facilement des entrées et des sorties dans la fenêtre graphique ?

Dans l'unité WinCrt, il y a deux routines, ReadBuf et WriteBuf, faisant bien le travail. Ils émulent les routines de console de lecture et d'écriture. Vous avez un exemple ici :

  1. WriteBuf('Veuillez saisir du texte ici :');
  2. ReadBuf(t,0);
  3. WriteBuf('Vous êtes entré :'+t);

Comment ajouter le support du clavier à mon programme graphique ?

Vous devez inclure l'unité WinCrt et, dans la boucle principale du programme, appeler une routine comme celle-ci :

  1. Procedure CkeckKeyboard;
  2. Var 
  3.  c:Char;
  4. Begin
  5.  If Not(KeyPressed)Then Exit;
  6.  c:=ReadKey;
  7.  Case c of
  8.   #27:Begin { Touche Esc }
  9.    { Mettre votre code ici }
  10.   End;
  11.    { ... }
  12.   #0:Begin { Touche étendu }
  13.    c:=ReadKey;
  14.    Case c of
  15.     #75:Begin { Touche de flèche de gauche }
  16.      { Mettre votre code ici }
  17.     End;
  18.     {...}
  19.    End;
  20.   End;
  21.  End;
  22. End;

Consultez la documentation WinGraph pour la liste complète des codes de touches.

Comment ajouter le support de la souris à mon programme graphique ?

Vous devez inclure l'unité WinMouse et, dans la boucle principale du programme, appeler une routine comme celle-ci :

  1. Procedure CkeckMouse;
  2. Var 
  3.  me:MouseEventType;
  4. Begin
  5.  If Not(PollMouseEvent(me))Then Exit;
  6.  GetMouseEvent(me);
  7.  With me do Case action of
  8.   MouseActionDown:Begin { Bouton de la souris appuyé }
  9.    Case buttons of
  10.     MouseLeftButton:Begin { Bouton de gauche }
  11.      { Mettre votre code ici }
  12.     End;
  13.      {...}
  14.    End;
  15.  End;
  16.   { ... }
  17.  End;
  18. End;

Consultez la documentation WinGraph pour une description complète du type MouseEventType.

Comment charger une image BMP depuis le disque ?

Supposons que nous ayons une image BMP non compressée au format 24 bits dans le fichier 'image.bmp'. La routine suivante place cette image à l'écran, dans le coin supérieur gauche :

  1. Procedure LoadBMP;
  2. Var 
  3.  F:File; 
  4.  Bitmap:Pointer; 
  5.  Size:LongInt;
  6. Begin
  7.  {$I-} Assign(f,'image.bmp'); 
  8.  Reset(f,1); {$I+}
  9.  If(IOResult<>0)Then Exit;
  10.  Size:=FileSize(f);
  11.  GetMem(bitmap,size);
  12.  BlockRead(f,bitmap^,size);
  13.  Close(f);
  14.  PutImage(0,0,bitmap^,NormalPut);
  15.  FreeMem(bitmap);
  16. End;

Comment capturer le contenu de la fenêtre dans une image BMP sur disque ?

Pour capturer tout le contenu de la fenêtre dans le fichier 'image.bmp', utilisez la routine suivante :

  1. Procedure SaveBMP;
  2. Var 
  3.  F:File; 
  4.  Bitmap:Pointer; 
  5.  Size:LongInt;
  6. Begin
  7.  {$I-} Assign(f,'image.bmp'); 
  8.  Rewrite(f,1); {$I+}
  9.  If(IOResult<>0)Then Exit;
  10.  size:=ImageSize(0,0,GetMaxX,GetMaxY);
  11.  GetMem(bitmap,size);
  12.  GetImage(0,0,GetMaxX,GetMaxY,bitmap^);
  13.  BlockWrite(f,bitmap^,size);
  14.  Close(f);
  15.  FreeMem(bitmap);
  16. End;

Comment réaliser des animations de base ?

Celle-ci consiste en deux étapes :

Vous devez libérer les ressources d'animation à la fin en appelant FreeAnim.

Comment réaliser des animations OpenGL ?

Tout d'abord, chargez les unités d'en-tête OpenGL avec :

  1. Uses WinGraph,{$IFDEF FPC}gl,glu;{$ELSE}opengl;{$ENDIF}

et ensuite effectuer quelques initialisations :

  1. SetOpenGLMode(DirectOn);
  2.  { Mettre votre code ici pour la scène d'initialisation OpenGL }

Ensuite, il suit la boucle d'animation :

  1. Repeat
  2.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); { Efface l'écran OpenGL }
  3.   { Mettre votre code ici pour dessiner une scène OpenGL }
  4.  UpdateGraph(UpdateNow);
  5. Until CloseGraphRequest;

Veuillez consulter un manuel OpenGL pour plus de détails.

Comment obtenir des effets de palette ?

Supposons que nous voulions montrer un texte à l'écran progressivement à l'utilisateur (effet d'ombrage). Préparez l'écran à l'avance :

  1. SetColor(White);
  2. SetRGBPalette(White,1,1,1);
  3. { Mettre votre code ici pour écrire du texte }

Le texte n'est pas encore visible, car il est trop sombre (mais pas noir). Avec la routine suivante, nous obtenons le résultat :

  1. Procedure ShadingEffect;
  2. Var 
  3.  i:byte;
  4. Begin
  5.  For i:=50 to 250 do Begin
  6.   Delay(10); { Définir la temporisation ici }
  7.   SetRGBPalette(White,i,i,i);
  8.  End;
  9. End;

Notez que cela ne fonctionne que sur les pilotes basés sur une palette, tels que D8bit.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Dimanche, le 9 juillet 2023