ImageList et base Access

Résolu
JoMargue - 15 févr. 2013 à 11:59
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 15 févr. 2013 à 23:45
Bonjour à tous,

Il y a un mois, je ne connaissais pas du tout Delphi. Après avoir cherché dans les forums et les sites spécialisés, je me suis lancé et j'ai créé une application dont je suis assez content. Il s'agit de répertorier toutes les revues auxquelles je suis abonné, avec divers critères de recherches, de classement, d'édition, etc.

Tout fonctionne sauf une chose que j'ai voulu rajouter :

Dans ma base Access, j'ai un champ nommé 'Image' et qui contient devinez quoi : une image ! Au format BMP, il s'agit du scan des couvertures de mes magazines. Cette image s'affiche dans ma form principale pour le magazine sélectionné, pas de problème. Par contre, j'ai rajouté une form dans laquelle je voudrais afficher toutes les images de la base de donnée, sous forme de vignettes, par exemple.

Sur cette form, j'ai posé un TPanel qui recouvre toute la form et sur ce TPanel, j'ai posé un bon nombre de TImage.

J'ai rajouté ADOConnection, DataSource, ADOTable et un ImageList.

Voici le code que j'ai écrit :


procedure TForm1.FormActivate(Sender: TObject);
var
bmp: TBitmap;
i : Integer;

begin
for i := 0 to ADOTable1.RecordCount -1 do
try
bmp := TBitmap.Create;
bmp := ADOTable1.Fields[16];
ImageList1.Add(bmp,bmp);
begin
ImageList1.GetBitmap(i,bmp);
(Components[i+1] as TImage).Picture.Assign(bmp);
end;
finally
bmp.Free;
end;
end;


J'obtiens une erreur à la compilation :


[DCC Erreur] Couv.pas(139): E2010 Types incompatibles : 'TBitmap' et 'TField'


J'ai essayé d'autres méthodes glanées ici et là, j'ai cherché avec Google, j'ai cherché sur des forums, rien ne marche.
Je précise toutefois que si je rempli moi-même la ImageList en prenant les fichiers BMP directement sur mon disque et si je mets uniquement ce code, ça marche :

begin
for i := 0 to ADOTable1.RecordCount -1 do
try
bmp := TBitmap.Create;
begin
ImageList1.GetBitmap(i,bmp);
(Components[i+1] as TImage).Picture.Assign(bmp);
end;
finally
bmp.Free;
end;
end;


Pouvez-vous m'aider, SVP, ça fait une semaine que j'essaie de faire marcher cette procédure !

Merci à vous.

7 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 févr. 2013 à 15:26
C' est de ta faute :) !

ce n' est pas :
bmp.Assign(ADOTable1.Fields[i]);

mais :
bmp.Assign(ADOTable1.Fields[indice de ton champ image]);

a+


Composants Cindy pour Delphi
Faites une donation.
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 févr. 2013 à 13:53
Bonjour,

juste un truc qui me saute aux yeux..

Fields[i];

procedure TForm1.FormActivate(Sender: TObject);
var
bmp: TBitmap;
i : Integer;

begin
for i := 0 to ADOTable1.RecordCount -1 do
try
bmp := TBitmap.Create;
bmp := ADOTable1.Fields[i];
ImageList1.Add(bmp,bmp);
begin
ImageList1.GetBitmap(i,bmp);
(Components[i+1] as TImage).Picture.Assign(bmp);
end;
finally
bmp.Free;
end;
end; 


pas testé, car très occupé en ce moment
voir si ça marche

cantador
0
Salut Cantador,

Tout d'abord, merci d'avoir pris le temps de me lire et de répondre.

Fields[16] parce que le champs 'image' porte le numéro 16 dans ma base. J'avais déjà testé Fields[i] mais ça me renvoie la même erreur.
J'ai oublié de préciser que l'erreur était justement sur cette ligne.

Le problème, c'est d'arriver à extraire le contenu du champ BLOB de ma table pour alimenter mon ImageList.

Si quelqu'un a déjà testé ça ou connait la procédure, merci d'avance.
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 févr. 2013 à 14:44
Salut,

change:
bmp := ADOTable1.Fields[i];

avec:
bmp.Assign(ADOTable1.Fields[i]);

a+


Composants Cindy pour Delphi
Faites une donation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut Mauricio,

Merci également à toi.

Ça fonctionne, tout au moins, il n'y a plus d'erreur à la compilation et mon application se lance bien.
Par contre, lorsque je clique sur le bouton qui ouvre la form dans laquelle j'ai mes TImages, j'ai un plantage avec ce message :

Le projet Mes_Magazines.exe a déclenché la classe d'exception EConvertError avec le message 'Impossible d'affecter TAutoIncField à TBitMap'.

Je comprends à peu près le sens de ce message, par contre, je ne sais pas comment résoudre cette erreur.

Autre précision :
Mon ImageList fait 200 (H) par 148 (W).
Chaque Timage fait également 200 x 148.
Chacune de mes images est bien au format Bmp et a exactement les mêmes dimensions que le ImageList, soit 200 x 148.

La ligne surlignée au moment de l'erreur est celle-ci :
ImageList1.Add(bmp,bmp);

Est-ce-que la syntaxe est bonne ?

Une idée ?
0
YESSSSSS !

Ça marche !

Merci beaucoup Mauricio. Grâce à toi, je vais enfin pouvoir dormir tranquillement !

Il me reste néanmoins à changer les index dans la boucle 'i', car le Components[1] et le [2] ne sont certainement pas des TImages.

Merci encore.

A +
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 févr. 2013 à 23:45
if Components[index] is TImage then
begin
//ton code
end;



cantador
0
Rejoignez-nous