bonjour à tous, je veux effectuer un defilement de texte en turbo pascal mais je n'y connais presque rien en graphisme.
si vous pouviez me donner les grandes lignes, ou les procedures et fonctions dont j'ai besoin.
merci d'avance pour votre aide![]()
bonjour à tous, je veux effectuer un defilement de texte en turbo pascal mais je n'y connais presque rien en graphisme.
si vous pouviez me donner les grandes lignes, ou les procedures et fonctions dont j'ai besoin.
merci d'avance pour votre aide![]()
1 – il y a tout dans le help
2 - Regard ça peut être c’est ce que tu cherches
http://www.developpez.net/forums/sho...d.php?t=476037
http://www.developpez.net/forums/sho...d.php?t=418490
bonjour,
merci beaucoup pour ta réponse dot_net.
j'ai une autre question, comment faire pour remplir un cercle avec une couleur?
j'ai essayé avec les procedures floodfill et setfillstyle mais ça ne marche pas, peut etre que je n'ai pas su les utiliser
et encore merci.
Gia,
L'aide de TP7 donne un exemple, qui justement concerne un cercle.
Tu trouveras tous ce que tu veux dans le help
Je pense voici le code que tu es entrain de chercher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 uses Graph; var Gd, Gm: Integer; Radius: Integer; begin Gd := Detect; InitGraph(Gd, Gm, 'c:\tp\bgi\'); if GraphResult <> grOk then Halt(1); setcolor(4); SetFillStyle(1, 4); PieSlice(100, 100, 0, 360, 100); Readln; CloseGraph; end.
merci beaucoup pour votre aide
dot_net c'est exactement le code que je cherchais merci beaucoup
mais bon ça marche que pour un seul cercle.
je vous explique ce que je veux faire
je veux écrire une lettre un I par exemple avec des cercles remplis et qui bouge,
mes questions commencent à pleuvoirc'est la première fois que je travaille avec des graphes
![]()
Fao,
Le code cité est une copie de l'aide de TP !
Évite de parler de graphes alors qu'il s'agit de graphisme. Le mot graphe a une signification bien précise, totalement en dehors du domaine de l'affichage/impression de dessins.
Est-il si difficile de penser à faire la même chose pour plusieurs cercles ?
j'y ai pensé bien sur, mais quand j'effectue le scrolling j'ai pas le resultat voulu c'est tou![]()
c'est bon j'ai eu ce que je voulaismerci beaucoup pour ton aide dot_net j'ai travaillé avec la procédure que tu m'a indiqué .
maintenant ma question est : quand je travaille chaque lettre à part, est ce que je pourrais après concaténer les lettres et les afficher afin qu'elles paraissent circulaires?
thanks beaucoup![]()
Fai,
Bien sûr que tu peux.
Fais-toi un petit dessin, et regarde quelles variations de coordonnées il faudra faire.
merci beaucoup pour votre aide
j'ai commencé à faire les lettres et les faire bouger
quand je les termine si je bloque je poserais des questions, et encore merci![]()
slt à tous, j'ai rencontré un problème, j'ai fais des procedures avec les lettres a et b, et je veux rentrer une expression contenant ces deux lettres pour qu'elle m'affiche un texte defilantj'ai essayé des trucs mais ça ne marche pas
sachant que quand j'utlise pas les procedures ça marche (dans ce cas l'utilisateur ne peut pas choisir l'exprssion)
merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 program expression; uses crt,graph; var f,b,pos: integer;pilotgraphiq,modegraphiq:smallint; x: string[50]; let:shortstring; procedure lettreA (i,j:integer;color:word;var position:integer); var k,h: integer; begin setcolor(color); setfillstyle(1,color); setbkcolor(black); h:=j; for k:=1 to 7 do begin pieslice(i,j+14,0,360,3); j:=j+7; end; j:=h; pieslice(i+7,j+7,0,360,3); pieslice(i+14,j,0,360,3); pieslice(i+21,j+7,0,360,3); i:=i+28; position:=i; for k:=1 to 7 do begin pieslice (i,j+14,0,360,3); j:=j+7; end; j:=h+28; for k:=1 to 4 do begin pieslice(i,j,0,360,3); i:=i-7; end; readln; end; procedure lettreB(i,j:integer;color:word;var position:integer); var l,h,k:integer; begin setbkcolor(black); setcolor(color); setfillstyle(1,color); h:=j; l:=i; for k:=1 to 9 do begin pieslice(i,j,0,360,3); j:=j+7; end; j:=h; for k:=1 to 3 do begin i:=i+7; pieslice(i,j,0,360,3); end; i:=i+7; position:=i; for k:=1 to 3 do begin j:=j+7; pieslice(i,j,0,360,3); end; for k:=1 to 3 do begin i:=i-7; pieslice(i,j+7, 0,360,3); end; i:=l+4*7; j:=j+14; for k:=1 to 3 do begin pieslice(i,j,0,360,3); j:=j+7; end; for k:=1 to 3 do begin i:=i-7; pieslice(i, j,0,360,3); end; readln; end; begin write ('entrez votre expression'); read(x); f:=400; pilotgraphiq:=detect; initgraph(pilotgraphiq,modegraphiq,'C:\Program Files\TP\BGI\'); if graphresult=0 then begin setgraphmode(modegraphiq); for b:=1 to length(x) do; begin let:=copy(x,b,1); if let='A' then begin pos:=f; lettreA(f,400,red,f); delay(10); lettreA(pos,400,black,f); lettreA (pos-1,400,red,f); end; if let='B' then begin pos:=f; lettreB(f,400,red,f); delay(10); lettreB(pos,400,black,f); lettreB (pos-1,400,red,f); end; end; f:=f-1; readln;readln; closegraph; end; readln;readln; end.
Fait un petit dessin de ton texte défilante et poste le pour savoir ce que tu veux faire exactement
Kao,
Tu as indenté ton code, c'est bien.
Avec une indentation régulière, c'est encore mieux:
Il manque des lignes vides pour séparer les blocs logiques, des commentaires...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 program expression; uses crt, graph; var f, b, Pos : Integer; pilotgraphiq, modegraphiq : Smallint; x : string[50]; let : shortstring; procedure lettreA(i, j : Integer; Color : Word; var Position : Integer); var k, h : Integer; begin setcolor(Color); setfillstyle(1,Color); setbkcolor(black); h := j; for k := 1 to 7 do begin pieslice(i, j + 14,0,360,3); j := j + 7; end; j := h; pieslice(i + 7,j + 7,0,360,3); pieslice(i + 14,j, 0,360,3); pieslice(i + 21,j + 7,0,360,3); i := i + 28; Position := i; for k := 1 to 7 do begin pieslice(i, j + 14,0,360,3); j := j + 7; end; j := h + 28; for k := 1 to 4 do begin pieslice(i, j, 0,360,3); i := i - 7; end; Readln; end; procedure lettreB(i, j : Integer; Color : Word; var Position : Integer); var l, h, k : Integer; begin setbkcolor(black); setcolor(Color); setfillstyle(1,Color); h := j; l := i; for k := 1 to 9 do begin pieslice(i, j, 0,360,3); j := j + 7; end; j := h; for k := 1 to 3 do begin i := i + 7; pieslice(i, j, 0,360,3); end; i := i + 7; Position := i; for k := 1 to 3 do begin j := j + 7; pieslice(i, j, 0,360,3); end; for k := 1 to 3 do begin i := i - 7; pieslice(i, j + 7, 0,360,3); end; i := l + 4 * 7; j := j + 14; for k := 1 to 3 do begin pieslice(i, j, 0,360,3); j := j + 7; end; for k := 1 to 3 do begin i := i - 7; pieslice(i, j, 0,360,3); end; Readln; end; begin Write ('entrez votre expression'); Read(x); f := 400; pilotgraphiq := detect; initgraph(pilotgraphiq, modegraphiq, 'C:\Program Files\TP\BGI\'); if graphresult = 0 then begin setgraphmode(modegraphiq); for b := 1 to Length(x) do; begin let := Copy(x, b, 1); if let = 'A' then begin Pos := f; lettreA(f, 400,red, f); delay(10); lettreA(Pos, 400,black, f); lettreA(Pos - 1,400,red, f); end; if let = 'B' then begin Pos := f; lettreB(f, 400,red, f); delay(10); lettreB(Pos, 400,black, f); lettreB(Pos - 1,400,red, f); end; end; f := f - 1; Readln; Readln; closegraph; end; Readln; Readln; end.
Sinon, je ne vois aucune boucle gérant le déplacement de ta chaîne ?
ps : je pense que tu as pris une mauvaise direction en écrivant une procédure pour chaque lettre.
Il vaudrait mieux définir une structure capable de contenir les données pour une lettre, quelle que soit cette lettre, et une procédure utilisant cette structure, tenant compte de la position, couleur, rotation éventuelle, et même, pourquoi, effet miroir...
ps2 : pourquoi tous ces ReadLn doublés ?
pour les readln c'est une habitude, je vois pas pourquoi je les double d'ailleurs
je déplace ma chaine en redéssinant l'expression en noir et la dessiner dans un autre coin en rouge
et pour la procedure dont tu parles j'allais la faire une fois que ce code marche sinon je peux pas la faire
Kia,
Oui, mais moi, tout ce que je vois, c'est
Donc tu traces les lettres, tu les effaces, et tu les déplaces légèrement d'un pixel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 begin ... if graphresult = 0 then begin setgraphmode(modegraphiq); for b := 1 to Length(x) do; begin let := Copy(x, b, 1); if let = 'A' then begin Pos := f; lettreA(f, 400,red, f); delay(10); lettreA(Pos, 400,black, f); lettreA(Pos - 1,400,red, f); end; ... idem pour B f := f - 1; Readln; Readln; closegraph; end; Readln; Readln; end.
Quasiment invisible si ça va assez vite.
Et c'est tout !! pas le moindre défilement en vue en dehors de ça.
Si tu veux voir quelque chose, commence par augmenter le délai entre le premier tracé et la suite (10 ms, c'est très petit pour notre système visuel), ET fait un déplacement suffisant pour être observable facilement (10 ou 20 pixels, par exemple).
ps : quand tu fais
il est plus simple de faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part let := Copy(x, b, 1);
et par conséquent, plus simple encore d'utiliser directement x[b].
Code : Sélectionner tout - Visualiser dans une fenêtre à part let := x[b];
merci pour ton aide droggo![]()
Partager