Problème de compilation avec l'unité Graph (turbo pascal) [Résolu]

Signaler
-
cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
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;

end;

procedure trace(A, B, C, D, t1, t2, h: real);

var t : real;

begin

    axes(A, B, C, D);

    t := t1;

    moveto(round(L*(f(t)-A)/(B-A)), round(H*(g(t)-D)/(C-D)));

    repeat

    lineto(round(L*(f(t)-A)/(B-A)), round(H*(g(t)-D)/(C-D)));

    t := t+h;

    { h étant le pas de calcul }

    until t < t2;

end;

{ Début du corps du programme }

BEGIN

    GraphDriver := Detect;

    InitGraph( GraphDriver, GraphMode, '');

    trace(-6, 6, -6, 6, 0, 6.2831, 0.01);

END.



Compilation avec TP7, le fichier "graph.tpu" est manquant mais pourtant il est bien présent au dossier indiqué dans la ligne de commande :

Le problème avec TPW lorsque je lui fournit "graph.tpu" trouvé sur le Net :



Merci d'avance à ceux qui m'aideront.

Cordialement,
Keanjyto.

6 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
Fichier -> Nouveau -> Application Win32 ou Application VCL etc.

si tu ouvre juste le fichier .PAS ça ne marchera pas, entre autre, il te faut adapter le code.


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.
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
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);

end;






Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
bonjour,
plus simple...

TCHART

cantador