Utilisateur anonyme
-
1 juin 2009 à 15:04
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
4 juin 2009 à 10:14
Bonjour,
je m'excuse d'avance, n'ayant pas trouvé de section dédiée au Turbo Pascal, j'ai déposé dans une section généraliste pour le Delphi.
Voici mon problème : j'ai un programme impossible à compiler (après 3h20 d'essais divers et de recherches sur le Net pour une solution), le problème vient de l'unité "Graph.tpu", qui contiendrait une erreur (j'ai alors essayé de la re-compilé à partir de "Graph.pas", mais là c'est le cauchemar : il faut "Windows.pas" qui lui-même nécessite une autre unité et ainsi de suite... => abandon). Les compilateurs utilisés sont "Turbo Pascal 7" (TP7) et "Tubo Pascal pour Windows" (TPW). La seul fois où j'ai réussi à le compiler avec TP7, il fallait utiliser "InitGraph", mais en modifiant je n'ai plus réussi à le re-compiler.
Le programme est censé afficher une épicycloïde en 2D. Voici le code-source et quelques captures pour vous aider. L'idéal serait qu'un être averti puisse compiler le programme et m'expliquer comment il a réussi. Je précise d'avance que j'ai déjà cherché avec Google et malgré mes trouvailles, rien de bien concluant pour m'aider à cette compilation.
Le code :
program courbes;
uses graph;
const L = 640;
const H = 200;
{
Définition des courbes paramétrées X=f(t) et Y=g(t)
Nous obtiendrons une épicycloïde
}
function f(t: real): real;
begin
f := -3*cos(t) - 2*cos(3*t);
end;
function g(t: real): real;
begin
g := -3*sin(t) + 2*sin(3*t);
end;
procedure axes(A, B, C, D: real);
begin
if A*B < 0 then begin moveto(round((L*A)/(A-B)), 0); lineto(round((L*A)/(A-B)), H); end;
if C*D < 0 then begin moveto(0, round((H*D)/(D-C))); lineto(L, round((H*D)/(D-C))); end;
Merci pour l'info, avec une pointe d'humour ça fait toujours plaisir :)
J'ai téléchargé Delphi 7 Edition Personnelle et j'ai enregistré le logiciel mais le bouton "Exécuter (F9)" dans le menu est grisé => impossible de compiler. Une solution ? (l'aide ne marche pas sous Vista...).
Désolé de faire le boulet en insistant ^^', mais ça doit bien faire une semaine que j'essaye de compiler ce programme.
Le programme est compilé avec succès. Merci beaucoup pour ton aide f0xi ^^
Seul bémol : la fenêtre est vide. C'est donc que tu as raison : je dois adapter le code, je vais me débrouiller à partir de maintenant ;).
Merci encore de m'avoir guidé et bonne continuation !
Cordialement,
Keanjyto.
Vous n’avez pas trouvé la réponse que vous recherchez ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 3 juin 2009 à 23:26
Tu trouvera les fonction de dessin (moveto, lineto) et d'autres choses, dans l'objet Canvas de la fiche et en utilisant l'evenement OnPaint de cette derniere.
procedure TForm1.FormCreate(Sender: TObject);
begin
// Evite que l'animation scintille a l'ecran
DoubleBuffered := true;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
// Dessine une ligne rouge en diagonale de la fiche
Pen.Color := clRed;
MoveTo(0,0);
LineTo(ClientWidth, ClientHeight);
end;
end;
alternative si les performances manques :
var
DrawBuffer : TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Evite le scintillement de l'animation
DoubleBuffered := true;
// Creation du Buffer de dessin
DrawBuffer := TBitmap.Create;
DrawBuffer.Width := ClientWidth;
DrawBuffer.Height := ClientHeight;
DrawBuffer.PixelFormat := pf32bit;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Liberation du Buffer de dessin
DrawBuffer.Free;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
// Redimensionne le buffer en fonction de la taille de la zone client
DrawBuffer.Width := ClientWidth;
DrawBuffer.Height := ClientHeight;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
// On dessine dans le Buffer.
with DrawBuffer.Canvas do
begin
// Efface l'ecran avec la couleur noire.
Brush.Color := clBlack;
FillRect(BoundsRect);
// Dessine une ligne rouge en diagonale de la fiche
Pen.Color := clRed;
MoveTo(0,0);
LineTo(ClientWidth, ClientHeight);
end;
// Dessine le buffer sur la fiche
Canvas.Draw(0, 0, DrawBuffer);