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

Composants VCL Delphi Discussion :

Pb affichage du canvas dans une TImage


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Pb affichage du canvas dans une TImage
    Bonjour a tous.

    J'ai un petit probleme avec des TImages.

    J'ai une application avec une forme contenant plusieurs TImages superposées sur une seule TImage avec un fond noir.
    J'écris du texte dont la couleur peut changer dans le canvas de ces TImages. Le texte s'affiche correctement.

    Mais au bout d'un certain temps apres certaines manipulations, le texte n'apparait plus dans une TImage.
    La TImage a bien visible a True, et lorsque je mets un breakpoint au raffraichissement de la TImage, le texte et la couleur sont correctes.

    La TImage incréminée n'est pas toujours la meme.

    Est ce quelqu'un aurait une idée a me soummettre

    A l'avance Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Si tu veux utiliser le canvas de TImage, il est préférable d'utiliser un TPaintBox

    - Aide Delphi
    Utilisez TPaintBox pour ajouter des images personnalisées à une fiche. A la différence de TImage qui affiche une image stockée dans un bitmap, une icône ou un métafichier, TPaintBox attend de l'application qu'elle dessine l'image directement dans un canevas. Utilisez le gestionnaire d'événement OnPaint pour dessiner dans la surface de dessin (Canvas) de la boîte à peindre.
    J'espère que cela te sera être utile.

    @+

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Meme si je veux ecrire du Texte simple?

    Le fonctionnement est le meme?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Je ne veux pas m'avancer, j'avoue que je n'ai jamais très bien compris la subtilité entre les 2 composants.
    Mais lorsque je dois travailler sur le canvas d'un élément de type image, j'utilise le TPaintBox sans problème. Les "opérations canvas" sur TImage ont tendance à "planter" mystérieusement...

    Je me réfère donc à l'aide Delphi qui conseille le TPaintBox pour ce type d'utilisation...

    Je laisse la porte ouverte pour les explications des utilisateurs plus avertis...

    @+

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Je viens d'essayer de remplacer la TImage par Une TPaintBox.

    Je n'arrive pas afficher de texte car j'ai l'impression qu'il n'existe pas d'effet de transparence avec cet objet.

  6. #6
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Cela ne te convient peut-être pas, mais à tout hasard, je souhaite juste t'indiquer que si c'est simplement pour écrire du texte, tu peux le faire très facilement avec un TLabel dont la propriété Transparent := True;

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Je sais qu'un TLabel pour du texte, c'est beaucoup plus simple.

    Seulement j'ai du texte a ecrire avec des couleurs différentes pour une meme phrases (voir des lettres qui se suivent avec des couleurs différentes) et parfois soulignés ou surlignés ou meme des tailles de caractéres différentes. Le texte peut meme ne pas commencer en debut de ligne...
    Enfin c'est un peu compliquer a expliquer comme ca.

    En tout cas un TLabel ne fournis pas les options nécessaires pour ce que j'ai a afficher.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Salut,

    J'ai retrouvé un ancien post qui pourrait t'aider

    Citation Envoyé par Duan
    Le code qui suit permet d'écrire du texte sur une image .BMP
    Pour test, mette un TButton et un TImage sur une form et charger un BMP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button1Click(Sender: TObject);
      var
        OldBkMode : integer;
      begin
        With Image1.Picture.Bitmap do
        begin
          Canvas.Font.Color := clblack; // couleur du texte
          OldBkMode := SetBkMode(Canvas.Handle,Ord(TRANSPARENT));
          Canvas.Font.Size := 13; // Grandeur du texte
          Canvas.TextOut(10, 10, Texte avec fond transparent!!'); 
          // position et texte à insérer (peut venir d'une variable)
          SetBkMode(Canvas.Handle,OldBkMode);
        end;
      end;
    @+

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Je viens d'essayer ce bout code mais ca n'a pas résolu mon probleme.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    La différence entre un TImage et Un TPaintBox teint dans le faite aue le TImage contient un TPicture qui sttoque les informations à afficher. Pour un TPaintbox il faut tous redessiner "a la main" a chaque evenement Paint.

    Pour ecrire sur le canvas d'un TImage il faut:

    Que le TPicture ne soit pas vide.
    Que le TPicture contienne un Bitmap (Attention a ne pas charger un graphe ou un JPEG, le stokage ne sera pas le bitmap du TPicture).
    Que le bitmap ait une taille (width/Height) non nulle.
    Que le bitmap ne soit pas écrasé par un chargement du TPicture.


    Recharger vous une image dans votre TPicture ?
    changer vous la taille de la bitmap du TPicture ?

  11. #11
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    On n'utilise pas la TPicture de la TImage. Donc le probleme ne vient a priori pas de la.

    De plus on arrive a avoir exactement ce que l'on veut ecrire dans le canvas de la TImage.

    Seulement au bout d'un certain temps certaine TImage n'affiche plus rien (Probleme aléatoire).

    Si on duplique la TForm contenant les TImages et qu'on affiche exactement la meme chose dans les 2 TForms. On peut se retrouver avec une TImage d'une des 2 TForm qui n'affichent plus rien alors que la meme TImage de l'autre TForm affiche correctement le texte.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Le canvas d'un TImage est le canvas De Timage.Picture.Bitmap.

    Donc la taille disponible est celle de Bitmap, et si l'on charge une image Les modifications apporteé sont détruites.

    Essayer de changer les couleurs de pen et brush du canvas. Si quelque part vous écraser ce que vous écriver vous verez peur être la couleur changer.
    Verifier aussi que Timage.Picture.Bitmap.Width et Timage.Picture.Bitmap.Height soit différent de 0. Normalement dans ce cas vous ne deviriez rien afficher, mais il peut y avoir des effets de bords.

    Déssolé, je n'ai pas d'autre idées.

  13. #13
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    J'ai vérifier la taille, la couleur, le contenu, ... et tout est correct.
    J'ai également fait un check sur toutes les propriétés des TImages et de la TForm, Visible, Enabled, etc... et je n'ai rien trouvé...

    Je ne vois vraiment pas pourquoi cela ne marche.
    Je suis désespéré...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour

    Résumon

    Vous avez plusieurs TImages superposé.
    Les TImages ont leur propiété visible et transparent à true.
    Quand vous modifier un des TImage il arrive que l'un ou plusieurs TIme ne s'affiche plus.
    Les paramètres de couleurs, de taille etc des canvas des TImages sont correctes.
    Vous n'avez rien écrit sur un TImage suceptible de masquer la totaliter de l'image.

    REste le rafraichissement.

    Si c'est un problème de rafraichisement, il devrait être résoluble par des updates.
    Exemple
    Image1 = 1° TImage
    Image2 sur Image1
    Image3 sur Image2
    ..
    Imagen sur Image n-1

    Si vous faite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Image1.Update;
    Image2.Update;
    Image3.Update;
    ..
    Imagen.Update;
    Vous forcer les images à se rafraichir les une apres les autres.
    En faite, vue que les images sont transparent, seul le dernier update devrait être nécéssaire.
    En principe le rafraichissement des objets transparent force le afraichissement des objet sur lequelle il sont. (Image3 demande à image 2 sont image pour pouvoir ce dessiner en tenat compte de la transparence, du coup image2 demande sont image à image1)

  15. #15
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    En fait c'est pas tout a fait ca.

    Comme je l'ai expliqué sur mon premier poste (mais je n'ai peut etre pas été tres clair), j'ai plusieurs TImages dans une TForm.

    J'ai une TImage principale de fond, qui contient un .bmp mais qui n'est jamais modifié. Et sur cette TImage, j'ai plusieurs TImages transparentes dans lesquelles j'écris du texte avec plein de jolie couleur...
    Aucune de ces TImages ne sont supperposée, seul la principale est utilisée en fond...

    J'arrive a ecrire dans ces TImages et j'obtiens exactement ce que je veux.
    Mais au bout d'un certain temps certaines TImages n'affiche plus de texte.
    Pour etre sur que ce n'est pas un probleme de transparence, j'ai supprimé la TImage de fond et j'ai toujours mon probleme.

    A chaque ecriture de texte dans une TImage, j'effectue un refresh, repaint, update....

    Donc pour moi le probleme est propre a un objet TImage.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Désolé, je n'ai plus aucunes idées.

  17. #17
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Je pense qu'en utilisant des TPaintBox, et en réécrivant dans OnPaint, tu n'auras plus ce problème... Les PaintBox sont faits pour ça
    Par contre, pourquoi tu n'écris pas directement sur le canvas de l'image de fond?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Salut,

    J'arrive a ecrire dans ces TImages et j'obtiens exactement ce que je veux.
    Mais au bout d'un certain temps certaines TImages n'affiche plus de texte.
    Pour etre sur que ce n'est pas un probleme de transparence, j'ai supprimé la TImage de fond et j'ai toujours mon probleme.
    Au bout d'un certain temps = ???
    2 ou 3 opérations, des dizaines, des centaines???
    Est-ce que la fréquence est la même si tu écris sur un seul TImage ou si tu écris sur plusieurs TImages.

    Lorsque le problème d'écriture sur tes images apparaît, tu pourrais essayer de charger une image fichier (même un simple bitmap avec une ligne dessinée) - dans le Timage qui 'bloque'. Si tu arrives à charger cette image, tu pourrais alors tester si tu sais à nouveau écrire après cette opération.
    Peut-être que tu pourrais également arriver à quelque chose en "redessinant" ton bitmap complètement en blanc, par exemple.

    Sûr, c'est certainement pas une solution, mais si une ou l'autre manipulation peut de débloquer le système, juste histoire d'essayer de voir d'ou pourrait venir le problème...

    Problème de ressources, rafraîchissement, réinitialisation d'un paramètre ou ... ???

    Bon courage
    @+

  19. #19
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    J'ai effectué un nouvel essai.

    Cette fois je n'ai plus qu'une seule TImage dans ma TForm.
    j'ai toujours le meme probleme avec le canvas de la TImage qui n'est plus remplie apres un certain temps.

    J'ai ensuite vérifié toutes les propriétés de la TImage, et tout est correct.
    Visible et Enable a true, TImage transparente... enfin la totale.
    Apres chaque ecriture dans le canvas j'effectue un repaint/refresh.

    J'ai changé la couleur de fond de ma TForm, et je me rends compte qu'en fait c'est toute la TImage quie disparait et non le canvas qui n'est plus affiché.

    Des idées?

  20. #20
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Tango
    ...qui n'est plus remplie apres un certain temps.
    Combien de temps? Après quelle opération? Soit plus précis...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36
  2. Réponses: 2
    Dernier message: 14/09/2005, 13h39
  3. Probleme d'affichage d'image dans une fenetre
    Par cgregueusse dans le forum MFC
    Réponses: 1
    Dernier message: 03/08/2005, 11h08
  4. [Exception]Affichage de message dans une Execption
    Par harris_macken dans le forum Général Java
    Réponses: 8
    Dernier message: 29/05/2005, 17h34
  5. Affichage d'images dans une fenêtre
    Par tonycalv dans le forum MFC
    Réponses: 6
    Dernier message: 20/04/2005, 20h02

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