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

Free Pascal Discussion :

Unité WinGraph : utilisation de variables pour les couleurs [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut Unité WinGraph : utilisation de variables pour les couleurs
    Bonjour !

    Pour pouvoir facilement changer les couleurs de mon application sans avoir à chercher les lignes dispersées dans le code, j'ai pensé utiliser des variables intermédiaires.

    Les couleurs prédéfinies dans l'unité WinGraph étant du type LongWord, j'ai déclaré des variables de ce type dans mon programme :

    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
     
    program Exemple;
     
    uses
      WinCrt,
      WinGraph;
     
    var
      couleur1, couleur2, couleur3: longWord;
     
    procedure OpenGraph;
    var
      gd, gm: smallInt;
    begin
      gd := noPalette;
      gm := mCustom;
      SetWindowSize(100, 100);
      InitGraph(gd, gm, 'Exemple Wingraph');
      SetBkColor({Yellow}couleur1);
      ClearViewPort;
    end;
     
    begin
      couleur1 := Yellow;
      couleur2 := Burgundy;
      couleur3 := Tangerine;
     
      OpenGraph;
      SetColor({Burgundy}couleur2);
      SetFillStyle(SolidFill, {Tangerine}couleur3);
      FillRect(10, 10, 40, 40);
      ReadKey;
      CloseGraph;
    end.
    Mais ça ne marche pas. Le code se compile, mais le dessin n'apparaît pas : l'écran est noir comme si les couleurs n'avaient pas été initialisées.

    Quelqu'un aurait-il une idée de ce qui ne va pas ?

  2. #2
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    J'ai relu plus attentivement l'unité WinGraph. J'ai trouvé ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    internColor                 : array[0..NrColorNames-1] of ^longword;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure SetAbsoluteColors;
    var i: longint;
    begin
      for i:=0 to NrColorNames-1 do internColor[i]^:=NamesPalette[i];
    end;
     
    procedure SetInternColors;
    begin
    {$IFDEF 256_COLOR_NAMES}
      internColor[000]:=@AliceBlue;
      internColor[001]:=@AlizarinCrimson;
      {...}
    J'essaie de comprendre...

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 052
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Dans la doc en ligne de WinGraph il y a ceci :
    256_COLOR_NAMES switch defines 256 color name variables that can be used when selecting colors. If a legacy graphics driver is selected (with 16 or less colors), better let this switch disabled, since the colors are mapped incorrectly.
    As-tu essayé d'utiliser comme pilote VGA ou SVGA, par exemple ? Idem pour le mode graphique, il faut sélectionner un mode supportant au minimum 256 couleurs.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Merci pour la réponse.

    Pour le pilote j'utilise la valeur noPalette.

    NoPalette - no palette, all colors in the system are available
    A tout hasard j'ai essayé avec la valeur D8bit, mais le résultat a été le même.

    Ce code 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
    24
    program Ex_Couleurs;
     
    {$APPTYPE GUI}
     
    uses
      WinCrt, WinGraph;
     
    procedure OpenGraph;
    var
      gd, gm: smallInt;
    begin
      gd := noPalette;
      gm := mCustom;
      SetWindowSize(200, 200);
      InitGraph(gd, gm, 'WinGraph');
      SetBkColor(Orange);
      ClearViewPort;
    end;
     
    begin
      OpenGraph;
      ReadKey;
      CloseGraph;
    end.
    mais pas celui-ci :

    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
    program Ex_Couleurs;
     
    {$APPTYPE GUI}
     
    uses
      WinCrt, WinGraph;
     
    var
      maCouleur: longWord;
     
    procedure OpenGraph;
    var
      gd, gm: smallInt;
    begin
      gd := noPalette;
      gm := mCustom;
      SetWindowSize(200, 200);
      InitGraph(gd, gm, 'WinGraph');
      SetBkColor(maCouleur);
      ClearViewPort;
    end;
     
    begin
      maCouleur := Orange;
      OpenGraph;
      ReadKey;
      CloseGraph;
    end.

  5. #5
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Trouvé !

    Les variables n'ont pas la bonne valeur tant que la procedure InitGraph n'a pas été appelée.

    Pour plus de détail, veuillez consulter les tests contenus dans cette archive (sources et exécutables).
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  2. [AC-2007] Utiliser une variable pour appeler les propriétés d'un objet?
    Par Vhalar dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/09/2011, 19h19
  3. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  4. utilisation de UpdateResource pour les icônes ?
    Par JuanLopez1966 dans le forum Windows
    Réponses: 5
    Dernier message: 12/01/2005, 08h13
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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