Bonjour à tous,
Est-t-il possible de mettre une image de fond dans un DBGrid.
Si oui comment faire.
Merci
Bonjour à tous,
Est-t-il possible de mettre une image de fond dans un DBGrid.
Si oui comment faire.
Merci
dans lail 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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Je l'avais vu mais je ne savais pas que ça pouvait s'appliquer à un dbgrid...
Merci beaucoup Malatar
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.
salut
bin c'est bien pourtant ce que fait le lien
je comprend pas ce que tu n'aime pas dans ce code
@+ Phil
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 ?
salut
un truc du genre devrai fonctionner
@+ Phil
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;
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 ;![]()
salut
remplace ceci
par ça
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 ;
@+ Phil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if assigned(TDbGridHack(Sender) .Datalink) Then y := TDbGridHack(Sender).Datalink.ActiveRecord ;
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 :
... et je n'ai malheureusement aucune image dans le fond de mon grid
Code : Sélectionner tout - Visualiser dans une fenêtre à part DrawText(Canvas.Handle, PChar(Column.Field.DisplayText), -1, r2 ,DT_NOPREFIX );![]()
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
par
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;
il faudra peut voir si la fonction drawtext ne redessinerai pas e background
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;
avec la couleur de fond
dans ce cas il faudra peut etre force et mettre un SetBkColor
@+ Phil
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
J'ai oublié de te dire que j'ai essayé ta solution et qu'il m'affiche l'image dans chaque cellule
salut
en fait je pense que tu n'as pas compris ce que fait copyrect
il transfert une zone graphique (MonBitmap.Canvas) de taille et position source "R" dans un canvas de taille et position de destination (Rect)
Code : Sélectionner tout - Visualiser dans une fenêtre à part CopyRect(Rect,MonBitmap.Canvas,R);
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
Si besoin est tu peux regarder cette discussion qui traitait d'un sujet similaire
http://www.developpez.net/forums/sho...d.php?t=140197
Partager