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 | |
|
+13The Gamer Nardo26 silverman Minibug Pedro mindstorm pascal10000 Jicehel papydall Jean Claude JL35 Yannick Klaus 17 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 7 Jan 2015 - 16:37 | |
| Oups... problème de copier/coller. J'ai corrigé dans le code du post précédent. Et j'ai corrigé en même temps la prise en compte du code hexa retourné pour le numéro de groupe. Tout semble correct, maintenant.
En fait, ce que j'appelle un "groupe", c'est un objet composé ButtonArray composé d'un panel et de x boutons. Et chaque ButtonArray devrait avoir un numéro de "groupe" différent, pour éviter de confondre les touches cliquées. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 7 Jan 2015 - 19:50 | |
| Sans changement de version, j'ai ajouté une possibilité de déplacer un ButtonArray existant, et/ou de changer les dimensions (largeur d'une colonne, hauteur d'une ligne). Je vous invite à recharger la DLL si l'objet ButtonArray vous intéresse. La doc et les sources ont été mises à jour. Voici ce que ça donne pour le petit programme de démo. J'ai élargi une colonne et une ligne dans le premier des 4 tableaux: - Code:
-
' test ButtonArray.bas
label clic, cre1, cre2, cre3, cre4, del1, del2, del3, del4
dim res%,xy%,nlnc%,lght%,grpdxy%,s$, i%,j%, M1% dim grp%,l%,c% dim BA1%, BA2%, BA3%, BA4%, nBA%
dll_on "KGF.dll"
button 1 : top 1,180 : left 1,300 : caption 1,"Créer 1" : on_click 1,cre1 button 2 : top 2,210 : left 2,300 : caption 2,"Créer 2" : on_click 2,cre2 button 3 : top 3,240 : left 3,300 : caption 3,"Créer 3" : on_click 3,cre3 button 4 : top 4,270 : left 4,300 : caption 4,"Créer 4" : on_click 4,cre4 button 11 : top 11,180 : left 11,400 : caption 11,"Supprimer 1" : on_click 11,del1 button 12 : top 12,210 : left 12,400 : caption 12,"Supprimer 2" : on_click 12,del2 button 13 : top 13,240 : left 13,400 : caption 13,"Supprimer 3" : on_click 13,del3 button 14 : top 14,270 : left 14,400 : caption 14,"Supprimer 4" : on_click 14,del4
on_click 0,clic
M1% = 0 - 1
end
clic: res% = dll_call0("IdentifyButtonArrayButton") : ' récupérer l'ID du bouton if res%=0 then return : ' abandon si ce n'est pas un de nos boutons s$ = hex$(res%) s$ = left$(s$,len(s$)-4) nBA% = hex(s$) l% = dll_call2("bin_SHR",res%,8) l% = bin_AND(l%,255) c% = bin_AND(res%,255) message "clic sur BA groupe="+str$(nBA%)+" ligne="+str$(l%)+" colonne="+str$(c%) return cre1: if BA1%<>0 then return xy% = dll_call2("bin_SHL",30,16) + 40 : ' left 30 top 40 nlnc% = dll_call2("bin_SHL",3,16) + 9 : ' 3 lignes 9 colonnes lght% = dll_call2("bin_SHL",50,16) + 20 : ' width 50 height 20 grpdxy% = dll_call2("bin_SHL",1,16) + 5 : ' groupe 1 écart 5 for i%=1 to 3 for j%=1 to 9 s$ = s$ + str$(i%)+"/"+str$(j%)+"," next j% next i% BA1% = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) res% = dll_call5("SetButtonArrayGeometry",BA1%, M1%,M1%, 3,20) : ' élargir colonne 3 de 20 res% = dll_call5("SetButtonArrayGeometry",BA1%, M1%,M1%, 0-2,30) : ' élargir ligne 2 de 30 return cre2: if BA2%<>0 then return xy% = dll_call2("bin_SHL",20,16) + 180 : ' left 20 top 180 nlnc% = dll_call2("bin_SHL",4,16) + 4 : ' 4 lignes 4 colonnes lght% = dll_call2("bin_SHL",50,16) + 20 : ' width 50 height 20 grpdxy% = dll_call2("bin_SHL",2,16) + 0 : ' groupe 2 écart 0 for i%=1 to 3 for j%=1 to 9 s$ = s$ + str$(i%)+"/"+str$(j%)+"," next j% next i% BA2% = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) return cre3: if BA3%<>0 then return xy% = dll_call2("bin_SHL",20,16) + 300 : ' left 20 top 300 nlnc% = dll_call2("bin_SHL",6,16) + 1 : ' 6 lignes 1 colonnes lght% = dll_call2("bin_SHL",70,16) + 15 : ' width 70 height 15 grpdxy% = dll_call2("bin_SHL",3,16) + 0 : ' groupe 3 écart 0 for i%=1 to 3 for j%=1 to 9 s$ = s$ + str$(i%)+"/"+str$(j%)+"," next j% next i% BA3% = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) return
cre4: if BA4%<>0 then return xy% = dll_call2("bin_SHL",150,16) + 330 : ' left 150 top 330 nlnc% = dll_call2("bin_SHL",1,16) + 6 : ' 1 lignes 6 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",4,16) + 0 : ' groupe 4 écart 0 for i%=1 to 3 for j%=1 to 9 s$ = s$ + str$(i%)+"/"+str$(j%)+"," next j% next i% BA4% = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) return
del1: res% = dll_call1("DeleteButtonArray",BA1%) BA1% = 0 return del2: res% = dll_call1("DeleteButtonArray",BA2%) BA2% = 0 return
del3: res% = dll_call1("DeleteButtonArray",BA3%) BA3% = 0 return
del4: res% = dll_call1("DeleteButtonArray",BA4%) BA4% = 0 return
Et voici le petit clavier virtuel: - Code:
-
' clavier_AZERTY.bas
label clic
dim res%, s$, l%, c%, M1% dim xy%, nlnc%, lght%, grpdxy%
dim BA%(30), nBA%
dll_on "KGF.dll" on_click 0,clic : width 0,700
M1% = 0 - 1
ligne_123() ligne_AZE() ligne_QSD() ligne_WXC()
ligne_num1() ligne_num2() ligne_num3() ligne_num4() ligne_num5() ligne_num6()
end
sub ligne_123() xy% = dll_call2("bin_SHL",12,16) + 50 : ' left 12 top 50 nlnc% = dll_call2("bin_SHL",1,16) + 14 : ' 1 lignes 14 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",1,16) + 0 : ' groupe 1 écart 0 s$ = "²,&&,é,'',',(,-,è,_,ç,à,),=,Del" BA%(1) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) res% = dll_call5("SetButtonArrayGeometry",BA%(1), M1%,M1%, 14,16) : ' élargir colonne 14 de 16 end_sub
sub ligne_AZE() xy% = dll_call2("bin_SHL",12,16) + 80 : ' left 12 top 80 nlnc% = dll_call2("bin_SHL",1,16) + 14 : ' 1 lignes 14 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",2,16) + 0 : ' groupe 2 écart 0 s$ = "Tab,A,Z,E,R,T,Y,U,I,O,P,^,$,Rtn" BA%(2) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) res% = dll_call5("SetButtonArrayGeometry",BA%(2), M1%,M1%, 1,8) : ' élargir colonne 1 de 8 res% = dll_call5("SetButtonArrayGeometry",BA%(2), M1%,M1%, 14,8) : ' élargir colonne 14 de 8 end_sub
sub ligne_QSD() xy% = dll_call2("bin_SHL",12,16) + 110 : ' left 12 top 110 nlnc% = dll_call2("bin_SHL",1,16) + 14 : ' 1 lignes 14 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",3,16) + 0 : ' groupe 3 écart 0 s$ = "Ver.,Q,S,D,F,G,H,J,K,L,M,ù,*,Rtn" BA%(3) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) res% = dll_call5("SetButtonArrayGeometry",BA%(3), M1%,M1%, 1,16) : ' élargir colonne 1 de 16 end_sub
sub ligne_WXC() xy% = dll_call2("bin_SHL",12,16) + 140 : ' left 12 top 140 nlnc% = dll_call2("bin_SHL",1,16) + 12 : ' 1 lignes 12 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",4,16) + 0 : ' groupe 4 écart 0 s$ = "Maj,W,X,C,V,B,N,x,;,:,!,Maj" BA%(4) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) res% = dll_call5("SetButtonArrayGeometry",BA%(4), M1%,M1%, 1,24) : ' élargir colonne 1 de 24 res% = dll_call5("SetButtonArrayGeometry",BA%(4), M1%,M1%, 12,52) : ' élargir colonne 12 de 52 end_sub
sub ligne_num1() xy% = dll_call2("bin_SHL",500,16) + 20 : ' left 500 top 20 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",5,16) + 0 : ' groupe 5 écart 0 s$ = "Déb.,Fin,Psuiv,Ppréc" BA%(11) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
sub ligne_num2() xy% = dll_call2("bin_SHL",500,16) + 50 : ' left 500 top 50 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",6,16) + 0 : ' groupe 6 écart 0 s$ = "Num.,/,*,-" BA%(12) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
sub ligne_num3() xy% = dll_call2("bin_SHL",500,16) + 80 : ' left 500 top 80 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",7,16) + 0 : ' groupe 7 écart 0 s$ = "7,8,9,+" BA%(13) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
sub ligne_num4() xy% = dll_call2("bin_SHL",500,16) + 110 : ' left 500 top 110 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",8,16) + 0 : ' groupe 8 écart 0 s$ = "4,5,6,+" BA%(14) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
sub ligne_num5() xy% = dll_call2("bin_SHL",500,16) + 140 : ' left 500 top 140 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",9,16) + 0 : ' groupe 9 écart 0 s$ = "1,2,3,Rtn" BA%(15) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
sub ligne_num6() xy% = dll_call2("bin_SHL",500,16) + 170 : ' left 500 top 170 nlnc% = dll_call2("bin_SHL",1,16) + 4 : ' 1 lignes 4 colonnes lght% = dll_call2("bin_SHL",30,16) + 30 : ' width 30 height 30 grpdxy% = dll_call2("bin_SHL",10,16) + 0 : ' groupe 10 écart 0 s$ = "0,0,.,Rtn" BA%(16) = dll_call6("CreateButtonArray",handle(0),xy%,nlnc%,lght%,grpdxy%,adr(s$)) end_sub
clic: res% = dll_call0("IdentifyButtonArrayButton") : ' récupérer l'ID du bouton if res%=0 then return : ' abandon si ce n'est pas un de nos boutons s$ = hex$(res%) s$ = left$(s$,len(s$)-4) nBA% = hex(s$) l% = dll_call2("bin_SHR",res%,8) l% = bin_AND(l%,255) c% = bin_AND(res%,255) message "clic sur BA groupe="+str$(nBA%)+" ligne="+str$(l%)+" colonne="+str$(c%) return
C'est plus joli comme ça, non ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 7 Jan 2015 - 21:52 | |
| Un bug trouvé dans une des routines. Corrigé. Dll et sources à jour. Le 7/1/2015 à 21h52. | |
| | | 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 Jeu 8 Jan 2015 - 1:15 | |
| J’ai testé et c’est OK. J’ai relevé un petit détail dans le code. Ligne 13, tu écris - Code:
-
M1% = 0 – 1 Pour le moins unaire : Panoramic accepte le moins unaire s’il est affecté à une valeur numérique mais pas à une variable ou une fonction. Pour cela il faut faire 0 - ... Petit rappel pour ceux qui ont oublié : - Code:
-
dim a,b a = -1 : ' Correct ' a = - 1 : ' Incorrect l'espace entre le signe moins et la valeur n'est pas accepté b = 5
' a = -b : ' Incorrect, le moins unaire n'est pas accepté a = 0-b : ' Correct a = 0 - b : ' Correct, les espaces sont acceptés
' a = -sin(3) : ' Incorrect a = 0 - sin(3) : ' Correct
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Jan 2015 - 12:22 | |
| Nouvelle version: KGF.dll V4.04 du 08/01/2015
Nouveautés: - correction d'un bug dans GetKeyboardState
Modules modifiés: KGF.dll
Les sources sont à jour. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 12 Jan 2015 - 18:51 | |
| Nouvelle version: KGF.dll V4.05 du 09/01/2015Nouveautés: - nouvel objet LabelPictureButton - nouvel objet ObjectGroupModules modifiés: KGF.dll, KGF.chmLes sources sont à jour. Cette version apporte deux nouveaux objets majeurs. Le LabelPictureButton est un bouton graphique qui permet de définir une bitmap pour l'état "sorti" et une autre pour l'état "enfoncé". Mais également des libellés distincts pour ces 2 etats, ainsi que les attributs "taille", "attribut" et "couleur" de la police, séparément pour chacun des deux états ! En plus, ce bouton peut agir comme un bouton normal, ou comme un bouton va-et-vient, ou groupé comme une barette de boutons sur un walkman, par exemple: le bouton cliqué reste en bas, et un clic sur un autre bouton fait ressortir le bouton précédemment cliqué et enfonce le nouveau. Voici un programme de démo. Pour cela, il faut télécharger l'image suivante sous le nom de test.bmp: Et voici le code: - Code:
-
' test_LabelPictureButton.bas
label clic0, creer, effacer
dim res%, bmp$, lbup$, lbdown$, i%, n% dim LPB%(10), GRP% bmp$ = "test.bmp"
dll_on "KGF.dll" on_click 0,clic0 : width 0,800
button 1 : top 1,10 : left 1,10 : caption 1,"Créer tout" on_click 1,creer
' button 2 : top 2,10 : left 2,110 : caption 2,"Effacer tout" ' on_click 2,effacer
alpha 10 : top 10,350 : left 10,200 : font_size 10,16 : font_bold 10 list 11 : top 11,100 : left 11,10 : width 11,80
end
creer: if object_exists(21)=1 then return ' un bouton normal alpha 21 : top 21,80 : left 21,100 : caption 21,"Bouton normal" lbup$ = "LPB 1 sorti" lbdown$ = "LPB 1 enfoncé" res% = dll_call5("ConfigureLabelPictureButtonGeometry",handle(0),161,71,0,0) res% = dll_call6("ConfigureLabelPictureButtonStyle",12,8,1,2,0,255) LPB%(1) = dll_call6("CreateLabelPictureButton",0,100,100,adr(bmp$),adr(lbup$),adr(lbdown$)) item_add 11,str$(LPB%(1))
' on bouton aller/retour alpha 22 : top 22,80 : left 22,500 : caption 22,"Bouton On/Off" lbup$ = "LPB 2 sorti" lbdown$ = "LPB 2 enfoncé" res% = dll_call5("ConfigureLabelPictureButtonGeometry",handle(0),161,71,1,1) res% = dll_call6("ConfigureLabelPictureButtonStyle",12,8,1,2,0,255) LPB%(2) = dll_call6("CreateLabelPictureButton",1,500,100,adr(bmp$),adr(lbup$),adr(lbdown$)) item_add 11,str$(LPB%(2))
' 3 boutons liés alpha 23 : top 23,230 : left 23,100 : caption 23,"Groupe de 3 boutons liés" lbup$ = "LPB 3 sorti" lbdown$ = "LPB 3 enfoncé" res% = dll_call5("ConfigureLabelPictureButtonGeometry",handle(0),161,71,0,0) res% = dll_call6("ConfigureLabelPictureButtonStyle",12,8,1,2,0,255) GRP% = dll_call3("CreateLabelPictureButtonContainer",2,100,250) item_add 11,"->"+str$(GRP%) LPB%(3) = dll_call6("CreateLabelPictureButtonElement",GRP%,100,250,adr(bmp$),adr(lbup$),adr(lbdown$)) item_add 11,str$(LPB%(3))
lbup$ = "LPB 4 sorti" lbdown$ = "LPB 4 enfoncé" res% = dll_call5("ConfigureLabelPictureButtonGeometry",handle(0),161,71,0,0) res% = dll_call6("ConfigureLabelPictureButtonStyle",12,8,1,2,0,255) LPB%(4) = dll_call6("CreateLabelPictureButtonElement",GRP%,300,250,adr(bmp$),adr(lbup$),adr(lbdown$)) item_add 11,str$(LPB%(4))
lbup$ = "LPB 5 sorti" lbdown$ = "LPB 5 enfoncé" res% = dll_call5("ConfigureLabelPictureButtonGeometry",handle(0),161,71,0,0) res% = dll_call6("ConfigureLabelPictureButtonStyle",12,8,1,2,0,255) LPB%(5) = dll_call6("CreateLabelPictureButtonElement",GRP%,500,250,adr(bmp$),adr(lbup$),adr(lbdown$)) item_add 11,str$(LPB%(5))
return
clic0: res% = dll_call0("IdentifyLabelPictureButton") if res%<>0 for i%=1 to 10 if res%=LPB%(i%) caption 10,"clic sur "+str$(i%) return end_if next i% end_if return effacer: delete 21 delete 22 delete 23 for i%=1 to 1 : ' 10 message str$(i%)+": "+str$(LPB%(i%)) n% = LPB%(i%) res% = dll_call1("DeleteLabelPictureButton",n%) next i% return
L'autre objet, le ObjectGroup, permet de regrouper; de façon invisible, plusieurs objets Panoramic, et d'agir ensuite simultanément sur tous les objets d'un groupe. On peut créer autant de groupes qu'on veut, et un objet Panoramic peut appartenir simultanément à plusieurs groupes. Un exemple d'utilisation: rendre visible ou invisible d'un seul coup tous les objets d'un groupe. Voici un programme de démo: - Code:
-
' test_ObjectGroupl.bas
label cacher1, montrer1, cacher2, montrer2, dans1, dans2 label inactiver1, activer1, inactiver2, activer2 label supprimer1, creer1, supprimer2, creer2
dim res% dim OG1%, OG2%
width 0,700
button 1 : top 1,10 : left 1,10 : caption 1,"Cacher 1" on_click 1,cacher1 button 2 : top 2,30 : left 2,10 : caption 2,"Montrer 1" on_click 2,montrer1 button 5 : top 5,10 : left 5,110 : caption 5,"Inactiver 1" on_click 5,inactiver1 button 6 : top 6,30 : left 6,110 : caption 6,"Activer 1" on_click 6,activer1 button 51 : top 51,10 : left 51,210 : caption 51,"Supprimer 1" on_click 51,supprimer1 button 52 : top 52,30 : left 52,210 : caption 52,"Créer 1" on_click 52,creer1
button 3 : top 3,10 : left 3,310 : caption 3,"Cacher 2" on_click 3,cacher2 button 4 : top 4,30 : left 4,310 : caption 4,"Montrer 2" on_click 4,montrer2 button 7 : top 7,10 : left 7,410 : caption 7,"Inactiver 2" on_click 7,inactiver2 button 8 : top 8,30 : left 8,410 : caption 8,"Activer 2" on_click 8,activer2 button 53 : top 53,10 : left 53,510 : caption 53,"Supprimer 3" on_click 53,supprimer2 button 54 : top 54,30 : left 54,510 : caption 54,"Créer 3" on_click 54,creer2
dll_on "KGF.dll"
button 11 : top 11,90 : left 11,50 : caption 11,"Dans Panel 1" on_click 11,dans1 edit 12 : top 12,120 : left 12,50 alpha 13 : top 13,150 : left 13,50 : caption 13,"Libelle 1" picture 14 : top 14,180 : left 14,50 button 31 : top 31,90 : left 31,350 : caption 31,"Dans Panel 2" on_click 31,dans2 edit 32 : top 32,120 : left 32,350 alpha 33 : top 33,150 : left 33,350 : caption 33,"Libelle 2" picture 34 : top 34,180 : left 34,350
gosub creer1 gosub creer2
end cacher1: res% = dll_call3("ObjectGroupFunction",OG1%,1,0) return
montrer1: res% = dll_call3("ObjectGroupFunction",OG1%,1,1) return inactiver1: res% = dll_call3("ObjectGroupFunction",OG1%,2,0) return
activer1: res% = dll_call3("ObjectGroupFunction",OG1%,2,1) return
supprimer1: OG1% = dll_call1("DeleteObjectGroup",OG1%) return creer1: OG1% = dll_call0("CreateObjectGroup") res% = dll_call2("AddObjectToObjectGroup",OG1%,object_internal(11)) res% = dll_call2("AddObjectToObjectGroup",OG1%,object_internal(12)) res% = dll_call2("AddObjectToObjectGroup",OG1%,object_internal(13)) res% = dll_call2("AddObjectToObjectGroup",OG1%,object_internal(14)) return
dans1: message "Clic sur bouton dans ObjectGroup 1" return
cacher2: res% = dll_call3("ObjectGroupFunction",OG2%,1,0) return
montrer2: res% = dll_call3("ObjectGroupFunction",OG2%,1,1) return
inactiver2: res% = dll_call3("ObjectGroupFunction",OG2%,2,0) return
activer2: res% = dll_call3("ObjectGroupFunction",OG2%,2,1) return supprimer2: OG2% = dll_call1("DeleteObjectGroup",OG2%) return
creer2: OG2% = dll_call0("CreateObjectGroup") res% = dll_call2("AddObjectToObjectGroup",OG2%,object_internal(31)) res% = dll_call2("AddObjectToObjectGroup",OG2%,object_internal(32)) res% = dll_call2("AddObjectToObjectGroup",OG2%,object_internal(33)) res% = dll_call2("AddObjectToObjectGroup",OG2%,object_internal(34)) return
dans2: message "Clic sur bouton dans ObjectGroup 2" return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 12 Jan 2015 - 19:29 | |
| Wouhaou !... Ca s' est super Klaus ! Je fonce me mettre à jour. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Lun 12 Jan 2015 - 22:01 | |
| Superbe idée et réalisation. Très pratique ça. Merci Klaus | |
| | | 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 Lun 12 Jan 2015 - 22:37 | |
| Je lance le programme ; je clique sur Créer tout ; j’obtiens comme récompense : =========================================================== Pour le 2ème code Lignes 33 et suivantes - Code:
-
button 53 : top 53,10 : left 53,510 : caption 53,"Supprimer 3" on_click 53,supprimer2 button 54 : top 54,30 : left 54,510 : caption 54,"Créer 3" on_click 54,creer2 Supprimer / créer 3 et le on_click renvoie à supprimer / créer 2 qui ne fait rien ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 12 Jan 2015 - 23:38 | |
| @Papydall: As-tu chargé le fichier test.bmp (donné dans mon post) et placé dans le dossier dans lequel le programme s'exécute (ou adapté le chemin vers ce fichier) ? L'erreur que tu montres, se produit lorsque le fichier ne peut pas être chargé. Bon, je devrai sécuriser cela - d'accord. Mais en attendant, si tu suis la procédure, ça doit marcher... EDIT En fait, c'est bizare. J'ai déjà sécurisé cela: - Code:
-
if length(bmp)>0 then begin if FileExists(bmp) then LabelPictureButton.Glyph.LoadFromFile(bmp); end; Donc, ce n'est pas l'absence du fichier qui pose problème, au moment du chargement. Mais plutôt ce qui suit. Car dans ce fichier, il doit y avoir (regarder la doc à ce sujet !) 4 images successives, de même dimension, accolées les unes aux autres horizontalement, comme dans l'image du post. Et c'est lors de l'utilisation interne de cette image que ça plante: - Code:
-
LabelPictureButton.NumGlyphs := 4;
J'indique que ce composant contient 4 images, et la bitmap sera divisée automatiquement en 4 portions. Or, si la bitmap est vide... boum ! 2ème EDIT: - Citation :
- Pour le 2ème code
Lignes 33 et suivantes
Code: - Code:
-
button 53 : top 53,10 : left 53,510 : caption 53,"Supprimer 3" on_click 53,supprimer2 button 54 : top 54,30 : left 54,510 : caption 54,"Créer 3" on_click 54,creer2
Supprimer / créer 3 et le on_click renvoie à supprimer / créer 2 qui ne fait rien ! Certes, il y a une erreur de libellé. Au lieu de "Supprimer 3" et "Créer 3", ça devrait s'appeler "Supprimer 2" et "Créer 2". Mais attention: cela ne supprime ni crée les objets Panoramic ! Cela supprime ou crée le ObjectGroup qui regroupe les objets positionnés en-dessous ! La preuve: clique sur "Supprimer 2" - rien ne semble se passer. Pourtant, clique maintenant sur "Cacher 2" - et là, rien ne se passe ! Normal: le ObjectGroup 2 a été supprimé ! Maintenant, clique sur "Créer 2", puis "Cacher 2" - les objets disparaissent ! Pourquoi ? Le groupe ( et pas les objets Panoramic) a été recréé, et on peut à nouveau agir sur le groupe complet ! | |
| | | 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 13 Jan 2015 - 0:33 | |
| L'erreur se situe sur la ligne 32 - Code:
-
LPB%(1) = dll_call6("CreateLabelPictureButton",0,100,100,adr(bmp$),adr(lbup$),adr(lbdown$))
sur la ligne 40 - Code:
-
LPB%(2) = dll_call6("CreateLabelPictureButton",1,500,100,adr(bmp$),adr(lbup$),adr(lbdown$))
sur la ligne 49 - Code:
-
GRP% = dll_call3("CreateLabelPictureButtonContainer",2,100,250)
J'ai mis les lignes 32, 40 et 49 en REM, le programme s'est déroulé sans erreur; et la ligne 51 semble ne pas provoquer d'erreur - Code:
-
LPB%(3) = dll_call6("CreateLabelPictureButtonElement",GRP%,100,250,adr(bmp$),adr(lbup$),adr(lbdown$))
Donc, si os il y a, c’est au niveau des fonctions CreateLabelPictureButton CreateLabelPictureButtonContainer | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 13 Jan 2015 - 0:46 | |
| Désactiver les lignes 32 et 42 signifie que tu ne crées plus ces boutons. Evidemment, il n'y a plus d'erreur... Désactiver la ligne 49 signifie que tu ne crées plus le container. Donc, en ligne 51, le bouton ne peut plus être créé puisque le container n'existe pas. Donc, plus d'erreur non plus...
A ce rythme, il suffit de tout supprimer et de laisser juste le END, et tout va bien. (désolé, je n'ai pas pu résister...)
Plus sérieusement: en ligne 7, mets le chemin complet vers le fichier test.bmp, ou alors, crée l'exécutable là où se trouve le fichier test.bmp et lance l'exécutable. Et ça marchera, dans un cas comme dans l'autre. | |
| | | 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 13 Jan 2015 - 1:23 | |
| Salut Klaus. J’ai des doutes sur le format de l’image. Après tests, il s’est avéré que l’image que tu as postée est une image JPG et non BMP, c’est pourquoi ça n’a pas marché chez moi ! Je l’ai soumise à Paint pour changer son type. ET ÇA MARCHE ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 13 Jan 2015 - 1:34 | |
| J'ai bien chargé une image BMP. Si, sur le site, elle apparaît comme un JPG, c'est le forum qui l'a transformée. Mais regarde sur mon WebDav, dossier Sources\KGF\ - tu y trouves bien le fichier test.bmp.
Ceci dit, je suis content que ça marche maintenant. Essaie de voir un peu le fonctionnement des différents types de boutons. Et tu peux mettre tes propres bitmaps,, même des photos, à condition de respecter deux règles: 1. créer un BMP avec les 4 images accollées, toutes de même dimension, quelles qu'elles soient, associés aux états suivants, dans l'ordre: sorti, survolé, enfoncé, inactif. Seuls "sorti" et "enfoncé" sont utilisés, mais les autres doivent être présents. 2. dans les fonctions ...Geometry, mettre les mêmes dimensions largeur et hauteur que celles des images individuelles. Ainsi, tu obtiens des boutons avec tes propres images (simples couleurs, dessins, icônes, photos...). | |
| | | 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 13 Jan 2015 - 2:23 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 13 Jan 2015 - 11:10 | |
| J'ai restructuré la doc en rassemblant tout ce qui gestion des objets sous une rubrique "Objets" en tête de sommaire. C'est un peu plus lisible ainsi.
Eléments modifiés: KGF.chm
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 13 Jan 2015 - 18:58 | |
| Voici un petit exemple d'utilisation de l'objet GroupObject, pour adapter les zones d'une page de saisie au type d'information à saisir. Prenons une saisie de contacts. J'ai choisi 2 types de contacts: particuliers et entreprises. Une première combo permet de choisir cela. Automatiquement, les zones correspondantes s'affichent, et on peut passer de l'un à l'autre comme on veut. Pour le vérifier, il suffit de saisir des informations dans chaque zone, puis de passer à l'autre type de contact, puis saisir là aussi saisir des informations différentes. Enfin, on bascule à nouveau entre les deux types de saisies, et on voit les informations spécifiques pour chaque type de saisie. Dans la saisie pour particuliers, il y a une combo pour choisir la civilité. Et lorsqu'on choisit Mme ou Mlle, un libellé et un champ supplémentaire pour le nom de naissance apparaît. Voici le code: - Code:
-
' saisie_contact.bas
' Ce programme est une démonstration de l'utilisation de ' objet ObjectGroup, à l'aide de l'exemple de la saisie ' d'une fiche contact. En fonction du type de contact, ' certaines zones sont visibles, d'autres pas.
label click_1, click_11, click_41 width 0,800
' groupes d'objet dim OG_entreprise%, OG_particulier%, OG_particulier_feminin%
' variables de travail dim res%, i%
dll_on "KGF.dll"
combo 1 : top 1,10 : left 1,10 : on_click 1,click_1 item_add 1,"Particulier" item_add 1,"Entreprise"
' ===== zones pour particuliers OG_particulier% = dll_call0("CreateObjectGroup") OG_particulier_feminin% = dll_call0("CreateObjectGroup")
combo 11 : top 11,40 : left 11,10 : width 11,50 : on_click 11,click_11 item_add 11,"M." item_add 11,"Mme" item_add 11,"Mlle" item_add 11,"Dr." item_add 11,"Me" res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(11))
alpha 12 : top 12,70 : left 12,30 : caption 12,"Nom:" res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(12)) edit 13 : top 13,70 : left 13,60: width 13,120 res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(13)) alpha 14 : top 14,70 : left 14,200 : caption 14,"Prénom:" res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(14)) edit 15 : top 15,70 : left 15,250: width 15,120 res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(15)) alpha 16 : top 16,70 : left 16,390 : caption 16,"Nom de naissance:" res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(16)) res% = dll_call2("AddObjectToObjectGroup",OG_particulier_feminin%,object_internal(16)) edit 17 : top 17,70 : left 17,490: width 17,120 res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(17)) res% = dll_call2("AddObjectToObjectGroup",OG_particulier_feminin%,object_internal(17)) alpha 18 : top 18,100 : left 18,10 : caption 18,"Adresse:" res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(18)) edit 19 : top 19,100 : left 19,60: width 19,120 res% = dll_call2("AddObjectToObjectGroup",OG_particulier%,object_internal(19))
' ===== zones pour entreprises OG_entreprise% = dll_call0("CreateObjectGroup")
combo 41 : top 41,40 : left 41,10 : width 41,50 : on_click 41,click_41 item_add 41,"Sté" item_add 41,"SA" item_add 41,"SARL" item_add 41,"Cabinet" item_add 41,"Etude" res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(41))
alpha 42 : top 42,70 : left 42,30 : caption 42,"Nom:" res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(42)) edit 43 : top 43,70 : left 43,60: width 43,120 res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(43)) alpha 44 : top 44,100 : left 44,10 : caption 44,"Adresse:" res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(44)) edit 45 : top 45,100 : left 45,60: width 45,120 res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(45)) alpha 46 : top 46,130 : left 46,10 : caption 46,"INSEE:" res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(46)) edit 47 : top 47,130 : left 47,60: width 47,120 res% = dll_call2("AddObjectToObjectGroup",OG_entreprise%,object_internal(47))
' defaul: particulier res% = dll_call2("SelectComboBoxItem",handle(11),1) res% = dll_call2("SelectComboBoxItem",handle(41),1) res% = dll_call2("SelectComboBoxItem",handle(1),1) gosub click_1 gosub click_11
end
click_1: select item_index(1) case 1: ' particuliers res% = dll_call3("ObjectGroupFunction",OG_entreprise%,1,0) res% = dll_call3("ObjectGroupFunction",OG_particulier%,1,1) gosub click_11 case 2: ' entreprises res% = dll_call3("ObjectGroupFunction",OG_particulier%,1,0) res% = dll_call3("ObjectGroupFunction",OG_entreprise%,1,1) end_select return
click_11: i% = item_index(11) if (i%<2) or (i%>3) res% = dll_call3("ObjectGroupFunction",OG_particulier_feminin%,1,0) else res% = dll_call3("ObjectGroupFunction",OG_particulier_feminin%,1,1) end_if return click_41: return
Ce n'est qu'un petit exemple, mais j'espère que le principe est plus clair comme ça. On voit que deux objets (16 et 17) font partie de 2 ObjectGroup différents. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re : une petite question... Dim 18 Jan 2015 - 17:07 | |
| Klaus,
Penses tu pouvoir améliorer, ou plutôt intégrer un objet Tab classique avec les dernières évolutions de Panoramic ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 18 Jan 2015 - 23:56 | |
| J'ai fait une simulation d'un objet TAB, entièrement en Panoramic. Certes, c'est lourd à utiliser, mais ça marche, et ça donne beaucoup de souplesse, puisque tu peux définir tous les attribits (police, couleur, ...) pour chaque onglet. Tu peux même placer un tel objet TAB dans un onglet d'un autre objet TAB.
Je pourrais, par des fonctions DLL, injecter un objet TAB de Delphi. Mais il faudrait le gérer entièrement par les fonctions DLL, et ça n'apporte pas de fonctionnalités supplémentaires par rapport à l'objet TAB en Panoramic dont j'ai parlé ci-dessus.
Je ne vois pas bien ce que ça apporterait en plus. Il faudrait que l'objet TAB soit introduit dans Panoramic, mais c'est le domaine de Jack. Si Jack le fait, je retire mon objet Panoramic immédiatement, dès que toutes les fonctionnalités seront couvertes. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 19 Jan 2015 - 7:39 | |
| Fonctionnellement, cela n' apporterait pas grand chose de plus, je le concède, mais le visuel serait un peu plus pro au niveau des onglets. Je pense que pour ceux qui destinent leurs programmes à un partage public, cela serait un plus non négligeable. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 19 Jan 2015 - 10:48 | |
| Je comprends, Ygeronimi. Suggère cela à Jack, dans la rubrique correspondante... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 20 Jan 2015 - 1:08 | |
| Nouvelle version: KGF.dll V4.06 du 20/01/2015Nouveautés: - nouvel objet TabObject - début d'une restructuration interne majeure pour une meilleure modularitéModules modifiés: KGF.dllLes sources sont à jour. La doc suivra. Le nouvel objet fait suite à une question de YGeronimi. J'ai introduit une "simulation" d'un objet TAB, géré par la DLL, mais capable de recevoir des objets Panoramic, comme si c'était un container Panoramic, mais en multi-page, avec des onglets en haut. 5 nouvelles fonctions gèrent cela, et la palette va s'élargir pour offir d'autres fonctionnalités. Mais dès à présent, on peut en créer un nombre non limité, les placer où on veut, leur donner un nombre non limité d'onglets, et placer n'importe quel objet fenêtré Panoramic sur n'importe quel onglet (il faut qu'il y ait un handle de l'objet). Je contournerai cette limitation prochainement. Lorsque les onglets ne peuvent pas être visibles simultanément (à cause d'une largeur trop exigüe pour afficher tous les libellés, des petites flèches permettent de les faire défiler dans la barre des onglets. Une autre flèche, déjà affichée mais inactive, permettra d'afficher un menu vertical de tous les onglets pour un accès rapide. Et une croix, déjà affichée mais pas encore active, permettra de supprimer l'onglet sélectionné. Voici un programme de démo (le source est facile à lire): - Code:
-
' test PageControl.bas
label create1, create2, delete1, delete2
dim res%, s$ dim PC1%, PC2%, PC1pages%(3), PC2pages%(2), PC1handles%(3),PC2handles%(2)
button 1 : top 1,10 : left 1, 10 : width 1,20 : caption 1,"+" : on_click 1,create1 hint 1,"Créer PageControl 1" button 2 : top 2,10 : left 2,310 : width 2,20 : caption 2,"+" : on_click 2,create2 hint 2,"Créer PageControl 2"
button 3 : top 3,10 : left 3, 30 : width 3,20 : caption 3,"x" : on_click 3,delete1 hint 3,"Supprimer PageControl 1" button 4 : top 4,10 : left 4,330 : width 4,20 : caption 4,"x" : on_click 4,delete2 hint 4,"Supprimer PageControl 2"
dll_on "KGF.dll"
end
create1: PC1% = dll_call1("CreateTabObject",handle(0)) res% = dll_call5("TabObjectGeometry",PC1%,10,70,200,300) s$ = "Onglet 1" res% = dll_call2("AddTabObjectTab",PC1%,adr(s$)) s$ = "O. 2" res% = dll_call2("AddTabObjectTab",PC1%,adr(s$)) s$ = "O. 3" res% = dll_call2("AddTabObjectTab",PC1%,adr(s$))
if object_exists(11)=0 edit 11 : top 11,10 : left 11,10 button 13 : top 13,30 : left 13,50 memo 14 : top 14,40 : left 14,30 end_if res% = dll_call3("AddObjectToTabObjectTab",PC1%,1,handle(11)) res% = dll_call3("AddObjectToTabObjectTab",PC1%,2,handle(13)) res% = dll_call3("AddObjectToTabObjectTab",PC1%,3,handle(14)) return create2: PC2% = dll_call1("CreateTabObject",handle(0)) res% = dll_call5("TabObjectGeometry",PC2%,310,70,200,300) s$ = "Paget 1" res% = dll_call2("AddTabObjectTab",PC2%,adr(s$)) s$ = "P. 2" res% = dll_call2("AddTabObjectTab",PC2%,adr(s$)) s$ = "P. 3" res% = dll_call2("AddTabObjectTab",PC2%,adr(s$))
if object_exists(12)=0 edit 12 : top 12,10 : left 12,10 end_if res% = dll_call3("AddObjectToTabObjectTab",PC2%,2,handle(12)) return delete1: res% = dll_call1("DeleteTabObject",PC1%) PC1% = 0 return
delete2: res% = dll_call1("DeleteTabObject",PC2%) PC2% = 0 return
| |
| | | Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Objet TAB. Mar 20 Jan 2015 - 7:01 | |
| Bonjour.
Je viens de tester l'objet TAB, et tout fonctionne parfaitement. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 20 Jan 2015 - 10:52 | |
| Je me doutais que ce défi allait te travailler l' esprit... Je vais de ce pas mettre à jour la dll et faire quelques tests. Bravo et surtout merci Klaus. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 20 Jan 2015 - 11:08 | |
| | |
| | | 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
| |
| |
| |