begin process at 2010 02 10 07:26:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

Graphique

 > 

inverse video


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

inverse video

mercredi 5 janvier 2005 à 09:30:26 | inverse video

freakstreet

J'essaie de dessiner un barGraph avec à l'intérieur un texte écrit.

Je trace mon bord et ma barre de progression dans un canvas, j'écris le texte dans un autre canvas que je copie ensuite dans le premier avec pour paramètre CopyMode := cmSrcInvert.

Je ne parviens pas à obtenir mon texte propre, il semble être lissé avant que j'effectue la copie sur le canvas, faut-il que j'évite d'utiliser une police true type ou bien y a-t-il un autre moyen ?

voici tout le code :

setBrushFont(enakMeasureLow, Font);                                                     // selection de la fonte
                  conso := round( nuDatas.measure[k].measure.currentConsoPct*100 );                       // consommation en pourcentage, arrondi à la valaeur entière
                  t := IfThen( nuDatas.measure[k].measure.isFullConso, '>200', IntToStr(conso) ) + '%';   // texte à afficher

                  SetRect(R,  x + LEFT_OFFSET,                                                            // définition du rectangle de la conso
                              bottomWrite + 2,
                              x + LEFT_OFFSET + BAR_SIZE,
                              bottomWrite + hTexte - 2);
                  brush.Color := bgColor;//BG_CONSO;
                  FillRect(R);

                  Brush.Color := getUsageColor(conso);                                                    // brush : couleur en fonction du pourcentage
                  Pen.Color := Brush.Color;                                                               // pen : même couleur
                  Pen.Style := psSolid;                                                                   // trait continu
                  Pen.Width := 2;                                                                         // trait un peu épais
                  Brush.Style := bsClear;                                                                 // pas de remplissage du fond

                  Rectangle(R);                                                                 // trace le pourtour due la barre

                  x2 := R.Left + trunc(((R.Right - R.Left) * min(1.0, conso / 100) ));          // rapport de remplissage selon la conso
                  SetRect(R1, R.Left, R.Bottom, x2, R.Top);                                     // nouveau Rec à remplir
                  Brush.Style := bsSolid;                                                       // remplissage du fond
                  Brush.Color := getUsageColor(conso);                                          // brush : couleur en fonction du pourcentage
                  Pen.Style := psSolid;
                  FillRect(R1);                                                                 // trace la partie pleine de la barre
                  Font.Color := clBlack;

                  // ** marquage en inverse video du texte **

                  bitmap := TBitmap.Create;                                                     // création d'un bitmap pour afficher le texte
                  setBrushFont(enakBarre, bitmap.Canvas.Font);                                  // choix de la fonte
                  hTexte := bitmap.Canvas.TextHeight(t);                                        // hauteur de la consommation à dessiner
                  lTexte := bitmap.Canvas.TextWidth(t);                                         // largeur de la consommation à dessiner

                  bitmap.Width := lTexte;
                  bitmap.Height := hTexte;
                  with bitmap.Canvas do begin
                    CopyMode := cmBlackness;
                    ARect := Rect(0, 0, Width, Height);
                    CopyRect(ARect, bitmap.Canvas, ARect);
                    CopyMode := cmSrcCopy;
                  end;
                  bitmap.Canvas.Brush.Style := bsClear;
                  bitmap.Canvas.Font.Color := clwhite;//getUsageColor(conso);                   // couleur du texte = couleur de la barre
                  bitmap.Canvas.TextOut(0, 0, t);                                               // écriture de la valeur de la consommation
                  CopyMode := cmSrcInvert;                                                      // mode de copie utilisant le XOR
                  x1 := ( R.Left + ( (R.Right - R.Left) - bitmap.Width ) div 2);                // x1 : coordonnées d'affichage
                  y1 := ( R.Top + ( (R.Bottom - R.Top) - bitmap.Height ) div 2 -1);             // y1
                  Draw(x1, y1, bitmap);                                                         // copie le bitmap avec le texte dans mon canvas
                  bitmap.Free;


merci

Freakstreet


Cette discussion est classée dans : texte, bitmap, conso, canvas, brush


Répondre à ce message

Sujets en rapport avec ce message

Arriere-plant [ par KillKrEv ] Comment je mais un arriere-plant mais pas mettre une image et lagrandire , mais je pence que c'est pas comme ca ca ce fait , Si cest comme ca ca ce fa Comment libérer le tBrush [ par Folber ] Bonjour, j'ai une question assez basiques pour Delphi (Kylix en fait). J'ai recherché dans l'aide et sur internet mais n'ai pas trouvé de réponse. Je Copie d'une partie d'un image [ par Rapakooti ] Alors mon pb viens du fait que j'essaie de faire une applique skinnable et par soucis de facilite lors de la creation des futur skins , toutes les ima soulignemet de texte sur une bitmap [ par ahmed12 ] Je voudrais savoir comment je peux dessiner une ligne qui fait souligner et suit la lecture de texte contenant dans une image bitmap dans une appli Zone de texte dans un canvas [ par _Moise_ ] Bonjour, le but serais de créer une zone de texte dans un canvas je sais comment écrire dans un canvas je sais comment le déplacer dans le fond de ma Pb avec Drawtext.. [ par XgaletteX ] Bonjour, je cherche a utiliser drawtext mais je n'y arrive pas , voila mon code:  With Sender As TStringGrid Do With Canvas Do  Begin    { Sélection d Comment effacer un texte ecrit Delphi avec la method canvas.textout(x,y,'kkk') [ par dynadyna ] Comment effacer un texte  ecrit en delphi par la methode  form1.canvas.textout(x,y,'bbbbfgg') Merci d'avance Printer.Canvas.TextOut [ par walid_kerkoub2006 ] Bonjour, Je voudrais imprimer une image avec du texte en dessus, pour celà j'ai utilisé Printer.Canvas.TextOut pour le texte et Printer.Canvas.Draw Imprimer un imageList [ par dugueclin ] Bonjour à tous,j'ai un problème lorsque j'imprime mon StringGrid: dans la procedure OnDrawCells du StrinGrid, si la ou les cellules de la colonne 8 so Inverser du texte dans un bitmap [ par apophys ] Bonjour,J'ai un texte dans une image ecris a l'aide de canvas.TexTOut , je souhaire lorsque que l'on pas la souris de faire comme un rectangle de sele


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales