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

C++Builder Discussion :

Image de fond StringGrid


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par d�faut Image de fond StringGrid
    Salut,
    Mon projet �tant termin�, je voudrais m'attarder sur l'est�tique de ma grille et lui mettre une image de fond.

    Le code que j'utilise affiche bien mon image mais par dessus mes cellules et non en image de fond :/

    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
     
            Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
            pBitmap->LoadFromFile("C:\\Documents and Settings\\Compaq_Propriétaire\\Bureau\\Albat_r.bmp");
            StringGrid1->Canvas->Draw(0,0,pBitmap);
    }

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par d�faut
    Bonjour,

    alors j'ai vu qu'il �t� possible de mettre une image de fond dans une stringgrid mais en delphi.
    Je ne sais pas si c'est possible sous builder ?!?!

    Dans mon projet sous builder peut-on rajouter le code en delphi ?
    Y'a t'il des risques ? Si non quelq'un pourrait m'aider � l'inclure svp

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Je me demande s'il ne faut pas prendre en charge tout le dessin de la grille cellule par cellule ?
    Donc charger l'image de fond dans un bitmap et puis :

    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
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int Col,
          int Row, TRect &Rect, TGridDrawState State)
    {
    TCanvas * C = StringGrid1->Canvas;
    int we = StringGrid1->DefaultColWidth;
    int he = StringGrid1->DefaultRowHeight;
    TRect Dest = Rect;
    TRect Srce = Rect;
    Srce.Left -= we;
    Srce.Top -= he;
    Srce.Right -= we;
    Srce.Bottom -= he;
    C->CopyRect(Dest, Bitmap->Canvas, Srce);
    AnsiString N = StringGrid1->Cells[Col][Row];
    int tx =  (we - C->TextWidth(N)) / 2;
    int ty = (he - C->TextHeight(N)) / 2;
    C->Brush->Style = bsClear;
    C->TextOut(Dest.Left + tx, Dest.Top + ty, N);
    }
    Je ne connais pas de solution plus simple donc...
    Cel� dit... si l'image du bitmap est plus petite que la zone client du stringgrid, alors il faudra g�rer plus en d�tail...

    A plus !

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par d�faut
    Merci, c'est presque ca !

    en fait, l'image de fond commence a la ligne 1 et colonne 1 au lieu de 1 0
    et lorsque je charge le contenu de mon stringgrid, j'ai :


    au lieu de (avec l'image de fond) :

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Dans ce cas supprimer le decalage dans le bitmap en Left et Right au niveau de Srce puisque le bord du bitmap co�ncide avec la zone client du stringgrid.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    //Srce.Left -= we; //inutile
    Srce.Top -= he;
    //Srce.Right -= we; //inutile
    Srce.Bottom -= he;
    ...
    A plus !

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par d�faut
    Merci et pour l'�criture qui est pas normal (on dirait que c'est ecrit 2fois la meme chose mais avec un d�calage) ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Je n'ai pas de probl�me avec l'�criture du texte.
    En ce moment mon test est celui l� :

    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
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int Col,
          int Row, TRect &Rect, TGridDrawState State)
    {
    TCanvas *C = StringGrid1->Canvas;
    AnsiString N = StringGrid1->Cells[Col][Row];
    TRect Srce = Rect;
    TRect Dest = Rect;
    int he = StringGrid1->DefaultRowHeight;
    int we = StringGrid1->DefaultColWidth;
    Srce.Top -= he;
    Srce.Bottom -= he;
    C->CopyRect(Dest, Bitmap->Canvas, Srce);
    TColor c = clBlack;
    switch(Col)
        {
        case 1 : c = clBlue; break;
        case 2 : c = clRed; break;
        case 3 : c = clYellow; break;
        case 5 : c = clWhite; break;
        }
    C->Font->Color = c;
    int x = (we - C->TextWidth(N)) / 2;
    int y = (he - C->TextHeight(N)) / 2;
    C->Brush->Style = bsClear;
    C->TextOut(Dest.Left + x, Dest.Top + y, N);
    }
    Je ne fais rien d'autre dans cette m�thode !

    A plus !

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par d�faut
    C'est bon j'ai trouv� l'erreur enfin ce qui cloch� quoi.

    je change la couleur de texte de la 2eme colonne et lorsque je mettais en commentaire mon test, l'�criture se faisait bien mais que la 2eme colonne.

    J'ai mis en commentaire cette parti de ton code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    C->TextOut(Dest.Left + tx, Dest.Top + ty, N);
    et en dessous je redefini les attributs de la stringgrid et l� ca marche !

    Merci car sans ton code je n'aurais pu trouv� :/

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Image de fond pour xdm
    Par BloodyImp dans le forum Applications et environnements graphiques
    R�ponses: 5
    Dernier message: 15/09/2004, 16h47
  2. bo�te de dialogue avec image de fond + texte
    Par Eug�nie dans le forum MFC
    R�ponses: 13
    Dernier message: 31/08/2004, 13h32
  3. image de fond � la taille de la form
    Par littledoudou dans le forum C++Builder
    R�ponses: 5
    Dernier message: 20/01/2004, 14h15
  4. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum D�buter
    R�ponses: 3
    Dernier message: 19/01/2004, 17h57
  5. [VB6] [Graphisme] Image de fond stretchable dans mdiform
    Par SpaceFrog dans le forum VB 6 et ant�rieur
    R�ponses: 9
    Dernier message: 17/02/2003, 10h45

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