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 |
|
|
| KGF_dll - nouvelles versions | |
|
+12JL35 Oscaribout bignono Pedro pascal10000 silverman Jicehel papydall Minibug Marc Yannick Klaus 16 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 14 Juin 2017 - 13:17 | |
| Essaie avec le programme suivant, que j'ai posté également sur ton autre post, plus spécifique à ce problème: - Code:
-
caption 0,"Exemple d utilisation de Outils Couleurs" dim res%,path$,param$,folder$, c$ c$ = chr$(34) dll_on "KGF.dll" open_dialog 1 path$ = file_name$(1) if path$="_" then terminate param$ = str$(Handle_form("Exemple d utilisation de Outils Couleurs")) folder$ = "" res% = DLL_call4("ExecuteProgram",adr(path$),adr(param$),adr(folder$),0) if res%<0 message "Echec du lancement !" end_if
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 13:03 | |
| Nouvelle version: KGF.dll V7.75 du 26/06/2017Nouveautés: - affichage optionnel d'icônes dans les menus PanoramicModules modifiés: KGF.dllLa doc est inchangée. Les sources sont à jour. Suite à la suggestion de Papydall, j'ai analysé le source dont il parlait. Et au lieu de réinventer de nouveaux objets MAIN_MENU et SUB_MENU, j'ai simplement créé des fonctions permettant d'afficher des icônes optionnelles dans les objets Panoramic existants. Pour cela, j'ai créé les quatre fonctions suivantes dans KGF.dll: - Code:
-
N_Icons% = dll_call2("SetMenuImageList",object_internal(main%),adr(il$)) Cette fonction charge une ImageList interne avec le contenu d'un fichier et l'attache au MAIN_MENU. main% est le numéro d'objet du MAIN_MENU de Panoramic, et il$ est une chaîne de caractères contenant le nom du fichier "sauvegarde" d'une imagelist avec les icônes. La fonction retourne le nombre d'icônes dans le fichier. - Code:
-
res% = dll_call2("SetSubMenuImageIndex",object_internal(sub%),ind%) Cette fonction impose une icône à afficher sur une ligne de menu. sub% est le numéro d'objet d'un SUB_MENU de Panoramic, et ind% est l'indice de l'image (0, 1, ..., n-1) dans la ImageList. Une valeur de -1 supprime l'affichage de l'icône sur cette ligne. - Code:
-
N_Icons% = dll_call0("GetMenuImageListCount") Cette fonction retourne le nombre d'icônes présentes - Code:
-
res% = dll_call1("CopyMenuImageListIcon",ind%) Cette fonction copie une image de la ImageList dans le presse-papier ind% est l'indice d'une icône dans la ImageList (0, 1, 2, ... n-1) Dans mon WebDav, dossier DLLs, il y a un fichier MenuIcons.dat qui contient 47 icônes (0...46) à utiliser ainsi. On peut en créer d'autres. Voici une petite démo rapide: - Code:
-
label montrer dim res%, ind%, N_Icons%, il$ il$ = "MenuIcons.dat"
main_menu 100 sub_menu 110 : parent 110,100 : caption 110,"Fichiers" sub_menu 111 : parent 111,110 : caption 111,"Nouveau" sub_menu 112 : parent 112,110 : caption 112,"-" sub_menu 113 : parent 113,110 : caption 113,"Sortir" dll_on "KGF.dll"
N_Icons% = dll_call2("SetMenuImageList",object_internal(100),adr(il$)) res% = dll_call2("SetSubMenuImageIndex",object_internal(110),0) res% = dll_call2("SetSubMenuImageIndex",object_internal(111),1)
button 1 : top 1,10 : left 1,10 : caption 1,"Montrer" : on_click 1,montrer picture 2 : top 2,40 : left 2,10 : stretch_on 2 alpha 3 : top 3,70 : left 3,width(2)+20 : font_size 3,12
ind% = 0 end
montrer: res% = dll_call1("CopyMenuImageListIcon",ind%) clipboard_paste 2 caption 3,"Indice: "+str$(ind%) ind% = ind% + 1 if ind%=N_Icons% then ind% = 0
return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 26 Juin 2017 - 13:56 | |
| Quels sont les dimensions pour les images de l' imagelist ?.. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 13:58 | |
| Toutes les icônes sont au format 16x16 pixels. Je vais fournir également un outil de fabriquer ce fichier qui n'est pas forcément compatible avec les ImageList existantes. Quoique... à essayer. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 15:10 | |
| Si, le format des ImageList est compatible ! J'ai fait une légère modif dans la DLL (sans changement de version) et on peut maintenant changer librement la ImageList, à condition qu'elle contienne des images de 16x16 pixels. Voici une démo avec un bouton supplémentaire pour remplacer la bibliothèque par défaut, en ouvrant un des fichiers *.ilb: - Code:
-
' test_MenuIcons.bas
label montrer, nouveau dim res%, ind%, N_Icons%, il$, f$ il$ = "MenuIcons.dat"
main_menu 100 sub_menu 110 : parent 110,100 : caption 110,"Fichiers" sub_menu 111 : parent 111,110 : caption 111,"Nouveau" sub_menu 112 : parent 112,110 : caption 112,"-" sub_menu 113 : parent 113,110 : caption 113,"Sortir" dll_on "KGF.dll"
N_Icons% = dll_call2("SetMenuImageList",object_internal(100),adr(il$)) res% = dll_call2("SetSubMenuImageIndex",object_internal(110),0) res% = dll_call2("SetSubMenuImageIndex",object_internal(111),1)
button 1 : top 1,10 : left 1,10 : caption 1,"Montrer" : on_click 1,montrer picture 2 : top 2,40 : left 2,10 : stretch_on 2 alpha 3 : top 3,70 : left 3,width(2)+20 : font_size 3,12
button 10 : top 10,10 : left 10,200 : caption 10,"Nouveau" : on_click 10,Nouveau open_dialog 11 : filter 11,"ImageList|*.ilb"
ind% = 0 end
montrer: res% = dll_call1("CopyMenuImageListIcon",ind%) clipboard_paste 2 caption 3,"Indice: "+str$(ind%) ind% = ind% + 1 if ind%=N_Icons% then ind% = 0
return
nouveau: f$ = file_name$(11) if f$="_" then return N_Icons% = dll_call2("SetMenuImageList",object_internal(100),adr(f$)) return
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 15:47 | |
| La doc KGF.chm est à jour, sur les deux sites, sur le WebDav et sur la doc en ligne ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 26 Juin 2017 - 18:24 | |
| Super, on va pouvoir faire de super main_menu. En plus, cela doit aussi fonctionner avec MAIN_MENU_POP. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 21:15 | |
| - Citation :
- En plus, cela doit aussi fonctionner avec MAIN_MENU_POP.
Oups... Je n'ai pas essayé ça. Mais je vais tester ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 22:08 | |
| Nouvelle version: KGF.dll V7.76 du 26/06/2017Nouveautés: - affichage optionnel d'icônes dans les menus popup PanoramicModules modifiés: KGF.dllLa doc est inchangée. Les sources sont à jour. Les fonctions précédentes gérant mes icônes pour le MainMenu on reçu un "Main" devant "Menu" dans leur nom. Ces 4 fonctions ont été dupliquées avec un "Popup" devant "Menu", et une imagelist séparée a été créé dans KGF.dll, permettant de charger des suite d'icônes différentes pour le MainMenu et pour le PopupMenu, bien que la même imagelist puisse très bien être utilisée dans les deux cas. Voici le programme de démo adapté à cela: - Code:
-
' test_MenuIcons.bas
label montrerMain, nouveauMain, montrerPopup, nouveauPopup dim res%, indMain%, indPopup%, N_Icons%, N_Icons_Pop%, il$, f$ il$ = "MenuIcons.dat"
main_menu 100 sub_menu 110 : parent 110,100 : caption 110,"Fichiers" sub_menu 111 : parent 111,110 : caption 111,"Nouveau" sub_menu 112 : parent 112,110 : caption 112,"-" sub_menu 113 : parent 113,110 : caption 113,"Sortir" main_menu_pop 200 sub_menu 210 : parent 210,200 : caption 210,"Fichiers - pop" sub_menu 211 : parent 211,210 : caption 211,"Nouveau - pop" sub_menu 212 : parent 212,210 : caption 212,"-" sub_menu 213 : parent 213,210 : caption 213,"Sortir - pop" dll_on "KGF.dll"
N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(il$)) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(110),0) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(111),1) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(113),2)
N_Icons_Pop% = dll_call2("SetPopupMenuImageList",object_internal(200),adr(il$)) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(210),3) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(211),4) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(213),5)
button 1 : top 1,10 : left 1,10 : caption 1,"Montrer Main" : on_click 1,montrerMain button 11 : top 11,10 : left 11,90 : caption 11,"Montrer Popup" : on_click 11,montrerPopup picture 2 : top 2,40 : left 2,10 : stretch_on 2 alpha 3 : top 3,70 : left 3,width(2)+20 : font_size 3,12
button 10 : top 10,10 : left 10,200 : caption 10,"Nouveau Main" : on_click 10,NouveauMain button 20 : top 20,10 : left 20,280 : width 20,90 : caption 20,"Nouveau Popup" : on_click 20,NouveauPopup open_dialog 12 : filter 12,"ImageList|*.ilb"
indMain% = 0 indPopup% = 0 end
montrerMain: res% = dll_call1("CopyMainMenuImageListIcon",indMain%) clipboard_paste 2 caption 3,"Indice: "+str$(indMain%) indMain% = indMain% + 1 if indMain%=N_Icons% then indMain% = 0 return
nouveauMain: f$ = file_name$(12) if f$="_" then return N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(f$)) indMain% = 0 return montrerPopup: res% = dll_call1("CopyPopupMenuImageListIcon",indPopup%) clipboard_paste 2 caption 3,"Indice: "+str$(indPopup%) indPopup% = indPopup% + 1 if indPopup%=N_Icons_Pop% then indPopup% = 0 return
nouveauPopup: f$ = file_name$(12) if f$="_" then return N_Icons%_pop = dll_call2("SetPopupMenuImageList",object_internal(200),adr(f$)) indPopup% = 0 return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 26 Juin 2017 - 22:21 | |
| Super Klaus ! Je viens de mettre des icones dans mon main_menu pour les utilisateurs de Windows. Maintenant je vais pouvoir continuer à en mettre dans le menu pop_up.. la variable system$ est superbe pour offrir des options supplémentaires aux utilisateur de windows via les fonctions de KGF. Mais il y en a certaines que je dois faire en Panoramic pour rester compatible entre les OS. Peut-être qu' un jour quelqu' un reprendra KGF pour en faire une version MAC... En attendant, cela fait quelques temps que j' attendais cette possibilité. Elle est là et c' est une double gigue ce soir ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 22:25 | |
| - Citation :
- Peut-être qu' un jour quelqu' un reprendra KGF pour en faire une version MAC...
Vaste projet ! J'avais essayé de porter KGF.dll sous Lazarus pour le rendre plus portable. J'ai abandonné. Mais les sources sont à libre disposition, pour toutes les bonnes volontées... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 26 Juin 2017 - 22:30 | |
| Oui, c' est ce que j' avais relevé dans un autre sujet ou la critique prenait le pas sur les commentaires. Je ne connais pas le niveau de Irikte mais comme il a l' air d' être le seul sur cet OS peut-être sera t il tenté... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 23:12 | |
| Voici ce que cela représente, en volume: - Citation :
- KGF.dpr 189 lignes = fichier de base du projet
*.pas 299 fichiers 239296 lignes = tous les modules composant KGF.dll C'est énorme... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 26 Juin 2017 - 23:32 | |
| Petite info supplémentaire: les fonctions SetSubMainMenuImageIndex et SetSubPopupMenuImageIndex peuvent être appelées plusieurs fois, pour la même ligne de menu. L'effet sera un changement d'icône sur la ligne ! En passant un indice de -1, on efface l'icône de la ligne !
Ceci est mon post numéro DIX MILLE sur ce forum !
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 1:05 | |
| Pour apporter mon grain de sel et faire un peu pro, j’ai modifié le dernier code-exemple de Klaus pour ajouter des raccourcis-clavier. Dans les captions de sub-menu, si on précède le texte par le caractère 9 (tabulation), ça permet une justification du texte à droite et surtout le soulignement du caractère servant comme raccourcis. (le choix du caractère est fait par le système lui-même). Par contre, dans les captions de button, c’est le caractère Ampersand (&) qui indique la lettre servant comme raccourcis et la souligne. Dans les deux cas (sub-menu ou button), on peut soit cliquer, soit taper la lettre soulignée. - Code:
-
' test_MenuIcons.bas
label montrerMain, nouveauMain, montrerPopup, nouveauPopup dim res%, indMain%, indPopup%, N_Icons%, N_Icons_Pop%, il$, f$ dim tab$ : tab$ = chr$(9) : ' <---------------------------------------- Papydall font_name 0,"arial" : ' <---------------------------------------- Papydall il$ = "MenuIcons.dat"
main_menu 100 sub_menu 110 : parent 110,100 : caption 110,"Fichiers" sub_menu 111 : parent 111,110 : caption 111,tab$ + "Nouveau" :' <-- Papydall sub_menu 112 : parent 112,110 : caption 112,"-" sub_menu 113 : parent 113,110 : caption 113,tab$ + "Sortir" :' <-- Papydall main_menu_pop 200 sub_menu 210 : parent 210,200 : caption 210,"Fichiers - pop" sub_menu 211 : parent 211,210 : caption 211,"Nouveau - pop" sub_menu 212 : parent 212,210 : caption 212,"-" sub_menu 213 : parent 213,210 : caption 213,"Sortir - pop" dll_on "KGF.dll"
N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(il$)) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(110),0) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(111),1) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(113),2)
N_Icons_Pop% = dll_call2("SetPopupMenuImageList",object_internal(200),adr(il$)) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(210),3) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(211),4) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(213),5)
button 1 : top 1,10 : left 1,10 : caption 1,"&Montrer Main" : on_click 1,montrerMain :' <-- Papydall button 11 : top 11,10 : left 11,90 : caption 11,"Montrer &Popup" : on_click 11,montrerPopup :' <-- Papydall picture 2 : top 2,40 : left 2,10 : stretch_on 2 alpha 3 : top 3,70 : left 3,width(2)+20 : font_size 3,12
button 10 : top 10,10 : left 10,200 : caption 10,"Nouveau M&ain" : on_click 10,NouveauMain :' <-- Papydall button 20 : top 20,10 : left 20,280 : width 20,90 : caption 20,"Nouveau P&opup" : on_click 20,NouveauPopup :' <-- Papydall open_dialog 12 : filter 12,"ImageList|*.ilb"
indMain% = 0 indPopup% = 0 end
montrerMain: res% = dll_call1("CopyMainMenuImageListIcon",indMain%) clipboard_paste 2 caption 3,"Indice: "+str$(indMain%) indMain% = indMain% + 1 if indMain%=N_Icons% then indMain% = 0 return
nouveauMain: f$ = file_name$(12) if f$="_" then return N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(f$)) indMain% = 0 return montrerPopup: res% = dll_call1("CopyPopupMenuImageListIcon",indPopup%) clipboard_paste 2 caption 3,"Indice: "+str$(indPopup%) indPopup% = indPopup% + 1 if indPopup%=N_Icons_Pop% then indPopup% = 0 return
nouveauPopup: f$ = file_name$(12) if f$="_" then return N_Icons%_pop = dll_call2("SetPopupMenuImageList",object_internal(200),adr(f$)) indPopup% = 0 return
Les lignes ajoutées ou modifiées sont repérées par ' <-- Papydall Ceci est mon post numéro cinq mille trois cent quatre-vingt-huit sur ce forum ! C'est très loin derrière Klaus | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 1:14 | |
| Très bien, Papydall ! C'est en effet plus "pro". Voici un petit bonus - un outil pour inspecter et sélectionner l'icône approprié: - Code:
-
' visualier_les_icones_du_menu.bas
label debut, fin, prec, suiv, ilb, defaut
dim res%, ilb$, icon%, ind%, f$
ilb$ = "MenuIcons.dat"
dll_on "KGF.dll"
main_menu 100
button 1 : top 1,10 : left 1, 10 :caption 1,"Début" : on_click 1,debut button 2 : top 2,10 : left 2,100 :caption 2,"Précédent" : on_click 2,prec button 3 : top 3,10 : left 3,190 :caption 3,"Suivant" : on_click 3,suiv button 4 : top 4,10 : left 4,280 :caption 4,"Fin" : on_click 4,fin
picture 10 : top 10,60 :left 10,120 : width 10,16 : height 10,16 picture 11 : top 11,60 :left 11,160 : stretch_on 11 alpha 12 : top 12,180 : left 12,160
button 21 : top 21,60 : left 21,300 : caption 21,"ILB" : on_click 21,ilb button 22 : top 22,90 : left 22,300 : caption 22,"Défaut" : on_click 22,defaut
open_dialog 31 : filter 31,"ImageList|*.ilb"
icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(ilb$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) end
debut: ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return prec: if ind%=0 then return ind% = ind% - 1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return suiv: if ind%=(icon%-1) then return ind% = ind% + 1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return fin: ind% = icon%-1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return ilb: f$ = file_name$(31) if f$="_" then return if file_exists(f$)=0 then return icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(f$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return defaut: icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(ilb$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return
D'ailleurs, et je pense que cela intéresse surtout Yannick: avez-vous remarqué que, dans ce code, il y a seulement un objet MAIN_MENU, mais pas de SUB_MENU ? Un MAIN_MENU est suffisant pour charger une ImageList (fichier de type ILB) et permet de la parcourir ! Pas besoin de créer un objet ImageList pour cela ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 1:42 | |
| - Klaus a écrit:
- D'ailleurs, et je pense que cela intéresse surtout Yannick: avez-vous remarqué que, dans ce code, il y a seulement un objet MAIN_MENU, mais pas de SUB_MENU ? Un MAIN_MENU est suffisant pour charger une ImageList (fichier de type ILB) et permet de la parcourir ! Pas besoin de créer un objet ImageList pour cela !
Puisque c’est ainsi, je rajoute les raccourcis, si, si ! - Code:
-
' visualier_les_icones_du_menu.bas label debut, fin, prec, suiv, ilb, defaut dim res%, ilb$, icon%, ind%, f$ ilb$ = "MenuIcons.dat"
dll_on "KGF.dll"
main_menu 100
button 1 : top 1,10 : left 1, 10 :caption 1,"&Début" : on_click 1,debut button 2 : top 2,10 : left 2,100 :caption 2,"&Précédent" : on_click 2,prec button 3 : top 3,10 : left 3,190 :caption 3,"&Suivant" : on_click 3,suiv button 4 : top 4,10 : left 4,280 :caption 4,"&Fin" : on_click 4,fin
picture 10 : top 10,60 :left 10,120 : width 10,16 : height 10,16 picture 11 : top 11,60 :left 11,160 : stretch_on 11 alpha 12 : top 12,180 : left 12,160
button 21 : top 21,60 : left 21,300 : caption 21,"&ILB" : on_click 21,ilb button 22 : top 22,90 : left 22,300 : caption 22,"Dé&faut" : on_click 22,defaut
open_dialog 31 : filter 31,"ImageList|*.ilb"
icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(ilb$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) end
debut: ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return prec: if ind%=0 then return ind% = ind% - 1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return suiv: if ind%=(icon%-1) then return ind% = ind% + 1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return fin: ind% = icon%-1 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return ilb: f$ = file_name$(31) if f$="_" then return if file_exists(f$)=0 then return icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(f$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return defaut: icon% = dll_call2("SetMainMenuImageList",object_internal(100),adr(ilb$)) ind% = 0 res% = dll_call1("CopyMainMenuImageListIcon",ind%) clipboard_paste 10 clipboard_paste 11 caption 12,"Indice: "+str$(ind%)+"/"+str$(icon%-1) return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 27 Juin 2017 - 9:28 | |
| Pour ma part, j' en suis 7871 ! Que de touches martyrisées à nous 3...environ 1/3 des messages du forum - Klaus a écrit:
- D'ailleurs, et je pense que cela intéresse surtout Yannick: avez-vous remarqué que, dans ce code, il y a seulement un objet MAIN_MENU, mais pas de SUB_MENU ? Un MAIN_MENU est suffisant pour charger une ImageList (fichier de type ILB) et permet de la parcourir ! Pas besoin de créer un objet ImageList pour cela !
C' est une curiosité mais bon on ne va pas faire la fine bouche pour une fois que windows nous fait faire des économies d' écriture... Pouvoir changer les icônes çà c' est le must par rapport au thème choisi par l' utilisateur. voir pour les menus multiple style oui/non ou pour remplacer un check par une puce plus joli. En tout cas félicitations pour ces nouvelles fonctions. Et bravo à Papydall pour les ajouts. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 13:20 | |
| Nouvelle version: KGF.dll V7.77 du 27/06/2017 Nouveautés: - nouvelles fonctions SetSubMainMenuGroupID et SetSubPopupMenuGroupIDModules modifiés: KGF.dll KGF.chmLa doc et les sources sont à jour. La doc est réorganisée. Les fonctions de gestion du menu ont été regroupées dans un chapitre approprié accessible directement par le sommaire. Et j'ai rendu accessible la notion de "groupe" de lignes. Cette notion permet de lier deux ou plusieus lignes (d'un même sous-menu) de sorte à former un genre de CONTAINER_OPTION dans ce sous-menu ! Une seule ligne de ce groupe sera toujours cochée, et le fait de cliquer sur une autre ligne décoche la ligne actuellement cichée. Juste une remarque: le fait d'afficher des icônes sur une ligne de menu "cache" la checkbox montrant le fait d'être coché ou non. Ces deux choix sont donc mutuellement exclusifs. Dans le programme de démo ci-après, le menu "Fichiers" a été étendu pour avoir 3 lignes avant le séparateur. Ces 3 lignes forment le groupe 1 et on peut observer l'action du clic sur une de ces lignes. Le menu popup a été étendu de la même manière, mais sans définir un groupe, et donc chaque ligne peut montrer une icone. Cet aspect des "groupes" permet de faire des choses sympathiques dans les menus, au niveau de la configuration d'un logiciel, par exemple. - Code:
-
' test_MenuIcons.bas
label montrerMain, nouveauMain, montrerPopup, nouveauPopup dim res%, indMain%, indPopup%, N_Icons%, N_Icons_Pop%, il$, f$ il$ = "MenuIcons.dat"
main_menu 100 sub_menu 110 : parent 110,100 : caption 110,"Fichiers" sub_menu 111 : parent 111,110 : caption 111,"Nouveau" sub_menu 112 : parent 112,110 : caption 112,"Ouvrir" sub_menu 113 : parent 113,110 : caption 113,"Enregistrer" sub_menu 114 : parent 114,110 : caption 114,"-" sub_menu 115 : parent 115,110 : caption 115,"Sortir" main_menu_pop 200 sub_menu 210 : parent 210,200 : caption 210,"Fichiers - pop" sub_menu 211 : parent 211,210 : caption 211,"Nouveau - pop" sub_menu 212 : parent 212,210 : caption 212,"Ouvrir" sub_menu 213 : parent 213,210 : caption 213,"Enregistrer" sub_menu 214 : parent 214,210 : caption 214,"-" sub_menu 215 : parent 215,210 : caption 215,"Sortir - pop" dll_on "KGF.dll"
' les icônes pour le MAIN_MENU N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(il$)) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(110),0) ' les 3 lignes suivantes dy menu seront un groupe de type OPTION ' res% = dll_call2("SetSubMainMenuImageIndex",object_internal(111),1) ' res% = dll_call2("SetSubMainMenuImageIndex",object_internal(112),2) ' res% = dll_call2("SetSubMainMenuImageIndex",object_internal(113),3) res% = dll_call2("SetSubMainMenuImageIndex",object_internal(115),4)
' joindre ces 3 lignes en un groupe de OPTION no 1 res% = dll_call2("SetSubMainMenuGroupID",object_internal(111),1) res% = dll_call2("SetSubMainMenuGroupID",object_internal(112),1) res% = dll_call2("SetSubMainMenuGroupID",object_internal(113),1) ' la dernière ligne sera automatiquement cocher !
' les icônes pour le POPUP_MENU N_Icons_Pop% = dll_call2("SetPopupMenuImageList",object_internal(200),adr(il$)) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(210),5) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(211),6) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(212),7) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(213),8) res% = dll_call2("SetSubPopupMenuImageIndex",object_internal(215),9)
button 1 : top 1,10 : left 1,10 : caption 1,"Montrer Main" : on_click 1,montrerMain button 11 : top 11,10 : left 11,90 : caption 11,"Montrer Popup" : on_click 11,montrerPopup picture 2 : top 2,40 : left 2,10 : stretch_on 2 alpha 3 : top 3,70 : left 3,width(2)+20 : font_size 3,12
button 10 : top 10,10 : left 10,200 : caption 10,"Nouveau Main" : on_click 10,NouveauMain button 20 : top 20,10 : left 20,280 : width 20,90 : caption 20,"Nouveau Popup" : on_click 20,NouveauPopup open_dialog 12 : filter 12,"ImageList|*.ilb"
indMain% = 0 indPopup% = 0 end
montrerMain: res% = dll_call1("CopyMainMenuImageListIcon",indMain%) clipboard_paste 2 caption 3,"Indice: "+str$(indMain%) indMain% = indMain% + 1 if indMain%=N_Icons% then indMain% = 0 return
nouveauMain: f$ = file_name$(12) if f$="_" then return N_Icons% = dll_call2("SetMainMenuImageList",object_internal(100),adr(f$)) indMain% = 0 return montrerPopup: res% = dll_call1("CopyPopupMenuImageListIcon",indPopup%) clipboard_paste 2 caption 3,"Indice: "+str$(indPopup%) indPopup% = indPopup% + 1 if indPopup%=N_Icons_Pop% then indPopup% = 0 return
nouveauPopup: f$ = file_name$(12) if f$="_" then return N_Icons_pop% = dll_call2("SetPopupMenuImageList",object_internal(200),adr(f$)) indPopup% = 0 return
Dernière édition par Klaus le Mar 27 Juin 2017 - 17:18, édité 2 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 13:44 | |
| Hallo Klaus Möglicherweise müssen Sie "ein wenig Ruhe! Je crois que tu n’as pas posté le bon code. C’est le même que celui de la version précédente. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 16:43 | |
| Oups... C'était un copier/coller du mauvais onglet ! Voilà qui est corrigé. Merci d'avoir veillé, Papydall ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 16:58 | |
| En sélectionnant Nouveau Popup EDIT Je viens de voir l'erreur - Code:
-
N_Icons_pop% = dll_call2("SetPopupMenuImageList",object_internal(200),adr(f$))
Le % n'était pas confortablement placé !!! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 27 Juin 2017 - 17:19 | |
| Oui, je l'ai v... Corrigé ci-dessus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 30 Juin 2017 - 1:50 | |
| Nouvelle version: KGF.dll V7.78 du 28/06/2017Nouveautés: - nouvel objet: ImageViewModules modifiés: KGF.dllLa doc est inchangée. Les sources sont à jour. Ce nouvel objet réalise un affichage d'aperçus d'images. On dimensionne l'objet comme on veut, et on définit la taille des icônes lors de la création de l'objet. Dès lors, on peut ajouter autant d'images qu'on veut (BMP, JPG, JPEG, GIF, PNG, ICO et bientôt d'autres). Elles seront toutes adaptées aux dimensions prédéfinies. L'objet les affiche par lignes et colonnes, selon les dimensions de l'objet. Même si toutes les icônes ne tiennent pas simultanément dans l'affichage, elles sont néanmoins mémorisées. Il y a des fonctions permettant de scroller l'affichage par programme, et une scrollbar verticale qui permet de le faire par la souris. Un clic sur une des icônes envoie un USER_EVENT au programme Panoramic, avec l'indice de l'image cliquée. Une fonction permet alors de récupérer le nom du fichier associé. Le programme de démo suivant fonctionne de la manière suivante: - un bouton "Créer" crée l'objet le le place dans la form 0 - un bouton "Vider" efface toutes les icônes déjà chargées dans l'objet - un bouton "Supprimer" vide puis supprime l'objet - un bouton "Charger" ouvre un sélecteur de dossiers. Choisir ici un dossier contenant des images, puis valider. Toutes les images seront alors chargés sous forme d'icônes de taille identique, et l'objet affichera autant d'icônes que possible pour remplir la page d'affichage. La taille de l'ascenseur vertivcal s'adapte automatiquement. - une série de boutons à gauche permet la navigation dans l'affichage - l'ascenseur a les fonctions suivantes: un clic sur la flèche en haut recule à la ligne précédente un clic sur la flèche en bas avance à la ligne suivante un clic dans l'espace libre en-dessous du bouton coulissant avance d'une page un clic dans l'espace libre au-dessus du bouton coulissant reculed'une page tirer le bouton coulissant vers le haut fait apparaître la ligne 0 tirer le bouton coulissant vers le bas fait apparaître la dernière ligne - un clic sur une des icônes, quelque soit la première ligne visible dans l'affichage, récupère l'indice de l'image cliquée ainsi que son nom de fichier. Je considère ceci comme un "ballon d'essai", à tester si possible. Je suis comme d'habiture ouvert aux remarques, sachant que j'ai conçu le dessin et le fonctionnement tout seul, mais pas forcément en harmonie avec ce qui pourrait intéresser les Panoramiciens. Donc, pour le moment, il n'y a pas de doc - elle suivra lorsque le produit sera stabilisé. Voici a démo: - Code:
-
' test_ImageView.bas
label creer, charger, vider, supprimer, localiser label haut, pprec, prec, suiv, psuiv, bas, UserEvent
dim res%, IV%, racine$, dossier$, current$, f$, ext$, ind%, dern% dim nom$, x%, y%, i% dim types$ : types$ = ".bmp.jpg.jpeg.gif.ico.png"
full_space 0 button 1 : top 1,10 : left 1,10 : caption 1,"Créer" : on_click 1,creer button 2 : top 2,10 : left 2,110 : caption 2,"Vider" : on_click 2,vider : inactive 2 button 3 : top 3,10 : left 3,200 : caption 3,"Supprimer" : on_click 3,supprimer : inactive 3 button 21 : top 21,10 : left 21,430 : caption 21,"Charger" : on_click 21,charger : inactive 21
dll_on "KGF.dll"
button 101 : top 101,40 : left 101,10 : caption 101,"Haut" : on_click 101,haut : inactive 101 button 102 : top 102,65 : left 102,10 : caption 102,"Page préc." : on_click 102,pprec : inactive 102 button 103 : top 103,90 : left 103,10 : caption 103,"Ligne préc." : on_click 103,prec : inactive 103 button 104 : top 104,115 : left 104,10 : caption 104,"Lign suiv." : on_click 104,suiv : inactive 104 button 105 : top 105,140 : left 105,10 : caption 105,"Page suiv." : on_click 105,psuiv : inactive 105 button 106 : top 106,165 : left 106,10 : caption 106,"Bas" : on_click 106,bas : inactive 106
panel 200 : hide 200 : width 200,250 : color 200,255,255,0 top 200,(screen_y-height(200))/2 : left 200,(screen_x-width(200))/2 caption 200,"Chargement en cours..." font_size 200,16 :font_color 200,255,0,0 : font_bold 200
dern% = -1
on_user_event UserEvent
end
creer: if IV%<>0 then return ' message "a: "+str$(LV%) IV% = dll_call4("CreateImageView",handle(0),50,50,adr(dern%)) ' message "b: "+str$(LV%) res% = dll_call5("ImageViewGeometry",IV%,90,40,400,500) inactive 1 active 2 active 3 active 21 return vider: res% = dll_call1("ClearImageView",IV%) for i%=101 to 106 inactive i% next i% dern% = -1 return supprimer: res% = dll_call1("DeleteImageView",IV%) if res%=0 IV% = 0 active 1 inactive 2 inactive 3 inactive 21 for i%=101 to 106 inactive i% next i% end_if dern% = -1 return charger: current$ = dir_current$ racine$ = dir_current$ dossier$ = string$(255," ") res% = DLL_call4("FolderSelect",adr(racine$),adr(dossier$),len(dossier$),0) to_foreground 0 dossier$ = trim$(dossier$) if dossier$="" dir_change current$ return end_if dir_change dossier$ f$ = file_find_first$ inactive 0 show 200 repeat f$ = file_find_next$ if f$="_" then exit_repeat if Left$(f$,1)<>"." ext$ = lower$(file_extract_extension$(f$)) if instr(types$,ext$)>0 res% = dll_call3("AddImageToImageView",IV%,adr(f$),adr(ind%)) end_if end_if until f$="_" file_find_close active 0 hide 200 message "Chargement de "+str$(ind%+1)+" images terminé"+chr$(13)+chr$(10)+"Dernier indice visible: "+str$(dern%) dir_change current$ for i%=101 to 106 active i% next i% return haut: res% = dll_call3("ScrollImageView",IV%,1,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return pprec: res% = dll_call3("ScrollImageView",IV%,2,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return prec: res% = dll_call3("ScrollImageView",IV%,3,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return suiv: res% = dll_call3("ScrollImageView",IV%,4,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return psuiv: res% = dll_call3("ScrollImageView",IV%,5,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return bas: res% = dll_call3("ScrollImageView",IV%,6,adr(dern%)) message "Dernier indice visible: "+str$(dern%) return localiser: if dern%<0 then return x% = mouse_x_left_down(100) y% = mouse_y_left_down(100) nom$ = string$(255," ") res% = dll_call4("GetListImageFileName",IV%,x%,y%,adr(nom$)) nom$ = trim$(nom$) message "Indice: "+str$(res%)+" "+nom$ return
UserEvent: if User_Event_LParam<>hex("03000000") then return : ' pas ImageView ? if bin_and(User_Event_WParam,hex("FFFF0000"))<>hex("00010000") then return : ' pas ImageSelect ? ind% = bin_and(User_Event_WParam,hex("0000FFFF")) ' message "WPARAM="+hex$(User_Event_WParam)+" "+"LPARAM="+hex$(User_Event_LParam) nom$ = string$(255," ") res% = dll_call3("GetImageViewFileName",IV%,ind%,adr(nom$)) nom$ = trim$(nom$) message "indice="+str$(ind%)+" "+nom$ return
Et voici une capture: PS Juste pour la curiosité: cet objet a été entièrement créé par moi, à partir d'un PANEL Delphi, dont j'utilise le canvas pour tout dessiner, y compris la scrollbar. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 30 Juin 2017 - 2:38 | |
| L’événement Charger ouvre un sélecteur de dossiers … Il ouvre le répertoire en cours qui n’est pas toujours le bon et … aucun moyen d’en choisir un autre ! Pour tester le code, j’ai du ajouter dans le s/p charger : en 1ère ligne - Code:
-
dir_change "C:\Users\acer\Desktop\Panoramic\...
Mais il vaut mieux ouvrir un open_dialog. C’est un objet utile, merci Klaus | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |