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 |
|
|
| Essai de IconButton dans KGF.dll - test préliminaire | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Essai de IconButton dans KGF.dll - test préliminaire Mer 5 Juil 2017 - 0:22 | |
| Pour ceux qui sont motivés par des nouveautés dans KGF.dll, voici un joli morceau à tester, avant publication de la version officielle. Il faut télécharger KGF.dll sur mon WebDav (pas sur les deux sites !), puis faire exécuter le code suivant avec la dernière version de Panoramic: - Code:
-
' test_IconButton.bas
label creer, supprimer, images, image1, image2, image3, image0, UserEvent label stretch, stretch1, stretch2, stretch3 label imglist, imglist1, imglist2, imglist3, imglist0
dim res%, IBTN1%, IBTN2%, IBTN3%, IL%, nb%, hint$ dim f$, stretch1%, stretch2%, stretch3%, x%, nlist% dim size% : size% = 32 dim m1% : m1% = -1 dim stretch% : stretch% = 0 stretch1% = stretch% stretch2% = stretch% stretch3% = stretch% dim ilb$ : ilb$ = "KGF.ilb"
on_user_event UserEvent
dll_on "KGF.dll"
button 1 : top 1,10 : left 1,10 : caption 1,"Créer" : on_click 1,creer button 2 : top 2,10 : left 2,100 : caption 2,"Supprimer" : on_click 2,supprimer : inactive 2
button 3 : top 3,10 : left 3,220 : caption 3,"Images" : width 3,80 : on_click 3,images : inactive 3 button 31 : top 31,35 : left 31,220 : caption 31,"1" : width 31,20 : on_click 31,image1 : inactive 31 button 32 : top 32,35 : left 32,250 : caption 32,"2" : width 32,20 : on_click 32,image2 : inactive 32 button 33 : top 33,35 : left 33,280 : caption 33,"3" : width 33,20 : on_click 33,image3 : inactive 33 button 39 : top 39,60 : left 39,220 : caption 39,"Effacer" : width 39,80 : on_click 39,image0 : inactive 39
button 4 : top 4,10 : left 4,320 : caption 4,"Stretch on" : width 4,80 : on_click 4,stretch : inactive 4 button 41 : top 41,35 : left 41,320 : caption 41,"1" : width 41,20 : on_click 41,stretch1 : inactive 41 button 42 : top 42,35 : left 42,350 : caption 42,"2" : width 42,20 : on_click 42,stretch2 : inactive 42 button 43 : top 43,35 : left 43,380 : caption 43,"3" : width 43,20 : on_click 43,stretch3 : inactive 43
button 5 : top 5,10 : left 5,420 : caption 5,"ImageList" : width 5,80 : on_click 5,imglist : inactive 5 button 51 : top 51,35 : left 51,420 : caption 51,"1" : width 51,20 : on_click 51,imglist1 : inactive 51 button 52 : top 52,35 : left 52,450 : caption 52,"2" : width 52,20 : on_click 52,imglist2 : inactive 52 button 53 : top 53,35 : left 53,480 : caption 53,"3" : width 53,20 : on_click 53,imglist3 : inactive 53 button 59 : top 59,60 : left 59,420 : caption 59,"Effacer" : width 59,80 : on_click 59,imglist0 : inactive 59
open_dialog 99 : filter 99,"Images|*.ico;*.bmp;*.jpg"
IL% = dll_call2("CreateImageList",16,16) nlist% = dll_call2("LoadImageList",IL%,adr(ilb$)) message ilb$+" contient "+str$(nlist%)+" icônes"
end
creer: x% = 40 IBTN1% = dll_call3("CreateIconButton",handle(0),1,M1%) res% = dll_call6("IconButtonGeometry",IBTN1%,x%,100,size%,size%,stretch1%) hint$ = "Ceci est le bouton 1" res% = dll_call2("SetIconButtonHint",IBTN1%,adr(hint$)) x% = x% + size% IBTN2% = dll_call3("CreateIconButton",handle(0),2,M1%) res% = dll_call6("IconButtonGeometry",IBTN2%,x%,100,size%,size%,stretch2%) hint$ = "Ceci est le bouton 2" res% = dll_call2("SetIconButtonHint",IBTN2%,adr(hint$)) x% = x% + size% IBTN3% = dll_call3("CreateIconButton",handle(0),3,M1%) res% = dll_call6("IconButtonGeometry",IBTN3%,x%,100,size%,size%,stretch3%) hint$ = "Ceci est le bouton 3" res% = dll_call2("SetIconButtonHint",IBTN3%,adr(hint$)) inactive 1 active 2 active 3 active 31 active 32 active 33 active 39 active 4 active 41 active 42 active 43 active 5 active 51 active 52 active 53 active 59 return
supprimer: res% = dll_call1("DeleteIconButton",IBTN1%) if res%=0 then IBTN1% = 0 res% = dll_call1("DeleteIconButton",IBTN2%) if res%=0 then IBTN2% = 0 res% = dll_call1("DeleteIconButton",IBTN3%) if res%=0 then IBTN3% = 0 if (IBTN1%=0) and (IBTN2%=0) and (IBTN3%=0) inactive 2 inactive 3 inactive 31 inactive 32 inactive 33 inactive 39 inactive 4 inactive 41 inactive 42 inactive 43 inactive 5 inactive 51 inactive 52 inactive 53 inactive 59 active 1 end_if return images: ChargerImage(IBTN1%) ChargerImage(IBTN2%) ChargerImage(IBTN3%) return image1: ChargerImage(IBTN1%) return image2: ChargerImage(IBTN2%) return image3: ChargerImage(IBTN3%) return image0: res% = dll_call2("SetIconButtonImage",IBTN1%,0) res% = dll_call2("SetIconButtonImage",IBTN2%,0) res% = dll_call2("SetIconButtonImage",IBTN3%,0) return sub ChargerImage(IBTN%) f$ = file_name$(99) if f$="_" then return if file_exists(f$)=0 then return res% = dll_call2("SetIconButtonImage",IBTN%,adr(f$)) end_sub
stretch: stretch% = 1 - stretch% select stretch% case 0 caption 4,"Stretch on" case 1 caption 4,"Stretch off" end_select stretch1% = stretch% stretch2% = stretch% stretch3% = stretch% Stretch(IBTN1%,stretch1%) Stretch(IBTN2%,stretch2%) Stretch(IBTN3%,stretch3%) return stretch1: stretch1% = 1 - stretch1% Stretch(IBTN1%,stretch1%) return stretch2: stretch2% = 1 - stretch2% Stretch(IBTN2%,stretch2%) return stretch3: stretch3% = 1 - stretch3% Stretch(IBTN3%,stretch3%) return sub Stretch(IBTN%,stretch%) res% = dll_call6("IconButtonGeometry",IBTN%,M1%,M1%,M1%,M1%,stretch%) end_sub imglist: ImgList(IBTN1%) ImgList(IBTN2%) ImgList(IBTN3%) return imglist1: ImgList(IBTN1%) return
imglist2: ImgList(IBTN2%) return
imglist3: ImgList(IBTN3%) return imglist0: res% = dll_call3("SetIconButtonImageList",IBTN1%,IL%,0) res% = dll_call3("SetIconButtonImageList",IBTN2%,IL%,0) res% = dll_call3("SetIconButtonImageList",IBTN3%,IL%,0) return
sub ImgList(IBTN%) dim_local ind% ind% = int(rnd(nlist%))+1 res% = dll_call3("SetIconButtonImageList",IBTN%,IL%,ind%) end_sub
UserEvent: nb% = bin_and(USER_EVENT_WPARAM,hex("FFFF")) message "UserEvent WPARAM="+hex$(USER_EVENT_WPARAM)+" LPARAM="+hex$(USER_EVENT_LPARAM)+" Bouton "+str$(nb%) return
Ce programme propose un bouton "Créer", seul actif initialement. Un clic sur ce bouton crée 3 boutons du nouveau type IconButton, carrés en format 20x20 pixels. Un clic sur un de ces boutons envoie un USER_EVENT qui permet d'identifier le bouton cliqué. La particularité de ces boutons est de pouvoir recevoir des images en provenance d'un fichier (ici, bmp, jpg, gif, ...) ou une icône en provenance d'un objet ImageList. La provenance ImageList a priorité sur l'image en provenance d'un fichier, mais les deux sont éventuellemt mémorisées dans le bouton. Si l'image de la ImageList est effacée, celle en provenance du fichier réapparaît. - les images peuvent être affichées dans un petit format, centrées dans le bouton, ou remplir le bouton façon STRETCH_DRAW. On peut à tout moment basculer de l'affichage normal au STRETCH et inversement. Le programme permet de le faire pour un bouton individuel ou gloalement pour tous les boutons. Chaque bouton peut avoir un "hint". La taille (carrée) du bouton peut être librement choisie. Si l'option STRETCH est activée pour un bouton, l'image (quelque soit sa provenance) remplira le bouton (sauf une bordure de 2 pixels afin de voir les bords du bouton). Le pixel en bas à gauche de l'image est systématiquement pris comme couleur de transparence de l'image. Dites-moi ce que vous en pensez. Pour ma part, j'utilise cela pour construire des palettes d'outils, façon barre d'outils mais sur deux ou 3 rangs, gagnant ainsi une place appréciable dans la conception des GUIs. Avec, bien sur, une ImageList dédiée pour l'application. Le programme de démo utilise KGF.ILB (disponible également dans le WebDav, dossier DLLs\IcoLibrary. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 5 Juil 2017 - 11:30 | |
| @ Klaus, Effectivement, cela peut rendre service pour ajouter des barres d' outils supplémentaires. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Jeu 6 Juil 2017 - 16:01 | |
| Voici une petite démo qui montre la création de 2 toolbars avec des IconButtons. La première est une ligne de 5 boutons. La seconde est constituée de 2 lignes de 4 boutons. Tous les boutons reçoivent des icônes choisies aléatoirement dans KGF.ilb. Le hint indique le bouton et la toolbar. Un clic sur un des boutons affiche des infos techniques et le numéro du bouton et celui de la toolbar. - Code:
-
' demo_toolbars_avec_IcinButtons.bas
label UserEvent
dim TB1%, TB2% : ' les toolbars (des containers ou panels dim IB1%(5) : ' les IconButton pour TB1% dim IB2%(8) : ' les IconButton pour TB2% dim IL% : ' ImageList pour KGF.ilb (ou une autre ILD...)
dim M1% : M1% = -1 dim size% : size% = 20 dim ilb$ : ilb$ = "KGF.ilb"
dim res%, i%, j%, k%, hint$, nb%, nlist%, nt%
dll_on "KGF.dll"
on_user_event UserEvent
TB1% = 1 : TB2% = 2
panel TB1% : top TB1%,30 : left TB1%,10 : width TB1%,110 : height TB1%,30 color TB1%,0,255,255 panel TB2% : top TB2%,30 : left TB2%,120 : width TB2%,90 : height TB2%,50 color TB2%,255,255,0 IL% = dll_call2("CreateImageList",16,16) nlist% = dll_call2("LoadImageList",IL%,adr(ilb$)) for i%=1 to 5 IB1%(i%) = dll_call3("CreateIconButton",handle(TB1%),256+i%,M1%) res% = dll_call6("IconButtonGeometry",IB1%(i%),5+(i%-1)*size%,5,size%,size%,1) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 1" res% = dll_call2("SetIconButtonHint",IB1%(i%),adr(hint$)) ImgList(IB1%(i%)) next i%
for k%=1 to 2 for j%=1 to 4 i% = (k%-1)*4 + j% IB2%(i%) = dll_call3("CreateIconButton",handle(TB2%),512+i%,M1%) res% = dll_call6("IconButtonGeometry",IB2%(i%),5+(j%-1)*size%,5+(k%-1)*size%,size%,size%,1) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 2" res% = dll_call2("SetIconButtonHint",IB2%(i%),adr(hint$)) ImgList(IB2%(i%)) next j% next k%
end
sub ImgList(IBTN%) dim_local ind% ind% = int(rnd(nlist%))+1 res% = dll_call3("SetIconButtonImageList",IBTN%,IL%,ind%) end_sub
UserEvent: nb% = bin_and(USER_EVENT_WPARAM,hex("00FF")) nt% = (bin_and(USER_EVENT_WPARAM,hex("FF00"))/256) message "UserEvent WPARAM="+hex$(USER_EVENT_WPARAM)+" LPARAM="+hex$(USER_EVENT_LPARAM)+" Bouton "+str$(nb%)+" de ToolBar "+str$(nt%) return
Voici à quoi ça ressemble: | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Jeu 6 Juil 2017 - 19:19 | |
| Bien que je n’eusse compris qu’à moitié le pourquoi du comment, j’apprécie bien ce que tu fais, Maître Klaus ! Je vois que tu es (encore) à la version 0.9.28i9 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Jeu 6 Juil 2017 - 19:33 | |
| Oui, pour des raisons pratiques... mais j'ai installé la version V0.9.28i11 pour les tests importants. Et pour les IconButtons, ça vaut mieux, car le problème de décalage sur l'évèment ON_USER_EVENT est résolu.
Evolution en cours, déjà opérationnelle chez moi: - une fonction DockIconButtonToIconButton permettant de "coller" in IconButton contre un autre, à gauche, à droite, en haut ou en bas (ceci permet de ne pas calculer soi-même toutes les positions) - une fonction DockOjects faisant la même chose sur tout objet "fenêtré" (ayant un handle), à condition qu'ils soient dans le même réceptacle, bien sûr. Ceci permet d'accoller des bares d'outils les unes aux autres, par exemple, de contruire un tableau de EDIT, etc. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 6 Juil 2017 - 20:57 | |
| Oui, pratique de ne pas avoir à calculer toutes les positions. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Jeu 6 Juil 2017 - 21:17 | |
| Alors, recharge KGF.dll de mon WebDav, dossier DLLs, et essaie le code suivant: - Code:
-
' demo_toolbars_avec_IcinButtons.bas
label UserEvent
dim TB1%, TB2% : ' les toolbars (des containers ou panels dim IB1%(5) : ' les IconButton pour TB1% dim IB2%(8) : ' les IconButton pour TB2% dim IL% : ' ImageList pour KGF.ilb (ou une autre ILD...)
dim M1% : M1% = -1 dim size% : size% = 20 dim ilb$ : ilb$ = "KGF.ilb"
dim res%, i%, j%, k%, hint$, nb%, nlist%, nt%
dll_on "KGF.dll"
on_user_event UserEvent
TB1% = 1 : TB2% = 2
panel TB1% : top TB1%,30 : left TB1%,10 : width TB1%,110 : height TB1%,30 color TB1%,0,255,255 panel TB2% : top TB2%,30 : left TB2%,120 : width TB2%,90 : height TB2%,50 color TB2%,255,255,0 IL% = dll_call2("CreateImageList",16,16) nlist% = dll_call2("LoadImageList",IL%,adr(ilb$)) for i%=1 to 5 IB1%(i%) = dll_call3("CreateIconButton",handle(TB1%),256+i%,M1%) res% = dll_call6("IconButtonGeometry",IB1%(i%),5,5,size%,size%,1) if i%>1 then res% = dll_call3("DockIconButtonToIconButton",IB1%(i%),IB1%(i%-1),3) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 1" res% = dll_call2("SetIconButtonHint",IB1%(i%),adr(hint$)) ImgList(IB1%(i%)) next i%
for k%=1 to 2 for j%=1 to 4 i% = (k%-1)*4 + j% IB2%(i%) = dll_call3("CreateIconButton",handle(TB2%),512+i%,M1%) res% = dll_call6("IconButtonGeometry",IB2%(i%),5,5,size%,size%,1) if (i%>1) and (i%<=4) then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(i%-1),3) if i%=5 then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(1),4) if (i%>5) and (i%<=8) then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(i%-1),3) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 2" res% = dll_call2("SetIconButtonHint",IB2%(i%),adr(hint$)) ImgList(IB2%(i%)) next j% next k%
end
sub ImgList(IBTN%) dim_local ind% ind% = int(rnd(nlist%))+1 res% = dll_call3("SetIconButtonImageList",IBTN%,IL%,ind%) end_sub
UserEvent: nb% = bin_and(USER_EVENT_WPARAM,hex("00FF")) nt% = (bin_and(USER_EVENT_WPARAM,hex("FF00"))/256) message "UserEvent WPARAM="+hex$(USER_EVENT_WPARAM)+" LPARAM="+hex$(USER_EVENT_LPARAM)+" Bouton "+str$(nb%)+" de ToolBar "+str$(nt%) return
Le résultat visuel est identique, mais regarde bien le code de création des boutons - ils sont tous créés en (5,5), puis "dockés" les uns aux autres. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 6 Juil 2017 - 21:42 | |
| Oui, je vois. Cette fonction peut être intéressante pour l' alignement d' autres objets de la même façon, collé les uns aux autres, Pictures, Edit, etc... Avec des Pictures, on peut simuler un célèbre objet Query. Le plus ennuyeux reste à faire, la doc... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Jeu 6 Juil 2017 - 21:53 | |
| Pour les autres objets, cela se fait par la nouvelle fonction DockObjects. Recharge à nouveau la DLL (désolé...) et essaie ce code-ci: - Code:
-
' demo_toolbars_avec_IcinButtons.bas
label UserEvent
dim TB1%, TB2% : ' les toolbars (des containers ou panels dim IB1%(5) : ' les IconButton pour TB1% dim IB2%(8) : ' les IconButton pour TB2% dim IL% : ' ImageList pour KGF.ilb (ou une autre ILD...)
dim M1% : M1% = -1 dim size% : size% = 20 dim ilb$ : ilb$ = "KGF.ilb"
dim res%, i%, j%, k%, hint$, nb%, nlist%, nt%
dll_on "KGF.dll"
on_user_event UserEvent
TB1% = 1 : TB2% = 2
panel TB1% : top TB1%,30 : left TB1%,10 : width TB1%,110 : height TB1%,30 color TB1%,0,255,255 panel TB2% : top TB2%,30 : left TB2%,120 : width TB2%,90 : height TB2%,50 color TB2%,255,255,0 IL% = dll_call2("CreateImageList",16,16) nlist% = dll_call2("LoadImageList",IL%,adr(ilb$)) for i%=1 to 5 IB1%(i%) = dll_call3("CreateIconButton",handle(TB1%),256+i%,M1%) res% = dll_call6("IconButtonGeometry",IB1%(i%),5,5,size%,size%,1) if i%>1 then res% = dll_call3("DockIconButtonToIconButton",IB1%(i%),IB1%(i%-1),3) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 1" res% = dll_call2("SetIconButtonHint",IB1%(i%),adr(hint$)) ImgList(IB1%(i%)) next i%
for k%=1 to 2 for j%=1 to 4 i% = (k%-1)*4 + j% IB2%(i%) = dll_call3("CreateIconButton",handle(TB2%),512+i%,M1%) res% = dll_call6("IconButtonGeometry",IB2%(i%),5,5,size%,size%,1) if (i%>1) and (i%<=4) then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(i%-1),3) if i%=5 then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(1),4) if (i%>5) and (i%<=8) then res% = dll_call3("DockIconButtonToIconButton",IB2%(i%),IB2%(i%-1),3) hint$ = "Ceci est le bouton "+str$(i%)+" de la toolbar 2" res% = dll_call2("SetIconButtonHint",IB2%(i%),adr(hint$)) ImgList(IB2%(i%)) next j% next k%
pause 1000 res% = dll_call3("DockOjects",handle(1),handle(2),2) pause 1000 res% = dll_call3("DockOjects",handle(1),handle(2),3) pause 1000 res% = dll_call3("DockOjects",handle(1),handle(2),4) pause 1000 res% = dll_call3("DockOjects",handle(1),handle(2),1)
end
sub ImgList(IBTN%) dim_local ind% ind% = int(rnd(nlist%))+1 res% = dll_call3("SetIconButtonImageList",IBTN%,IL%,ind%) end_sub
UserEvent: nb% = bin_and(USER_EVENT_WPARAM,hex("00FF")) nt% = (bin_and(USER_EVENT_WPARAM,hex("FF00"))/256) message "UserEvent WPARAM="+hex$(USER_EVENT_WPARAM)+" LPARAM="+hex$(USER_EVENT_LPARAM)+" Bouton "+str$(nb%)+" de ToolBar "+str$(nt%) return
Patiente quelques secondes après le lancement - tu verras la toolbar de gauche "sauter" autour de la toolbar de droite. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 7 Juil 2017 - 1:56 | |
| Je connaissais les petits-pois sauteurs mais les menus-sauteurs c' est une première. En tout cas, c'est réussi. Bravo ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire Ven 7 Juil 2017 - 2:07 | |
| Je suis en train de faire la doc: objet ImageView: 8 fonctions: CreateImageView, ImageViewGeometry, ClearImageView, DeleteImageView, AddImageToImageView, ScrollImageView, GetImageViewFileName, GetImageViewFileNameFromPoint Objet Iconbutton: 9 fonctions CreateIconButton, DeleteIconButton, IconButtonGeometry, SetIconButtonImage, SetIconButtonImageList, SetIconButtonHint, IconButtonOptions, DockIconButtonToIconButton, DockOjects
En Français et en Anglais - c'est du boulot. | |
| | | Contenu sponsorisé
| Sujet: Re: Essai de IconButton dans KGF.dll - test préliminaire | |
| |
| | | | Essai de IconButton dans KGF.dll - test préliminaire | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |