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

Turbo Pascal Discussion :

Couleurs de fond et de texte [TPW]


Sujet :

Turbo Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut Couleurs de fond et de texte
    Bonjour,

    J'ai terminé mon programme. Ca me donne l'occasion de remercier toutes les personnes qui m'ont beaucoup aidé sur ce forum.
    Maintenant que ce programme est fonctionnel, je voudrais le rendre un peu plus sympathique car la console à fond blanc et à textes noirs est bien triste.

    J'ai découvert les fonctions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TextBackground (7) ; 
    TextColor (4) ;
    J'ai obtenu à la compilation l'erreur 3 ("Unknown identifier"). Ces fonctions n'appartiennent pas à TPW ?

    Comment régler cet énième problème ? Je vous remercie encore.

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Tu dois au prealable appeler l' unité wincrt (ou crt ) juste apres la ligne program ...;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    program test;
    uses wincrt;
    ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Non, ça ne marche pas avec Turbo Pascal pour Windows.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Hie,

    API !!!
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Voulez-vous m'aider dans ce nouveau chapitre dont je ne me doutais même pas de l'existence !
    Merci d'avance.

  6. #6
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 940
    Points : 59 421
    Points
    59 421
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Comme dit Droggo, les fonctions de l'API sont utilisables.

    Il est possible de changer la couleur de fond de la fenêtre en dessinant un rectangle de couleur sur toute sa surface. Pour les développeurs plus chevronnés (surtout ne te froisse pas ), il n'est malheureusement pas possible de changer la couleur de fond via les propriétés de classe de la fenêtre car seul le contour en est affecté.

    Pour ce qui est du texte, les fonctions de l'API fonctionnent bien mais tu auras du mal à les combiner avec les procédures d'affichage de texte de l'unité WinCRT.

    Voici un exemple :
    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
    35
    36
    37
    38
    39
    40
    41
    Program WCRTFond;
     
    Uses Strings, WinTypes, WinProcs, WinCRT;
     
    Var hFenetre : HWnd;
        DC : hDC;
        RectClient : tRect;
        AncienPinceau, Pinceau : hBrush;
        AncienModeFond : Integer;
        AncienneCouleurTexte : TColorRef;
        Chaine : Array [0..79] of Char;
     
    Begin
      InitWinCRT;
      (* Détermination du handle de la fenêtre *)
      hFenetre := GetFocus;
      (* Obtention d'un contexte de périphérique *)
      DC := GetDC(hFenetre);
      (* Création d'un pinceau rouge *)
      Pinceau := CreateSolidBrush(RGB(255,0,0));
      (* Détermination des coordonnées de la zone client *)
      GetClientRect(hFenetre,RectClient);
      (* Dessin d'un rectangle couvrant toute la fenêtre *)
      AncienPinceau := SelectObject(DC,Pinceau);
      Rectangle(DC,RectClient.Left,RectClient.Top,RectClient.Right,RectClient.Bottom);
      (* Dessin de texte blanc à la position du curseur *)
      AncienModeFond := SetBkMode(DC,Transparent);
      AncienneCouleurTexte := SetTextColor(DC,RGB(255,255,255));
      StrCopy(Chaine,'Que c''est beau !');
      TextOut(DC,20,20,Chaine,StrLen(Chaine));
      (* Restauration de l'état original du contexte de périphérique *)
      SelectObject(DC,AncienPinceau);
      SetTextColor(DC,AncienneCouleurTexte);
      SetBkMode(DC,AncienModeFond);
      (* Destruction du pinceau rouge créé *)
      DeleteObject(Pinceau);
      (* Libération du contexte de périphérique *)
      ReleaseDC(hFenetre,DC);
      ReadLn;
      DoneWinCRT;
    End.
    On touche ici aux limites de ce que tu peux obtenir avec une fenêtre WinCRT. Si tu veux vraiment aller au-delà, je te conseille d'abandonner l'unité WinCRT et de franchir le pas en essayant de travailler avec de véritables fenêtres Windows !

    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]

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Merci pour cette longue réponse et le temps que vous y avez consacré. Le résultat est à la hauteur de ce que j'espérais.

    Colorer la fenêtre me semble assez rapide puisque quelques lignes de code suffisent. Mais colorer les textes va me prendre plus de temps si je dois pour chaque "writeln('mon texte') coder ainsi :

    StrCopy(Chaine,'Que c''est beau !');
    TextOut(DC,20,20,Chaine,StrLen(Chaine));


    Ai-je bien compris ? Si oui, je vais m'y atteler...

    J'ai téléchargé Lazarus. Pour son apprentissage, existe-t-il des livres dans le commerce ou doit-on, comme pour TPW, passer son temps à faire des recherches sur internet et compter sur la gentillesse des gens comme sur ce forum ?

    Merci pour tout.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    J'ouvre mon programme dans une fenêtre personnalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure fenetrePerso;
    begin
     
    Strcopy(WindowTitle,MON PREMIER PROGRAMME');
    screensize.x:=100;
    screensize.y:=600;
    windowsize.x:=800; 
    windowsize.y:=600;
    InitWinCRT;
    end;
    Comment dois-je modifier votre code pour que ce dernier prenne en compte ma propre fenêtre ?
    Merci

  9. #9
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 940
    Points : 59 421
    Points
    59 421
    Billets dans le blog
    2
    Par défaut
    Logiquement, il n'y a aucune modification à apporter : la fonction GetClientRect retournera les coordonnées de la zone client, quelle que soit sa taille, si elle est exécutée après InitWinCRT.

    La difficulté liée à l'utilisation de TextOut est qu'il faut transformer les coordonnées "caractère" (colonne et ligne de texte) en coordonnées "pixel". La fonction GetTextExtent permet d'obtenir la hauteur d'un caractère en pixels.
    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]

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Effectivement quand la ligne InitWinCRT; est bien placée, tout fonctionne.

    Je m'interroge sur la ligne :

    AncienneCouleurTexte := SetTextColor(DC,RGB(255,255,255));

    Ce code me semble être celui de la nouvelle couleur du texte (blanc). Je ne vois pas la ligne sauvegardant l'ancienne couleur (noire) afin de la restituer en fin de programme par la ligne :

    SetTextColor(DC,AncienneCouleurTexte);

    Je vous remercie de m'éclairer encore.

    Est-il possible de changer aussi la police ainsi que la taille de la police et ses attributs (gras, italique, souligné) ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Un nouveau problème se pose :

    Dans ma fenêtre dont le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure fenetrePerso;
    begin
     
    Strcopy(WindowTitle,MON PREMIER PROGRAMME');
    screensize.x:=100;
    screensize.y:=600;
    windowsize.x:=800; 
    windowsize.y:=600;
    InitWinCRT;
    end;
    Je voudrais ne pas afficher les barres de défilement car si on les actionne, le fond de couleur ne se déplace pas.

    Est-ce possible ?

    Merci

  12. #12
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 940
    Points : 59 421
    Points
    59 421
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dimi2 Voir le message
    Je m'interroge sur la ligne :

    AncienneCouleurTexte := SetTextColor(DC,RGB(255,255,255));

    Ce code me semble être celui de la nouvelle couleur du texte (blanc). Je ne vois pas la ligne sauvegardant l'ancienne couleur (noire) afin de la restituer en fin de programme par la ligne :

    SetTextColor(DC,AncienneCouleurTexte);

    Je vous remercie de m'éclairer encore.
    SetTextColor est une fonction. Grâce à la syntaxe étendue du Pascal, une fonction peut être appelée comme si c'était une procédure. Lorsque l'on travaille avec les API, il est très courant de procéder ainsi lorsque l'on ne se sert pas du résultat renvoyé par une fonction.
    Lors du 1er appel à SetTextColor, on récupère la couleur de texte actuelle pour pouvoir la restaurer plus tard. Lors du second appel, on restaure la couleur originale et il ne sert à rien de récupérer la valeur renvoyée par la fonction.

    Citation Envoyé par dimi2 Voir le message
    Est-il possible de changer aussi la police ainsi que la taille de la police et ses attributs (gras, italique, souligné) ?
    Oui, c'est possible mais pas des plus faciles.
    La fonction de l'API CreateFont permet de créer une police de caractères :
    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
    Function CreateFont (Height,                { Hauteur }
                         Width,                 { Largeur moyenne }
                         Escapement,            { Angle d'échappement }
                         Orientation,           { Angle de base }
                         Weight : Integer;      { Taux de gras }
                         Italic,                { Italique si > 0 }
                         Underline,             { Souligné si > 0 }
                         StrikeOut,             { Barré so > 0 }
                         CharSet,               { Jeu de caractères }
                         OutputPrecision,       { Précision du tracé }
                         ClipPrecision,         { Précision de coupure }
                         Quality,               { Qualité d'affichage }
                         PitchAndFamily : Byte; { Châsse et famille }
                         Facename : pChar       { Nom de police }
                         ): hFont;              { Retourne un handle }
    Les hauteur et largeur doivent être en unités logiques, c'est-à-dire qu'il faut transformer les points (1/72 pouce) en dixièmes de millimètres.

    Si tu ne veux pas te casser la tête :
    • Si tu laisses les deux paramètres Height et Width à 0, la taille de police par défaut sera sélectionnée par Windows.
    • Le taux de gras est un multiple de 100 allant de 100 (fin) à 900 (très gras)
    • Le jeu de caractères peut valoir DEFAULT_CHARSET
    • La précision du tracé peut valoir OUT_DEFAULT_PRECIS
    • La précision de coupure peut valoir CLIP_DEFAULT_PRECIS
    • La qualité peut valoir DEFAULT_QUALITY
    • PitchAndFamily peut être une combinaison logique "or" entre DEFAULT_PITCH et FF_DONTCARE

    Une fois la police créée, il faut la sélectionner dans le contexte de périphérique à l'aide de SelectObject (et ne pas oublier de restaurer la police de caractères d'origine avant la fin du programme et de détruire la police créée à l'aide de DeleteObject).
    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]

  13. #13
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 940
    Points : 59 421
    Points
    59 421
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dimi2 Voir le message
    Je voudrais ne pas afficher les barres de défilement car si on les actionne, le fond de couleur ne se déplace pas.

    Est-ce possible ?
    Je pense que c'est impossible.
    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]

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Points : 64
    Points
    64
    Par défaut
    Merci pour vos réponses. J'apprends beaucoup.

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

Discussions similaires

  1. Changer la couleur de fond d'un text statique
    Par diego45 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 10/12/2014, 10h24
  2. enregistrement de la couleur de fond d'un texte
    Par gRRosminet dans le forum Général Java
    Réponses: 0
    Dernier message: 16/09/2012, 13h19
  3. changement couleur de fond et de texte
    Par avalokitech dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/09/2011, 18h40
  4. Couleur de fond sur un "text"
    Par Livingstone dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/01/2006, 12h02
  5. [Tlistview] Couleur de fond et de texte d'une ligne
    Par radimby dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/12/2005, 09h17

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