IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Codes sources à télécharger Delphi Discussion :

Unité WinGraph pour Delphi XE


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    Novembre 1999
    Messages
    2 838
    Détails du profil
    Informations forums :
    Inscription : Novembre 1999
    Messages : 2 838
    Points : 2 549
    Points
    2 549
    Par défaut Unité WinGraph pour Delphi XE
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Unité WinGraph pour Delphi XE

    L'unité WinGraph de Stefan Berinde, retouchée pour être compatible avec Delphi XE et versions suivantes.

    Le dossier .\original contient le paquetage original de WinGraph 1.1.

    Le dossier .\demo\chessboard contient un échiquier basé sur l'unité WinGraph.

    Nom : wingraph_chessboard.png
Affichages : 885
Taille : 15,1 Ko

    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Pour l'histoire des modifications apportées, voir cette discussion :

    https://www.developpez.net/forums/d1.../xe2-wingraph/

    Récemment, je me suis aperçu que plus aucun programme basé sur l'unité WinGraph (modifiée ou non) ne fonctionnait : j'obtenais à chaque fois une erreur 216 à l'exécution. En tâtonnant, j'ai vu que le problème venait de la partie OpenGL. Du coup j'ai supprimé cette directive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$DEFINE INIT_OPENGL}     //<- switch for OpenGL driver initialization
    Cela règle le problème mais évidemment OpenGL n'est plus utilisable (l'exemple real3d.pas ne fonctionne plus). Si quelqu'un a une idée pour une vraie réparation, je suis preneur.

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    sous quel système l'as tu essayé ?
    regarde si c'est pas l'appel au FPU (set8087 et Get8087) qui déconne pas ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    @anapurna

    Merci pour ta réponse, que je viens seulement de voir.

    C'est sous Windows : l'unité WinGraph ne fonctionne que sous Windows.

    Je n'ai aucune idée de ce qui se passe. Tout ce que je sais c'est que si j'active cette directive :

    j'obtiens, à l'exécution du programme, un message "Runtime error 216".

    Personnellement, ça ne me gêne pas trop car je n'utilise pas OpenGL mais puisque j'ai publié cette unité, j'aimerais autant qu'elle soit entièrement fonctionnelle.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut Roland

    je sais que c'est sous windows ... c'etait plus dans le sens win32 ou win64

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par anapurna Voir le message
    je sais que c'est sous windows ... c'etait plus dans le sens win32 ou win64
    Ah d'accord, je n'avais pas bien compris la question. Donc mon système d'exploitation c'est Windows 10 64-bit. Mais si j'ai bien compris Delphi compile pour Win32, n'est-ce pas ? Tu penses que ça pourrait venir de là ?

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    oui je pense que cela joue pour ton problème
    je ne sais plus ou j'ai lu que l'instruction était inopérante pour les système 64 bit

    en cherchant un peu j'ai trouvé ce genre de code pour opengl


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {$IFDEF CPU386}
      Set8087CW($133F);
    {$ENDIF}
    {$IFDEF DGL_64BIT}
      SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide,exOverflow, exUnderflow, exPrecision]);
    {$ENDIF}

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    @anapurna

    Merci pour le code. Je vais l'essayer.

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Bon, je n'ai toujours pas réussi à résoudre le problème. Peut-être que je n'ai pas su utiliser la solution proposée.

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    tu as un exemple qui ne fonctionne pas avec wingraph même basique histoire
    que je regarde un peu le problème dès que j'ai un peu de temps chez moi ...

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    tu as un exemple qui ne fonctionne pas avec wingraph même basique histoire
    que je regarde un peu le problème dès que j'ai un peu de temps chez moi ...
    Bonjour ! Merci pour ton soutien. En fait aucun exemple ne fonctionne lorsque la directive {$DEFINE INIT_OPENGL} est présente dans l'unité WinGraph : une erreur 216 se produit avant l'ouverture de la fenêtre. Maintenant, comme exemple qui utilise vraiment OpenGL, il y a le programme demo, et sa procedure OpenGLPlay.

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    bon j'ai fait des test delphi 6 et delphi XE7 starter pas de plantage avec l'opengl activé
    quelque messages d'avertissement transtypage de chaine implicite mais rien de bloquant
    mon systeme windows 10 64 bits sur processeur x64 (amd)

    ci joint mon test demo 2.zip

  13. #13
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par anapurna Voir le message
    bon j'ai fait des test delphi 6 et delphi XE7 starter pas de plantage avec l'opengl activé
    quelque messages d'avertissement transtypage de chaine implicite mais rien de bloquant
    mon systeme windows 10 64 bits sur processeur x64 (amd)
    Bonjour ! Effectivement chez moi aussi ça fonctionne (Delphi 10.2, FPC 3.0.2, Windows 10 64-bit).

    Si je comprends bien, tu n'as fait aucune modification dans le code, mis à part les directives de compilation que tu as ajoutées ? As-tu une idée de la raison pour laquelle ça fonctionne maintenant ?

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    comme tu le dis mis à part les "directives de compilation"
    j'ai un fichier defs.inc qui définit certaines des directives
    tu l’insères dans ton source avec l'instruction c'est celles-ci qui me servent pour différencier les CPU et les compilateurs

    ensuite j'utilise les directives dans le source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      {$IFDEF CPU64} // il est modifié ici a mon avis ... regarde les point bleu quand tu compile 
                                // ils doivent passer dessus 
         SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide,exOverflow, exUnderflow, exPrecision]);
      {$ELSE}
        {$IFDEF CPU386}
           Set8087CW(cw); //FPU 8087 control word is restored (it was changed by wglCreateContext)
        {$ENDIF}
      {$ENDIF CPU64}
    je ne sais pas comment tu avais utilisé les directives mais je pense que tu ne les avais pas pré-déclarées

  15. #15
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    @anapurna

    Bonjour !

    Je m'aperçois que je t'ai donné une fausse information lorsque j'ai dit qu'aucun exemple ne fonctionnait.

    En fait (à moins que je ne me trompe à nouveau) je constate que l'exemple demo fonctionne avec ou sans ta modification, et que l'exemple hello ne fonctionne pas avec ou sans ta modification.

    Je suis en train de chercher quelle différence il y a entre les deux programmes.

  16. #16
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Je ne comprends pas : je ne vois pas de différence entre les deux programmes.

    Mais j'ai quand même trouvé quelque chose. En compilant l'exemple hello avec Free Pascal (et l'option -gl), j'apprends qu'il y a une violation d'accès sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      oglWindow:=wglCreateContext(grWindow);

  17. #17
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    Salut

    Citation Envoyé par Roland Chastain Voir le message
    @anapurna

    Bonjour !

    Je m'aperçois que je t'ai donné une fausse information lorsque j'ai dit qu'aucun exemple ne fonctionnait.

    En fait (à moins que je ne me trompe à nouveau) je constate que l'exemple demo fonctionne avec ou sans ta modification, et que l'exemple hello ne fonctionne pas avec ou sans ta modification.

    Je suis en train de chercher quelle différence il y a entre les deux programmes.
    c'est bizarre moi tout fonctionne


    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
    // Hello world program
    program hello;
    {$APPTYPE GUI}
    {$I defs.inc}
    uses wingraph in '..\wingraph.pas' ;
    {$R WINGRAPH}
    var mess   : string;
        gd,gm  : smallint;
        errcode: smallint;
     
    begin
      gd:=Detect;
      InitGraph(gd,gm,'');
      errcode:=GraphResult;
      if (errcode = grOK) then
      begin
        mess:='Hello world by WinGraph';
        OutTextXY((GetMaxX-TextWidth (mess)) div 2,
                  (GetMaxY-TextHeight(mess)) div 2,mess);
        repeat until CloseGraphRequest;
        CloseGraph;
      end;
    end.
    surtout que pour le coup là il n'utilise pas opengl

  18. #18
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 089
    Points : 15 518
    Points
    15 518
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par anapurna Voir le message
    c'est bizarre moi tout fonctionne
    Bonjour ! C'est bizarre en effet. Je n'y comprends rien. Mais j'ai remarqué, en compilant la démo que tu as postée, que le compilateur ne passe pas sur la ligne où est appelée la procédure SetExceptionMask. D'ailleurs, s'il y passait, il ne pourrait pas la compiler puisque l'unité Math n'est pas déclarée.

    P.-S. Chez moi le programme suivant affiche "32".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program test;
     
    {$APPTYPE CONSOLE}
    {$I defs.inc}
     
    begin
      {$ifdef CPU64}
      WriteLn(64);
      {$endif}
      {$ifdef CPU32}
      WriteLn(32);
      {$endif}
      ReadLn;
    end.
    Pourtant mon système est bien Windows 10 64-bit (d'après la page d'accueil de CCleaner).

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 446
    Points : 5 867
    Points
    5 867
    Par défaut
    salut

    si tu ajoute cela de le defs.inc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Delphi
    {$IFDEF WIN64} //DECLARATION DELPHI
      {$DEFINE MSWINDOWS} 
      {$DEFINE CPU64}
    {$ENDIF}
    je ne peut pas le tester ... pas de Delphi x.. disponible dans la journée

    ici tu trouvera tout les déclaration prédéfini en Delphi

Discussions similaires

  1. [Free Pascal] Unité WinGraph : utilisation de variables pour les couleurs
    Par Roland Chastain dans le forum Free Pascal
    Réponses: 4
    Dernier message: 05/05/2013, 23h27
  2. Fonctions de l'unité Crt pour Delphi XE2
    Par Roland Chastain dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 13/12/2012, 01h45
  3. WinGraph : Unité graphique pour Free Pascal et Delphi
    Par forum dans le forum Outils à télécharger
    Réponses: 7
    Dernier message: 08/07/2012, 18h35
  4. Problème unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2004, 18h13
  5. [Kylix] CLX pour Delphi 6 ?
    Par amelie gaya dans le forum EDI
    Réponses: 2
    Dernier message: 24/05/2002, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo