Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Outil interactif pour gérer un fichier ILB | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Outil interactif pour gérer un fichier ILB Dim 15 Mai 2016 - 2:38 | |
| Un fichier ILB est l'image sur disque d'un objet ImageList (géré par KGF.dll). Voici un petit outil simple pour créer, modifier et visualiser de tels fichiers: - Code:
-
' creation_ILB_par_images.bas
label sortir, creer, ouvrir, fermer, enregistrer, enregistrersous label ajouterimages, afficherimage, afficherimageprecedente, afficherimagesuivante label supprimerimage
dim res%, IL%, w%, h%, titre$, lib$, racine$, filtre$, i%, s$, cnt% dim w1%, h1%, m$, isel% titre$ = "ImageLibrary - " lib$ = "<aucune>"
dll_on "KGF.dll" width 0,800 caption 0,titre$+lib$
main_menu 1 sub_menu 100 : parent 100,1 : caption 100,"Librairie" sub_menu 101 : parent 101,100 : caption 101,"Créer ILB" : on_click 101,creer sub_menu 102 : parent 102,100 : caption 102,"Ouvrir ILB" : on_click 102,ouvrir sub_menu 103 : parent 103,100 : caption 103,"Fermer ILB" : on_click 103,fermer sub_menu 104 : parent 104,100 : caption 104,"Enregistrer ILB" : on_click 104,enregistrer sub_menu 105 : parent 105,100 : caption 105,"Enregistrer ILB sous..." : on_click 105,enregistrersous sub_menu 198 : parent 198,100 : caption 198,"-" sub_menu 199 : parent 199,100 : caption 199,"Sortir" : on_click 199,sortir sub_menu 200 : parent 200,1 : caption 200,"Images" sub_menu 201 : parent 201,200 : caption 201,"Ajouter des images" : on_click 201,ajouterimages sub_menu 202 : parent 202,200 : caption 202,"Afficher une image" : on_click 202,afficherimage sub_menu 203 : parent 203,200 : caption 203,"Afficher l'image précédente" : on_click 203,afficherimageprecedente sub_menu 204 : parent 204,200 : caption 204,"Afficher l'image suivante" : on_click 204,afficherimagesuivante sub_menu 205 : parent 205,200 : caption 205,"Supprimer une image" : on_click 205,supprimerimage
alpha 10 : top 10,10 : left 10,10 : caption 10,"Largeur:" spin 11 : top 11,10 : left 11,80 : width 11,80 alpha 12 : top 12,10 : left 12,200 : caption 12,"Hauteur:" spin 13 : top 13,10 : left 13,270 : width 13,80 alpha 14 : top 14,10 : left 14,400 : caption 14,"Nombre d'images:" alpha 15 : top 15,10 : left 15,490 : caption 15,str$(cnt%)
picture 30 : top 30,40 : left 30,10
open_dialog 97 save_dialog 98 memo 99 : hide 99 : bar_both 99
end
sortir: if IL%<>0 if message_confirmation_yes_no("ILB ouverte. Abandonner le fichier ?")<>1 then return end_if res% = dll_call1("KillProcessByHandle",handle(0)) creer: if IL%<>0 message "Une ILB est ouverte." return end_if w% = position(11) h% = position(13) if (w%=0) or (h%=0) message "Les dimensions des images manquent." return end_if IL% = dll_call2("CreateImageList",w%,h%) width 30,w% : height 30,h% cnt% = 0 isel% = 0 lib$ = "<nouvelle>" caption 0,titre$+lib$ inactive 11 : inactive 13 return ouvrir: if IL%<>0 message "Une ILB est ouverte." return end_if filter 97,"ImageList (ILB)|*.ILB" s$ = file_name$(97) if s$="_" then return if file_exists(s$)=0 message "Fichier inexistant." return end_if IL% = dll_call2("CreateImageList",100,100) res% = dll_call2("LoadImageList",IL%,adr(s$)) if res%<0 message "Erreur en lecture." res% = dll_call1("DeleteImageList",IL%) I% = 0 else lib$ = s$ caption 0,titre$+lib$ cnt% = res% isel% = 0 color 30,255,255,255 caption 15,str$(cnt%) if cnt%>0 res% = dll_call5("ExtractImageFromImageList",IL%,0,0,1,0) res% = dll_call0("LoadPicture") w% = dll_call0("GetPictureWidth") h% = dll_call0("GetPictureHeight") res% = dll_call0("SavePicture") position 11,w% position 13,h% width 30,w% : height 30,h% inactive 11 : inactive 13 end_if end_if return fermer: if IL%<>0 res% = dll_call1("DeleteImageList",IL%) IL% = 0 lib$ = "<aucune>" caption 0,titre$+lib$ cnt% = 0 isel% = 0 caption 15,str$(cnt%) active 11 : active 13 end_if return enregistrer: if IL%=0 message "Aucune ILB ouverte." return end_if if left$(lib$,1)="<" gosub enregistrersous return end_if res% = dll_call2("SaveImageList",IL%,adr(lib$)) message "Enregistrement effectué." return enregistrersous: if IL%=0 message "Aucune ILB ouverte." return end_if filter 98,"ImageList (ILB)|*.ILB" s$ = file_name$(98) if s$="_" then return res% = dll_call2("SaveImageList",IL%,adr(s$)) if res%=0 lib$ = s$ caption 0,titre$+lib$ message "Enregistrement effectué." else message "Erreur en écriture." end_if return
ajouterimages: if IL%=0 message "Aucune ILB ouverte." return end_if racine$ = "C:" filtre$ = "Images (BMP,JPG,PNG,ICO)|*.BMP;*.JPG;*.PNG;*.ICO" res% = dll_call3("SelectFileToOpen",adr(racine$),adr(filtre$),handle(99)) if res%<>1 then return if count(99)=0 message "Aucune image sélectionnée." return end_if for i%=1 to count(99) s$ = item_read$(99,i%) res% = dll_call3("AnalyzeImageFile",adr(s$),adr(w1%),adr(h1%)) if (w1%<>w%) or (h1%<>h%) m$ = chr$(13)+chr$(10)+"n'a pas les bonnes dimensions et sera ignorée. Abandonner le chargement ?" if message_confirmation_yes_no("L'image "+s$+m$)=1 then return else res% = dll_call4("AddImageToImageList",IL%,adr(s$),0,0) if res%<0 message "Erreur pour image "+s$ else cnt% = cnt% + 1 caption 15,str$(cnt%) end_if pause 200 end_if next i% return afficherimage: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if s$ = message_input$("Choix de l'image","Numéro ("+str$(1)+"-"+str$(cnt%)+"):","0") if s$="0" then return if numeric(s$)=0 message "Valeur invalide." return end_if i% = val(s$) if (i%<1) or (i%>cnt%) message "Numéro d'image en-dehors de la fourchette." return end_if isel% = i% res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 return afficherimageprecedente: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if if isel%>1 isel% = isel% - 1 res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 end_if return afficherimagesuivante: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if if isel%=0 message "Aucune image sélectionnée." return end_if if isel%<cnt% isel% = isel% + 1 res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 end_if return supprimerimage: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if s$ = message_input$("Choix de l'image","Numéro ("+str$(1)+"-"+str$(cnt%)+"):","0") if s$="0" then return if numeric(s$)=0 message "Valeur invalide." return end_if i% = val(s$) if (i%<1) or (i%>cnt%) message "Numéro d'image en-dehors de la fourchette." return end_if isel% = i% res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 if message_confirmation_yes_no("Vraiment supprimer cette image ?")<>1 then return res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,1,1,0) cnt% = cnt% - 1 caption 15,str$(cnt%) isel% = 1 color 30,255,255,255 return Dans mon WebDav, dossier Jeux\Belote\Cartes, il y a des bitmaps des 52 cartes d'un jeu normal et deux dos de cartes (rouge et bleu). J'ai ajoute un fichier Cartes.ilb qui est une sauvegarde d'un objet ImageList contenant les 52 cartes suivi des deux dos de cartes, donc 54 images. Leurs dimensions sont de 71 pixels de largeur et de 96 pixels de hauteur. Ce fichier a été créé par l'utilitaire ci-dessus. Il peut être utilisé dans un jeu développé à l'aide de mon nouveau système Scene2D, avec des sprites reliés à une ImageList chargée par ce fichier. Visualiser et déplacer des cartes sur un terrain de jeu devient alors un jeu d'enfant. EDITJ'ai ajouté également, dans ce dossier, un fichier Couleurs.ilb qui contient les 4 images trèfle, pique, coeur et caro, dans cet ordre. Cet ordre est le mêle que celui retenu pour le fichier Cartes.ilb. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Outil interactif pour gérer un fichier ILB Dim 15 Mai 2016 - 23:13 | |
| Une version légèrement améliorée de cet outil, en gérant la propriété de transparence des images dans la ImageList: - Code:
-
' creation_ILB_par_images.bas
label sortir, creer, ouvrir, fermer, enregistrer, enregistrersous label ajouterimages, afficherimage, afficherimageprecedente, afficherimagesuivante label supprimerimage
dim res%, IL%, w%, h%, titre$, lib$, racine$, filtre$, i%, s$, cnt% dim w1%, h1%, m$, isel%, RGB%, R%, G%, B% titre$ = "ImageLibrary - " lib$ = "<aucune>"
dll_on "KGF.dll" width 0,800 caption 0,titre$+lib$
main_menu 1 sub_menu 100 : parent 100,1 : caption 100,"Librairie" sub_menu 101 : parent 101,100 : caption 101,"Créer ILB" : on_click 101,creer sub_menu 102 : parent 102,100 : caption 102,"Ouvrir ILB" : on_click 102,ouvrir sub_menu 103 : parent 103,100 : caption 103,"Fermer ILB" : on_click 103,fermer sub_menu 104 : parent 104,100 : caption 104,"Enregistrer ILB" : on_click 104,enregistrer sub_menu 105 : parent 105,100 : caption 105,"Enregistrer ILB sous..." : on_click 105,enregistrersous sub_menu 198 : parent 198,100 : caption 198,"-" sub_menu 199 : parent 199,100 : caption 199,"Sortir" : on_click 199,sortir sub_menu 200 : parent 200,1 : caption 200,"Images" sub_menu 201 : parent 201,200 : caption 201,"Ajouter des images" : on_click 201,ajouterimages sub_menu 202 : parent 202,200 : caption 202,"Afficher une image" : on_click 202,afficherimage sub_menu 203 : parent 203,200 : caption 203,"Afficher l'image précédente" : on_click 203,afficherimageprecedente sub_menu 204 : parent 204,200 : caption 204,"Afficher l'image suivante" : on_click 204,afficherimagesuivante sub_menu 205 : parent 205,200 : caption 205,"Supprimer une image" : on_click 205,supprimerimage
alpha 10 : top 10,10 : left 10,10 : caption 10,"Largeur:" spin 11 : top 11,10 : left 11,80 : width 11,80 alpha 12 : top 12,10 : left 12,200 : caption 12,"Hauteur:" spin 13 : top 13,10 : left 13,270 : width 13,80 alpha 14 : top 14,10 : left 14,400 : caption 14,"Nombre d'images:" alpha 15 : top 15,10 : left 15,490 : caption 15,str$(cnt%)
option 16 : top 16,40 : left 16,10 : caption 16,"Utiliser transparence" alpha 17 : top 17,40 : left 17,150 : caption 17,"R:" spin 18 : top 18,40 : left 18,170 : width 18,40 : min 18,0 : max 18,255 : position 18,0 alpha 19 : top 19,40 : left 19,230 : caption 19,"G:" spin 20 : top 20,40 : left 20,250 : width 20,40 : min 20,0 : max 20,255 : position 20,0 alpha 21 : top 21,40 : left 21,310 : caption 21,"B:" spin 22 : top 22,40 : left 22,330 : width 22,40 : min 22,0 : max 22,255 : position 22,0
picture 30 : top 30,70 : left 30,10
open_dialog 97 save_dialog 98 memo 99 : hide 99 : bar_both 99
end
sortir: if IL%<>0 if message_confirmation_yes_no("ILB ouverte. Abandonner le fichier ?")<>1 then return end_if res% = dll_call1("KillProcessByHandle",handle(0)) creer: if IL%<>0 message "Une ILB est ouverte." return end_if w% = position(11) h% = position(13) if (w%=0) or (h%=0) message "Les dimensions des images manquent." return end_if IL% = dll_call2("CreateImageList",w%,h%) width 30,w% : height 30,h% cnt% = 0 isel% = 0 lib$ = "<nouvelle>" caption 0,titre$+lib$ inactive 11 : inactive 13 return ouvrir: if IL%<>0 message "Une ILB est ouverte." return end_if filter 97,"ImageList (ILB)|*.ILB" s$ = file_name$(97) if s$="_" then return if file_exists(s$)=0 message "Fichier inexistant." return end_if IL% = dll_call2("CreateImageList",100,100) res% = dll_call2("LoadImageList",IL%,adr(s$)) if res%<0 message "Erreur en lecture." res% = dll_call1("DeleteImageList",IL%) I% = 0 else lib$ = s$ caption 0,titre$+lib$ cnt% = res% isel% = 0 color 30,255,255,255 caption 15,str$(cnt%) if cnt%>0 res% = dll_call5("ExtractImageFromImageList",IL%,0,0,1,0) res% = dll_call0("LoadPicture") w% = dll_call0("GetPictureWidth") h% = dll_call0("GetPictureHeight") res% = dll_call0("SavePicture") position 11,w% position 13,h% width 30,w% : height 30,h% inactive 11 : inactive 13 end_if end_if return fermer: if IL%<>0 res% = dll_call1("DeleteImageList",IL%) IL% = 0 lib$ = "<aucune>" caption 0,titre$+lib$ cnt% = 0 isel% = 0 caption 15,str$(cnt%) active 11 : active 13 end_if return enregistrer: if IL%=0 message "Aucune ILB ouverte." return end_if if left$(lib$,1)="<" gosub enregistrersous return end_if res% = dll_call2("SaveImageList",IL%,adr(lib$)) message "Enregistrement effectué." return enregistrersous: if IL%=0 message "Aucune ILB ouverte." return end_if filter 98,"ImageList (ILB)|*.ILB" s$ = file_name$(98) if s$="_" then return res% = dll_call2("SaveImageList",IL%,adr(s$)) if res%=0 lib$ = s$ caption 0,titre$+lib$ message "Enregistrement effectué." else message "Erreur en écriture." end_if return
ajouterimages: if IL%=0 message "Aucune ILB ouverte." return end_if racine$ = "C:\" filtre$ = "Images (BMP,JPG,PNG,ICO)|*.BMP;*.JPG;*.PNG;*.ICO" res% = dll_call3("SelectFileToOpen",adr(racine$),adr(filtre$),handle(99)) if res%<>1 then return if count(99)=0 message "Aucune image sélectionnée." return end_if R% = position(18) G% = position(20) B% = position(22) RGB% = (B%*256+G%)*256+R% for i%=1 to count(99) s$ = item_read$(99,i%) res% = dll_call3("AnalyzeImageFile",adr(s$),adr(w1%),adr(h1%)) if (w1%<>w%) or (h1%<>h%) m$ = chr$(13)+chr$(10)+"n'a pas les bonnes dimensions et sera ignorée. Abandonner le chargement ?" if message_confirmation_yes_no("L'image "+s$+m$)=1 then return else res% = dll_call4("AddImageToImageList",IL%,adr(s$),checked(16),0) if res%<0 message "Erreur pour image "+s$ else cnt% = cnt% + 1 caption 15,str$(cnt%) end_if pause 200 end_if next i% return afficherimage: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if s$ = message_input$("Choix de l'image","Numéro ("+str$(1)+"-"+str$(cnt%)+"):","0") if s$="0" then return if numeric(s$)=0 message "Valeur invalide." return end_if i% = val(s$) if (i%<1) or (i%>cnt%) message "Numéro d'image en-dehors de la fourchette." return end_if isel% = i% res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 return afficherimageprecedente: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if if isel%>1 isel% = isel% - 1 res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 end_if return afficherimagesuivante: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if if isel%=0 message "Aucune image sélectionnée." return end_if if isel%<cnt% isel% = isel% + 1 res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 end_if return supprimerimage: if IL%=0 message "Aucune ILB ouverte." return end_if if cnt%=0 message "Aucune image disponible." return end_if s$ = message_input$("Choix de l'image","Numéro ("+str$(1)+"-"+str$(cnt%)+"):","0") if s$="0" then return if numeric(s$)=0 message "Valeur invalide." return end_if i% = val(s$) if (i%<1) or (i%>cnt%) message "Numéro d'image en-dehors de la fourchette." return end_if isel% = i% res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,0,1,0) clipboard_paste 30 if message_confirmation_yes_no("Vraiment supprimer cette image ?")<>1 then return res% = dll_call5("ExtractImageFromImageList",IL%,isel%-1,1,1,0) cnt% = cnt% - 1 caption 15,str$(cnt%) isel% = 1 color 30,255,255,255 return | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Outil interactif pour gérer un fichier ILB Lun 16 Mai 2016 - 7:34 | |
| J'espère qu'il sera possible d'intégrer ce genre d'outil dans un mois dans le programme de Minibug (le Gestionnaire de projets Panoramic). On verra bien s'il y a moyen de venir greffer des modules supplémentaires assez facilementpour l'enrichir d'outils en fonction de nos besoin comme cet outil quand on utilise les ILB. Moi il faut que je m'y mette, c'est pratique mais pas eu le temps de regarder ... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Outil interactif pour gérer un fichier ILB Lun 16 Mai 2016 - 7:35 | |
| Cet outil est très utile. il va nous donner tu temps pour se consacrer à la K2d.
A+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Outil interactif pour gérer un fichier ILB Lun 16 Mai 2016 - 9:55 | |
| Bonjour tous le monde ! J'utilise cette outil dans une précédente version avec des fichiers que Klaus nomme DAT. J'ai utilisé le programme actuel sur les fichiers DAT et cela fonctionne parfaitement. Je l'utilise déjà dans GPP pour stocker les icônes des objets mais je ne l'ai pas généralisé a tout le programme. Il faut que j'y pense. - Spoiler:
- Citation :
- J'espère qu'il sera possible d'intégrer ce genre d'outil dans un mois dans le programme de Minibug
Pourquoi pas sur les prochaines versions ! Comme je l'ai déjà dit, si GPP vous intéresse, il y aura de nouvelles versions c'est sûr !
Pardon Klaus pour le hors sujet. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Outil interactif pour gérer un fichier ILB Lun 16 Mai 2016 - 14:43 | |
| T'inquiète Minibug, ce n'est pas vraiment un hors sujet. Ca m'étonnerait que Klaus nous gronde pour avoir réfléchit sur comment intégrer son outil dans un autre ou alors ce serait que nous tomberions sur le jour où il est d'humeur massacrante. Jusqu'à présent, je n'ai jamais assisté à ce jour. Comme là je suis complètement hors sujet, on va voir si je n'ai pas de chance | |
| | | Contenu sponsorisé
| Sujet: Re: Outil interactif pour gérer un fichier ILB | |
| |
| | | | Outil interactif pour gérer un fichier ILB | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |