ImageList et base Access [Résolu]

Signaler
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
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

Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
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
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.
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Salut,

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

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

a+


Composants Cindy pour Delphi
Faites une donation.
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 ?
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 +
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
if Components[index] is TImage then
begin
//ton code
end;



cantador