Bonjour à tous, après plusieurs mois d'admiration sur la qualité et l’exhaustivité du site je décide de me lancer...
Dans une application Access que je développe je rencontre le problème suivant. J'ai un formulaire utilisant un Treeview qui s'appui pour les icônes sur un contrôle CtrlImageListe selon une démarche très largement décrite dans les forum du site (merci à tous ++++). Pour des raison de maintenance et de mise à jour, j'ai besoin d'approvisionner le CtrlImageListe en question avec des nouvelles images externes à la base ou à partir d'images déja présente sur le fomulaire dans des Contrôle Image.
Je parviens parfaitement à charger mes images par itérations manuelles de l'interfaces du CtrlImageListe en mode design dans le formulaire. Les images sont des icones 64x64 de profondeur de couleur 16 ou 24 bits. Mais dès que je passe en VBA pour le faire de manière plus exhaustive depuis une table contenant les URL des icones (ex: "c:\temp\icone1.ico") les images sont incorporées avec une profondeur de seulement 4bits (16 couleurs). Je ne parviens pas à paramétrer la fonction loadpicture qui assigne (je pense) l'image dans CtrlImageListe. J'execute une commande de type
"Forms(strNameFormConteneur).Controls(strCtrlListeImage).ListImages.Add i, rs.Fields("TW_ICON_NAME").Value, LoadPicture(strURL_ICON)".
Voici mon code (soyer indulgents, je débute et certaines règles de formalisation me sont inconnues).
-Existe-t-il une syntaxe de Loadpicture fonctionnant dans cette environnement Access permettant de gérer la profondeur de couleur ? La syntaxe proposée par MSDN " ex: LoadPicture("PAPER.CUR", vbLPCustom, vbLPColor, 32, 32) " ne me semble pas fonctionnelle dans mon cas (problème d'environnement ?).
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 Public Function CHARGER_IMAGE_DANS_CtrlImageListe_DEPUIS_TABLE_T_TW_ICONES(strNameFormConteneur As String, strCtrlListeImage As String, lgTailleIcon As Long) Dim i As Long Dim rs As DAO.Recordset Dim strSQL As String Dim strURL_ICON As String i = 0 strSQL = "SELECT T_TW_ICONES.TW_ICON_NAME, T_TW_ICONES.ICON_URL, T_TW_ICONES.TAILLE " strSQL = strSQL + "FROM T_TW_ICONES " strSQL = strSQL + "WHERE (((T_TW_ICONES.TAILLE)=" & lgTailleIcon & "));" Set rs = CurrentDb.OpenRecordset(strSQL) DoCmd.OpenForm strNameFormConteneur, acDesign Forms(strNameFormConteneur).Controls(strCtrlListeImage).ListImages.Clear Forms(strNameFormConteneur).Controls(strCtrlListeImage).ImageWidth = lgTailleIcon Forms(strNameFormConteneur).Controls(strCtrlListeImage).ImageHeight = lgTailleIcon Forms(strNameFormConteneur).Controls(strCtrlListeImage).UseMaskColor = False While Not rs.EOF i = i + 1 strURL_ICON = rs.Fields("ICON_URL").Value Forms(strNameFormConteneur).Controls(strCtrlListeImage).ListImages.Add i, rs.Fields("TW_ICON_NAME").Value, LoadPicture(strURL_ICON) rs.MoveNext Wend MsgBox i & " images chargées" DoCmd.Close acForm, strNameFormConteneur, acSaveYes Set rs = Nothing End Function
-Peut-on alimenter le CtrlImageListe par une méthode autre ne passant pas par la fonction loadpicture () et notament à partir d'une image présente dans un controle Image situé sur le même formulaire en mode design.
Cordialement.
Partager