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 :

Background dans un DBGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut Background dans un DBGrid
    Bonjour à tous,

    Est-t-il possible de mettre une image de fond dans un DBGrid.
    Si oui comment faire.

    Merci

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    dans la il y a un exemple pour une StringGrid, tu peux peut être l'adapter pour le DbGrid

    http://delphi.developpez.com/faq/?pa...fondstringgrid
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    Je l'avais vu mais je ne savais pas que ça pouvait s'appliquer à un dbgrid...
    Merci beaucoup Malatar

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    J'ai essayé mais ce n'est pas ce que je veux.
    En fait mon idée c'est d'avoir une image de fond du DBGrid, pas d'une cellule.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    bin c'est bien pourtant ce que fait le lien
    je comprend pas ce que tu n'aime pas dans ce code

    @+ Phil

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    Pour le composant TDBGrid il ne reconnait pas FixedCols, ACol, ColWidths, Cells.
    Et il me dit aussi "un objet constante ne peut être passé comme paramètre Var" sur le Rec.

    Par quoi puis-je remplacer ses variables ?

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    un truc du genre devrai fonctionner

    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
    type
     TDbGridHack = Class(TDbGrid)
     end;
    procedure TFDelete.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    Var
      y : integer;
      R,r2:TRect;
      Point1 : Tpoint;
    begin
      With Sender As TDBGrid Do
      With Canvas Do
      Begin
          If gdFixed in State Then
          Begin
          { Les cellules fixes sont toujours dessinées en gris }
          Brush.Color := clBtnFace;
          Brush.Style := bsSolid;
          FillRect(Rect);
        End
        Else
        Begin
          If gdSelected In State Then
          Begin
            { Les cellules sélectionnées sont en bleue }
            Brush.Color := clNavy;
            Brush.Style := bsSolid;
            FillRect(Rect);
          End
          Else
          Begin
            y :=0;
            if  assigned((Sender as TDbGridHack).Datalink) Then
               y := (Sender as TDbGridHack).Datalink.ActiveRecord ; // Recherche l'enregistrment courant
            Point1 := (Sender as TDbGrid).ScreenToClient(Point(datacol,y));
            R.Left   :=Point1.x;
            R.Right  :=Point1.x+Rect.Right-Rect.Left;
            R.Top    :=Point1.y;
            R.Bottom :=Point1.y+Rect.Bottom-Rect.Top;
            { Dessin d'une partie de l'image }
             CopyRect(Rect,MonBitmap.Canvas,R);
            Brush.Style := bsClear;
          End;
        End;
     
        { Sélection de la couleur de texte }
        If gdSelected In State Then
          SetTextColor(Canvas.Handle,clWhite)
        Else SetTextColor(Canvas.Handle,clBlack);
        r2 := rect;
        { Dessin du texte en utilisant la fonction API }
        DrawText(Canvas.Handle, PChar(Column.Field.DisplayText), -1, r2 ,DT_NOPREFIX );
      End;
    end;
    @+ Phil

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    Merci Anapurna pour ta réponse

    J'ai l'erreur suivant : "Transtypage de de classe incorrect"
    sur la condition :
    if assigned((Sender as TDbGridHack).Datalink) Then
    y := (Sender as TDbGridHack).Datalink.ActiveRecord ;

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    remplace ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if  assigned((Sender as TDbGridHack).Datalink) Then
               y := (Sender as TDbGridHack).Datalink.ActiveRecord ;
    par ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if  assigned(TDbGridHack(Sender) .Datalink) Then
               y := TDbGridHack(Sender).Datalink.ActiveRecord ;
    @+ Phil

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    J'ai toutes mes écritures dans le DBGrid qui sont dédoublées (superposé avec un léger décalage)... du au -1 je suppose dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DrawText(Canvas.Handle, PChar(Column.Field.DisplayText), -1, r2 ,DT_NOPREFIX );
    ... et je n'ai malheureusement aucune image dans le fond de mon grid

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    bon on va essaiyer de comprendre ce qui ne fonctionne pas
    on va considere que tu as une petite image donc

    il faut modifier ce code en consequence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      R.Left   :=Point1.x;
      R.Right  :=Point1.x+Rect.Right-Rect.Left;
      R.Top    :=Point1.y;
      R.Bottom :=Point1.y+Rect.Bottom-Rect.Top;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     R.Left   :=0;
      R.Right  :=Rect.Right-Rect.Left;
      R.Top    :=0;
      R.Bottom :=Rect.Bottom-Rect.Top;
    il faudra peut voir si la fonction drawtext ne redessinerai pas e background
    avec la couleur de fond
    dans ce cas il faudra peut etre force et mettre un SetBkColor

    @+ Phil

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    Merci pour ton aide

    J'ai effectivement une petite image...
    Je pourrais l'adapter à la taille de mon grid ça ne devrait pas poser de problème.

    Maintenant je ne comprends pas pourquoi l'image n'apparait pas

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Par défaut
    J'ai oublié de te dire que j'ai essayé ta solution et qu'il m'affiche l'image dans chaque cellule

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    en fait je pense que tu n'as pas compris ce que fait copyrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CopyRect(Rect,MonBitmap.Canvas,R);
    il transfert une zone graphique (MonBitmap.Canvas) de taille et position source "R" dans un canvas de taille et position de destination (Rect)

    il faut donc avoir une image de la taille de l'ecran voulue
    et ensuite "decouper" les element de l'image pour les inserer dans les cellule

    @+ Phil

  15. #15
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Si besoin est tu peux regarder cette discussion qui traitait d'un sujet similaire
    http://www.developpez.net/forums/sho...d.php?t=140197

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 14h18
  2. hauteur de ligne dans un DBGrid
    Par mustang-gx dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/03/2004, 20h27
  3. inserer une image dans un dbgrid delphi
    Par cello dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2004, 18h51
  4. Données dans une DBgrid
    Par camino dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/02/2004, 03h40
  5. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 13h54

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