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

Utilisateur anonyme - 1 juin 2009 à 15:04 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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;

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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 1 juin 2009 à 21:23
3
Merci
Hey le cromagnon! faut lacher ton silex, les briquets ça existe!

http://www.commentcamarche.net/telecharger/telecharger-104-delphi-6-edition-personnelle
http://www.brothersoft.com/delphi-download-76437.html

Turbo Delphi 2006 Explorer : http://downloads.embarcadero.com/free/delphi

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 3 juin 2009 à 00:02
3
Merci
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 f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de f0xi
Utilisateur anonyme - 2 juin 2009 à 13:58
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 3 juin 2009 à 08:45
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 3 juin 2009 à 23:26
0
Merci
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;






Commenter la réponse de f0xi
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 4 juin 2009 à 10:14
0
Merci
bonjour,
plus simple...

TCHART

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.