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

Delphi Discussion :

Afficher du texte sur un Timage


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 108
    Par défaut Afficher du texte sur un Timage
    Bonjour à tous,

    J'ai des Timage sur lesquels je voudrais écrire du texte en étant maître de la couleur de la font et de la couleur du fond.
    a priori, rien d'extraordinaire.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
     for i:=0 to 31  do begin
     With Carte[i].Picture.Bitmap do  begin
      Canvas.brush.color:=clYellow; // couleur du fond
      Canvas.Font.Color := clBlack; // couleur du texte
      Canvas.Font.Size := 13;      
      Canvas.Font.Style:=[fsBold];
      Canvas.TextOut(5,5, ' +1 ');
     end;
     end;
    end;
    Je m'attendais à ce que tous les textes soient écrits en noir sur fond jaune.
    Ce n'est pas le cas, sur certaines images, le fond jaune a disparu au profit d'un fond blanc (ou transparent ?).
    (La propriété 'transparent' des Timages est sur False)

    Une idée ?

    Merci JLouis

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 933
    Billets dans le blog
    6
    Par défaut
    Bonsoir,

    Jouer sur Brush.Style ? Faire un FillRect ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 108
    Par défaut
    Non j'ai essayé, mais ça ne marche pas non plus

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 134
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 134
    Par défaut
    Salut,
    Citation Envoyé par illuch Voir le message
    Je m'attendais à ce que tous les textes soient écrits en noir sur fond jaune.
    Ce n'est pas le cas, sur certaines images, le fond jaune a disparu au profit d'un fond blanc (ou transparent ?).
    Une copie d'écran aiderait, peut-être.
    (si ce n'est pas indiscret)

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 108
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,


    Une copie d'écran aiderait, peut-être.
    Nom : Capture_Cartes.JPG
Affichages : 737
Taille : 25,2 Ko

    Ce sont les cartes :10 de Pique, 7 de Pique et 6 de Trèfle qui posent problème. Le fond jaune a disparu.

    Merci de vos suggestions.

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 134
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 134
    Par défaut
    Citation Envoyé par illuch Voir le message
    Le fond jaune a disparu.
    Et le "=" il sort d'où, alors ?

    Citation Envoyé par illuch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    With Carte[i].Picture.Bitmap do  begin
      //...
      Canvas.TextOut(5,5, ' +1 ');
    end;
    Tu ne nous montres pas tout, en termes de code...

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 108
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Et le "=" il sort d'où, alors ?
    Tu ne nous montres pas tout, en termes de code...
    Évidemment j'ai modifié le code pour une bonne compréhension.
    Le code ressemble à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i:=0 to 31  do begin
     .......
     With Carte[i].Picture.Bitmap do  begin
      case resultat of
       1 : Canvas.TextOut(5,5, ' +1 ');
       0 : Canvas.TextOut(5,5, ' = ');
      -1 : canvas.TextOut(5,5,'-1');
      .............
     end;
    .....
    end;
    mais je mets également le code complet, si ça peut vous aider (c'est dans un programme de Bridge).
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    procedure AfficherLeveesPossibles(futp : PtrFutureTricks;entame:integer); // Afficher nbre de levées possibles selon la carte jouée
    var i,j,k,debut,fin,conversion:integer;
        Espace,msg,msg1:string;
        joueur,CampDeclarant:string;
        NumCarteJouee:integer;
        S:string;
        X,Y:integer;
        NiveauContrat, ScorePossible, NbreLeveeFaite:integer;
    begin
     NumCarteJouee:=(Place1 mod 4)-1;   // Numéro de la carte jouée dans la levée : -1=aucune carte jouée dans la levée,  0=première carte jouée, 1=2ème carte ...
     joueur:=UpperCase(QuelJoueurDansLevee(entame, NumCarteJouee)); // Quel joueur joue dans la levée?
     CampDeclarant:=QuelCampDeclarant(Form1.ComboBox2.ItemIndex);
     NiveauContrat:=StrToInt(Copy(Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex],1,1)); // Niveau du contrat
     
     if Joueur='NORD' then begin
      debut:=0; fin:=12;
      X:=5; Y:=35;
      NbreLeveeFaite:=NbreLeveeNS;
      end else if Joueur='EST' then begin
       debut:=13; fin:=25;
       X:=20; Y:=5;
       NbreLeveeFaite:=NbreLeveeEO;
       end else if Joueur='SUD' then begin
        debut:=26;fin:=38;
         X:=5; Y:=35;
         NbreLeveeFaite:=NbreLeveeNS;
        end else if Joueur='OUEST' then begin
         debut:=39;fin:=51;
         X:=20; Y:=5;
         NbreLeveeFaite:=NbreLeveeEO;
        end; 
     
    for i:=0 to 51 do Carte[i].ResolutionOk:=False; // Initialisation : aucune carte n'est valide dans la Résoluion de la donne
     
      for i:=debut to fin  do begin
       for j:=0 to futp.Cards-1 do begin
         conversion:=ConvertRankSuitToValeurCarte(futp.Suit[j],futp.Rank[j]);
         if conversion= Carte[i].Valeur then begin
          Carte[i].ResolutionOk:=True; // La carte  est valide dans la résolution de la donne (on peut la jouer);
     
          // Affichage du score possible sur les cartes
          if Pos(joueur,CampDeclarant)=0 then     // celui qui joue la carte est dans le camp du Déclarant
           ScorePossible:=13-(6+NiveauContrat)-futp.Score[j]-NbreLeveeFaite
           else ScorePossible:=futp.Score[j]-(6+NiveauContrat)+NbreLeveeFaite;
     
          if ScorePossible=0 then S:=' ='
           else if ScorePossible>0 then S:='+'+IntTostr(ScorePossible)+''
            else if ScorePossible<0 then S:=IntTostr(ScorePossible)+'';
     
          With Carte[i].Picture.Bitmap do  begin
           Canvas.Font.Color := clBlack; // couleur du texte
           Canvas.Font.Style:=[fsBold];
           Canvas.Font.Size := 13; 
            Canvas.Brush.color:=clYellow;
           Canvas.TextOut(X,Y,S);
           break;
          end;  //fin de  With Carte[i].Picture.Bitmap do  begin
     
        end; // fin de if ConvertRankSuitToValeurCarte
       end;  // fin de for j:=0 to futp.Cards-1 do begin
      end;  //  fin de for i:=debut to fin  do begin
    Voilà, mais le problème est relativement simple :
    Pourquoi dans certains cas, le fond disparait lorsque je veux écrire dessus en utilisant 'TextOut' (toutes les images sont configurées de la même façon) ?

    Le débat est relancé !!!

    JLouis

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 134
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 134
    Par défaut
    Citation Envoyé par illuch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     With Carte[i].Picture.Bitmap do  begin
      case resultat of
       1 : Canvas.TextOut(5,5, ' +1 ');
       0 : Canvas.TextOut(5,5, ' = ');
      -1 : canvas.TextOut(5,5,'-1');
      .............
     end;
    Au cours de mes lectures sur le web (et aussi dans la vraie vie) j'ai découvert que la construction With objet do ... c'est le mal absolu et qu'on a vite fait de se prendre les pieds dans le tapis...

    Tu devrais tenter une version sans ce With.

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    Citation Envoyé par illuch Voir le message
    Ce sont les cartes :10 de Pique, 7 de Pique et 6 de Trèfle qui posent problème. Le fond jaune a disparu.
    Il suffit de convertir ces images monochrome en RGB ou de forcer le 24 bits par code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Image1.Picture.Bitmap do
    begin
      PixelFormat := pf24bit;
     
      Canvas.brush.color:=clYellow; // couleur du fond
      Canvas.Font.Color := clBlack; // couleur du texte
      Canvas.Font.Size := 13;
      Canvas.Font.Style:=[fsBold];
      Canvas.TextOut(50,5, ' +1 ');
    end;

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

Discussions similaires

  1. [Système] Afficher un texte sur la même ligne
    Par Bridou dans le forum Langage
    Réponses: 4
    Dernier message: 08/10/2007, 16h17
  2. Réponses: 4
    Dernier message: 02/06/2007, 12h35
  3. Afficher du texte sur un bureau virtuel
    Par Olivier Regnier dans le forum Linux
    Réponses: 1
    Dernier message: 17/02/2007, 12h54
  4. comment afficher du text sur le bureau?
    Par fomazou dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/11/2006, 18h46
  5. [DEBUTANT][NB] Afficher du texte sur le Output de NB
    Par oussam dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/06/2006, 19h10

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