Bonjour j'ai une question,
Comment peut-on insérer une image dans une case d'une stringGrid?
Merçi ;)
Version imprimable
Bonjour j'ai une question,
Comment peut-on insérer une image dans une case d'une stringGrid?
Merçi ;)
Slt! :D
Il faut que tu créés un composant héritant de la StringGrid et mettant des composants images dans une cellule. C'est le même système que la fois ou quelqu'un avait demander de mettre des checkbox. Malheureusement, je crois que ce thread a été supprimer :S
A+! :D
mouarf merçi mais il n'y a pas moyen d'avoir une approche? un p'tit coup de pouce quoi lol parceque c'est unpeu complex pour moi :oops:
j'ai unpeu trifouiller dans le monde d'héritage de nouveraux composants mais je ne vois pas comment je pourrai modifier ma stringgrid pour qu'el puisse porter une image enfin des images
Tu as de possibilité
1° soit tu t'orientes vers des composant qui font deja cela ( ex: TmsSoftWare )
2° soit sans vouloir developper un composant specifique , tu peux dessiner ce que tu veux dans une cellule en passant par l'evenement OndrawCell de ton stringGrid.
Bye.
Merci pour les astuces.
Je vois pas vraiment comment je pourrai procéder pour efféctuer ma tâche :sCitation:
Envoyé par petitcoucou31
Bon je change de question, y'a t-il moyen d'insérer des bouttons dans une string grid (1 buton par case)? je sais que oui lol mais comment?
à part créer un nouveau composant (ce que j'ai du mal à faire) je ne vois pas autrement...
Salut ! ;)
Avec une TDrawGrid plutôt qu'une TStringGrid...
http://www.developpez.net/forums/viewtopic.php?t=319435
http://sub0.developpez.com/tag.png
Bonjour,
Ce qui est dommage, c'est que le composant DrawGrid n'a pas la propriété "Object[]".
Et j'en ai absolument besoin.
N'y a t-il pas moyen de mettre dynamiquement une image différente dans chaque cellule d'une colonne ?
Sans passer par un imageList, ce serait le pied.
Merci D'avance.
La démo de mon puissance4 répond à ta question je pense, en utilisant l'evènement OnDrawCell (voir dans unit1.pas la méthode GrilleDrawCell)...Citation:
Envoyé par petitcoucou31
Pour simplifier, il faut d'abord créer (sans oublier de la libérer) une variable globale de type TBitmap pour pouvoir récupérer les images d'une liste :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Var bmp: TBitmap; Procedure TForm1.FormCreate(Sender: TObject); Begin bmp := TBitmap.Create; End; Procedure TForm1.FormDestroy(Sender: TObject); Begin bmp.Free; End; Procedure TForm1.GrilleDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Var index: Integer; Begin index := 0; // Numéro de l'image dans la liste ImageList1.GetBitmap(index, bmp); Grille.Canvas.Draw(Rect.Left, Rect.Top, bmp); End;
Bonjour Sub0,
Sympa ton prog... Très propre.
Seulement, j'aimerais ne pas passer par un imageList.
En effet, je ne connais pas à l'avance les images à afficher, c'est dynamique.
De plus, je ne veux pas qu'elles soient formatées à la même taille.
Et pour finir, j'ai l'impression que tImageList "retravaille" les images avant de les stoquer.
Est ce possible de ne passer que par un seul et même tBitmap par exemple ?
Juste comme ça: Pourquoi passes tu par un tBitmap... Tu peux dessiner directement depuis le tImageList de cette manière:
ImageList1.Draw(Canvas, Rect.Left, Rect.Top, numImage);
Merci.
Un Array of TBitmap (ou Timage) fera l'affaire, non ?
Oui, tu peux par exemple utiliser les ressources pour stocker tes bitmaps dans l'EXE, ou bien directement sur le disque en utilisant Loadfromfile...
En effet, bien vu!
Oui, j'ai choisit l'option loadFromFile() de tBitmap.
Ca marche plutot bien, seulement j'ai un problème.
Je n'arrive pas à redimenssionner l'image à la taille de la cellule.
J'ai fait des stretchDraw et des copyRect, mais rien n'y fait.
En fait, j'ai lu qu'il fallait le copier dans un autre composant en lui donnant sa nouvelle taille (avec copyRect entre autres), mais je dois mal m'y prendre.
Voici un extrait de mon code (il y a plusieurs essais):
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var monBmp: TBitmap; begin with StringGrid1 do begin if ACol=0 then begin if ARow>0 then begin monBmp := TBitmap.Create; monBmp.LoadFromFile('images2.bmp'); monBmp.Width := 30; monBmp.Height := 30; //StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, monBmp); //StringGrid1.Canvas.StretchDraw(Rect, monBmp); StringGrid1.Canvas.CopyRect(Rect, monBmp.Canvas, monBmp.Canvas.ClipRect); //StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic); //StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, img.Picture.Graphic); //StringGrid1.Objects[ACol, ARow] := Image1; end; end ... End;
Pour réduire ton bitmap, je te conseille vivement de regarder cette démo. Il s'agit d'un redimensionnement avec un filtre anti-aliasing, ce qui te permettra d'obtenir une qualité d'image supérieure surtout pour réduire les images... Dans tous les cas, (selon moi) tu dois créer un 2ème bitmap de "destination".
Ps: Pour tester la démo, redimensionne la fenêtre tout simplement, l'image s'ajustera. A noter que tu peux choisir entre différente méthodes d'anti-aliasing selon ton besoin. "NearEst" te montrera un résultat sans filtre... J'ai utilisé cette technique pour le redimensionnement de mon jeu d'échecs...
Vraiment pas mal ton jeu d'échec.
Par curiosité, c'est toi qui a fait l'algorithme de réflexion du jeu ?
Sinon, pour le redimensionnement, je regarde ça tout de suite.
Merci en tout cas.
La base de cette IA est un code récupéré d'une demo de Borland fournie avec TurboPascal7 : OWLChess. J'ai corrigé un certain nombre de bugs puis je l'ai extrait de l'interface du jeu original. Ensuite je l'ai intégré à mon programme Delphi, un simple "arbitre" (jeu sans IA avec le code source). Donc, même si je ne suis pas l'auteur, j'ai épluché ce code, je l'ai compris, et je l'ai retravaillé et même amélioré. De toutes façons, je crois qu'il m'aurait été impossible de créer une telle IA en partant de rien! Je n'ai pas le niveau pour créer ce genre d'algo mais au moins le comprendre...Citation:
Par curiosité, c'est toi qui a fait l'algorithme de réflexion du jeu ?