Exemples d'utilisation de l'unité WinGraph

Présentation
Collection de petits programmes utilisant l'unité WinGraph, testés avec Free Pascal 2.6.4.

Nombre de ces programmes ont été originellement écrits pour l'unité Graph de Turbo Pascal.
Nos ressources disponibles
Téléchargement
1  0 
Téléchargé 30 fois Voir les 3 commentaires
Détails
Catégories : Free Pascal
Avatar de Roland Chastain
Rédacteur / Modérateur
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 5 juillet 2015




Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 06/07/2015 à 17:17
J'ai planché sur le sujet : "Comment convertir un code utilisant l'unité Graph (ou l'une des unités de Free Pascal qui en ont repris la syntaxe) en code utilisant BGRABitmap ?"

Eh bien, ce n'est pas évident, parce que les fonctions de l'une et de l'autre ne se correspondent pas à première vue. Pourtant je trouve l'idée intéressante.

Je vous montre une chose que je viens de faire. Vos observations seront les bienvenues.

J'ai pris un programme WinGraph (originellement écrit pour Turbo Pascal). J'ai retiré les "uses", et j'ai déclaré des fonctions homonymes aux fonctions manquantes. Ces fonctions produisent du code source. Voici le résultat à ce jour :

Code : Sélectionner tout
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
program Clowns3; 
uses BGRABitmap, BGRABitmapTypes; 
{$I utils} 
var 
  bmp: TBGRABitmap; 
  color: TBGRAPixel; 
begin 
  bmp := TBGRABitmap.Create(640, 480, LongWordToBGRA($191970)); 
  color := LongWordToBGRA($FFFFFF); 
  bmp.FillEllipseAntialias(163, 239, 100, 150, color); 
  bmp.FillEllipseAntialias(476, 239, 100, 150, color); 
  color := LongWordToBGRA($FF80FF); 
  bmp.RoundRectAntialias(143, 244, 183, 284, 20, 20, color, 2, []); 
  color := LongWordToBGRA($90EE90); 
  bmp.RoundRectAntialias(456, 244, 496, 284, 20, 20, color, 2, []); 
  color := LongWordToBGRA($ADD8E6); 
  bmp.FillEllipseAntialias(163, 299, 50, 55, color); 
  bmp.FillEllipseAntialias(163, 299, 50, 20, color); 
  bmp.FillEllipseAntialias(163, 299, 50, 54, color); 
  bmp.FillEllipseAntialias(163, 299, 50, 21, color); 
  color := LongWordToBGRA($FF0000); 
  bmp.FillEllipseAntialias(476, 299, 50, 55, color); 
  bmp.FillEllipseAntialias(476, 299, 50, 20, color); 
  bmp.FillEllipseAntialias(476, 299, 50, 21, color); 
  bmp.FillEllipseAntialias(476, 299, 50, 54, color); 
  bmp.FillEllipseAntialias(123, 239, 20, 60, color); 
  bmp.FillEllipseAntialias(123, 243, 20, 10, color); 
  color := LongWordToBGRA($FF); 
  bmp.RoundRectAntialias(113, 233, 133, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($0); 
  bmp.RoundRectAntialias(120, 240, 126, 246, 3, 3, color, 2, []); 
  color := LongWordToBGRA($FFFFFF); 
  bmp.RoundRectAntialias(113, 233, 133, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($FF0000); 
  bmp.FillEllipseAntialias(203, 239, 20, 60, color); 
  bmp.FillEllipseAntialias(203, 243, 20, 10, color); 
  color := LongWordToBGRA($FF); 
  bmp.RoundRectAntialias(193, 233, 213, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($0); 
  bmp.RoundRectAntialias(200, 240, 206, 246, 3, 3, color, 2, []); 
  color := LongWordToBGRA($FFFFFF); 
  bmp.RoundRectAntialias(193, 233, 213, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($FF0000); 
  bmp.FillEllipseAntialias(521, 239, 20, 60, color); 
  bmp.FillEllipseAntialias(521, 243, 20, 10, color); 
  color := LongWordToBGRA($FF); 
  bmp.RoundRectAntialias(511, 233, 531, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($0); 
  bmp.RoundRectAntialias(518, 240, 524, 246, 3, 3, color, 2, []); 
  color := LongWordToBGRA($FFFFFF); 
  bmp.RoundRectAntialias(511, 233, 531, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($FF0000); 
  bmp.FillEllipseAntialias(434, 239, 20, 60, color); 
  bmp.FillEllipseAntialias(434, 243, 20, 10, color); 
  color := LongWordToBGRA($FF); 
  bmp.RoundRectAntialias(424, 233, 444, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($0); 
  bmp.RoundRectAntialias(431, 240, 437, 246, 3, 3, color, 2, []); 
  color := LongWordToBGRA($FFFFFF); 
  bmp.RoundRectAntialias(424, 233, 444, 253, 10, 10, color, 2, []); 
  color := LongWordToBGRA($FF00FF); 
  bmp.RoundRectAntialias(85, 85, 115, 115, 15, 15, color, 2, []); 
  color := LongWordToBGRA($90EE90); 
  bmp.RoundRectAntialias(64, 109, 94, 139, 15, 15, color, 2, []); 
  color := LongWordToBGRA($ADD8E6); 
  bmp.RoundRectAntialias(50, 136, 80, 166, 15, 15, color, 2, []); 
  color := LongWordToBGRA($FFFF); 
  bmp.RoundRectAntialias(41, 165, 71, 195, 15, 15, color, 2, []); 
  color := LongWordToBGRA($FFFF00); 
  bmp.RoundRectAntialias(35, 193, 65, 223, 15, 15, color, 2, []); 
  bmp.FillEllipseAntialias(477, 180, 100, 50, color); 
  bmp.FillEllipseAntialias(477, 180, 100, 50, color); 
  bmp.SaveToFile('result.png'); 
  bmp.Free; 
end.
Le dessin final n'est pas très réussi, mais l'idée est là. Qu'en pensez-vous ?
Avatar de Alcatîz Alcatîz - Responsable Pascal, Delphi et Assembleur https://www.developpez.com
le 07/07/2015 à 21:57
Bonjour,

Belle collection de programmes !

Citation Envoyé par Roland Chastain  Voir le message
J'ai retiré les "uses", et j'ai déclaré des fonctions homonymes aux fonctions manquantes.

Je n'ai pas compris cette manoeuvre.
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 07/07/2015 à 22:49
Citation Envoyé par Alcatîz  Voir le message
Bonjour,

Belle collection de programmes !

Merci ! La plupart ne sont pas de moi, je les ai glanés ici et là, triés, testés et adaptés à WinGraph. Je pense mettre à jour la collection de temps en temps, en y incluant des exemples plus avancés. J'ai fait encore quelques trouvailles cet après-midi. Connaissez-vous Nacho Cabanes ? Les exemples de ses différents tutoriels sur la programmation en Pascal sont de petits bijoux.

Citation Envoyé par Alcatîz  Voir le message
Je n'ai pas compris cette manoeuvre.

Il s'agissait de produire du code source pour Lazarus, en captant les données et les opérations du programme original. Au lieu de lire le fichier, j'ai trouvé amusant de modifier le programme pour lui faire produire le code en question.

Code : Sélectionner tout
1
2
3
4
5
6
7
var 
  gList: TStringList; 
 
procedure SetBkColor(color: longword); 
begin 
  gList.Add(Format('  bmp := TBGRABitmap.Create(%d, %d, LongWordToBGRA($%x));', [MAXX + 1, MAXY + 1, color])); 
end;
Je ne sais pas ce que vaut cette idée, mais c'était un bon exercice.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -