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 - demandes ou suggestions de modifications ou ajouts | |
|
+7papydall Oscaribout Marc Pedro Minibug pascal10000 Klaus 11 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 24 Mar 2022 - 14:11 | |
| - Citation :
- Lorsque le FORM est sélectionné par le DESIGNER je suis bien obligé de bloqué son déplacement et son dimensionnement sinon le DESIGNER ne suis pas. On est bien d'accord ?
Ben, non, en fait ! Si tu utilses le Designer pour traiter un objet FORM, il faut laisser l'objet FORM entièrement libre et déplacer ou redimensionner le Designer, pas la form ! Alors, les USER_EVENT donneeront les informations comment adapter le form en fonction des movements du Designer. Pas l'inverse. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 24 Mar 2022 - 14:23 | |
| OK je reprends tout ça ce soir et je te tiens au courant. Merci. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 24 Mar 2022 - 18:18 | |
| D'ailleurs, si tu veux configurer une form dans un IDE, nul besoin du Designer ! Je te donne la technique (valable uniquement pour un objet FORM).
En fait, une form est en réalité son propre designer. Tu oeux aisément la déplacer ou changer ses dimensions à l'aide de la souris. Tu me diras bien sûr que, dans ce cas, ton IDE ne connait pas les changements intervenus. C'est là qu'intervient mon astuce, en 100 % Panoramic: - dès qu'un objet FORM est sélectionné, tu actives un timer avec une intervalle assez courte (500 ms par exemple). - dans la routine ON_TIMER de ce timer, tu mémorises les valeurs LEFT(), TOP(), WIDTH() et HEIGHT() de la FORM activée. - tu stoppes ce timer dès qu'un autre objet est sélectionné.
Tu voulais une form sans bord, ou sans barre de titre, en bref une FORM handicapée ? Rien de plus simple. Lorsqu'elle est sélectionné, tu lui remets justement les attrbuts par défaut. Tu peux ainsi la tirer normalement. Puis, lorsqu'elle est désélectinnée, tu lui remets ces attributs handicpants...
Tu vois, pour une FORM, c'est très simple, en réalité. Le Designer devient un nécessité pour les autres objets pour lequels cette astuce ne marche pas, évidemment. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 24 Mar 2022 - 22:03 | |
| Rien ne vaut un bon exemple... J'ai mis en évidence 2 codes pour que tu puisses voir ce que je veux faire. Le 1er avec un form libre et le 2eme avec un form fixe. Dans le 1er test ci-dessous, j'ai repris ton code en changeant juste la ligne 16 pour mettre un form au lieu du memo. et le designer ne fonctionne pas dans ce cas de figure ! Enfin si il fonctionne mais pas en synchro sur le form ! C'est pourquoi j'avait décidé de bloquer le déplacement, l'agrandissement et les boutons. Et comme cela le designer fonctionne ! Sauf le problème énoncé précédemment. La raison pour laquelle je souhaite utiliser le designer sur le form c'est déjà pour une question de standard (tous les objets sont traités de la même façon). et ensuite si je n'utilise pas designer sur le form, je suis bloqué par la commande ON_MOVE qui ne fonctionne que sur le FORM 0. Donc impossible de traiter le déplacement. C'est pour cette raison que j'ai procédé de cette façon ! Sur le second code le soucis apparait lorsqu'on clique sur le bord du form ou lors d'un clique dans la barre de titre avec déplacement vers le haut à gauche. Pour faire le test du second code, il faut d'abord écarter le form du coin en haut à gauche avec le designer. et faire le test indiqué ci-dessus ensuite.- Code avec FORM non bloqué:
- Code:
-
' test_designer.bas
label user_event
dim DS%
DIM WParam%, LParam%, actevent%, objevent%, llevent%, ttevent%, wwevent%, hhevent% DIM MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskHigh%, MaskLow%, MoveAction%, SizeAction%
MaskOrigin% = hex("FF000000") : MaskOperation% = hex("00FF0000") : MaskPanoramic% = hex("0000FFFF") MaskHigh% = hex("FFFF0000") : MaskLow% = hex("0000FFFF") MoveAction% = hex("00030000") : SizeAction% = hex("00040000")
dll_on "D:\PROGRAMMATION\EDITEUR OBJETS\dll\KGF.dll"
FORM 10 : ' objet à traiter memo 123 : hide 123 : bar_both 123 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24)
ON_USER_EVENT user_event
END
user_event: IF BIN_AND(USER_EVENT_WPARAM,MaskOrigin%)<>0 THEN RETURN : ' NE VENANT PAS DU DESIGNER WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM
' OFF_USER_EVENT
actevent% = BIN_AND(WParam%,MaskOperation%)/65536 SELECT actevent% CASE 3 objevent% = BIN_AND(WParam%,MaskPanoramic%) llevent% = BIN_AND(LParam%,MaskHigh%)/65536 ttevent% = BIN_AND(LParam%,MaskLow%) LEFT objevent%,llevent% TOP objevent%,ttevent% RETURN CASE 4 objevent% = BIN_AND(WParam%,MaskPanoramic%) wwevent% = BIN_AND(LParam%,MaskHigh%)/65536 hhevent% = BIN_AND(LParam%,MaskLow%) WIDTH objevent%,wwevent% HEIGHT objevent%,hhevent% RETURN END_SELECT ' ON_USER_EVENT user_event RETURN
- Code avec FORM bloqué:
- Code:
-
' test_designer.bas
label user_event
dim DS% , fm% , res%
DIM WParam%, LParam%, actevent%, objevent%, llevent%, ttevent%, wwevent%, hhevent% DIM MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskHigh%, MaskLow%, MoveAction%, SizeAction%
MaskOrigin% = hex("FF000000") : MaskOperation% = hex("00FF0000") : MaskPanoramic% = hex("0000FFFF") MaskHigh% = hex("FFFF0000") : MaskLow% = hex("0000FFFF") MoveAction% = hex("00030000") : SizeAction% = hex("00040000")
dll_on "D:\PROGRAMMATION\EDITEUR OBJETS\dll\KGF.dll"
FORM 10 : ' objet à traiter memo 123 : hide 123 : bar_both 123
fm%=HANDLE(10) res%=DLL_CALL2("FixedFormSize",fm%,1) : ' Fixe la dimension du FORM res%=DLL_CALL2("FixedFormPosition",fm%,1) : ' Bloque le déplacement du FORM res%=DLL_CALL2("SetMinimizeMaximize",fm%,0) : ' Bloque le dimensionnement du FORM res%=DLL_CALL2("SetCloseBox",fm%,0) : ' Fixe la fermeture du FORM
' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24)
ON_USER_EVENT user_event
END
user_event: IF BIN_AND(USER_EVENT_WPARAM,MaskOrigin%)<>0 THEN RETURN : ' NE VENANT PAS DU DESIGNER WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM
' OFF_USER_EVENT
actevent% = BIN_AND(WParam%,MaskOperation%)/65536 SELECT actevent% CASE 3 objevent% = BIN_AND(WParam%,MaskPanoramic%) llevent% = BIN_AND(LParam%,MaskHigh%)/65536 ttevent% = BIN_AND(LParam%,MaskLow%) LEFT objevent%,llevent% TOP objevent%,ttevent% RETURN CASE 4 objevent% = BIN_AND(WParam%,MaskPanoramic%) wwevent% = BIN_AND(LParam%,MaskHigh%)/65536 hhevent% = BIN_AND(LParam%,MaskLow%) WIDTH objevent%,wwevent% HEIGHT objevent%,hhevent% RETURN END_SELECT ' ON_USER_EVENT user_event RETURN
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 24 Mar 2022 - 23:41 | |
| Je ne comprends pas ton problème. Les deux codes fonctionnent parfaitement, sans acccroc, sans perte de lien entre le Designer le la form à gérer. Certes, ayant un cadre très mince, iol faut bien viser pour attrapper le cadre ou les poignées. Mais tout marche bien.
J'ai pris tes deux codes tels quels, juste en ajustant le chemin vers KGF.dll à ma configuration. Mais attention; pour déplacer ou changer de dimensions, il faut utiliser uniquement le Designer et ne jamais tirer sur la form. Pour cela, tu peux ajouter la ligne "inactive 10" juste aprèe la creation de la form. Aucune incidence sur le Designer, mais plus de risque d'attrapper la form par mégarde. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 25 Mar 2022 - 9:03 | |
| Bonjour Klaus ! - Klaus a écrit:
- Mais attention; pour déplacer ou changer de dimensions, il faut utiliser uniquement le Designer et ne jamais tirer sur la form
Alors là c'est pas gagné ! Je vais voir en mettant la form en inactive ce que ça donne. Bonne journée Klaus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 25 Mar 2022 - 21:47 | |
| En fait, c'est simple, Minibug. TAnt que tu es avec l'utilisation du Designer, tu es en réalité dans ton IDE pour construire l'interface visuelle. Donc, ton objet Form n'a pas de fonction propre - il est juste là pour l'aspect visuel.
Donc, immédiatement après sa creation par la commande FORM, tu le désactives oar la commande INACTIVE et c'est tout. A partir de ce moment, tu peux le traiter comme n'importe quel objet.
Tu peux bien sûr affiner la chose en le déactivant uniquement lors de sa sélection pour le Designer, puis le réactiver lorsqu'il n'est plus attaché au Designer. A toit de voir... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 25 Mar 2022 - 23:19 | |
| Merci pour ces précisions Klaus. Je n'ai pas eu le temps de regarder aujourd'hui. Je testerai demain. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 26 Mar 2022 - 12:14 | |
| Bonjour Klaus ! Lorsque j'inactive les FORMs les déplacements et les agrandissements sont corrects. Mais je n'ai plus accès aux objets dans la FORM et donc plus de sélection et déplacement possible... Donc j'en suis toujours au même point ! Edit 13:35 : Bon après pas mal de cheveux perdus (déjà qu'il en reste pas beaucoup... hihihi !) j'ai enfin trouvé un fonctionnement correct. C'est pas encore parfait mais ca commence à prendre forme... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Dim 27 Mar 2022 - 0:58 | |
| - Citation :
- Mais je n'ai plus accès aux objets dans la FORM et donc plus de sélection et déplacement possible...
J'entends bien, mais c'est justement ! Pourquoi ne pas inactiver la form ai moment de l'attacher au Designer et la réactiver lorsqu'elle en est détachée - je n'arrive pas à comprendre ce qui pose problème avec ce scénario... EDIT 27/03/2022 à 22:08 Voici une "proof of concept" de ce que je propose: - Code:
-
' test_designer.bas
label user_event
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam% MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
' memo 10 : ' mémo à traiter form 10 inactive 10 : ' <============ après la suppression du Designer, faire activate 10 ! memo 123 : hide 123 : bar_both 123 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24)
on_user_event user_event end
user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select return
C'est bien une FORM gérée par le Designer, et il n'y a aucun décalage ni désynchronisation. Je pense que c'est la solution. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Mer 30 Mar 2022 - 19:49 | |
| Bonjour Klaus ! Bon je crois que je vais abandonner le projet... La gestion des forms me pose trop de soucis... J'ai une erreur dans les activation désactivation des forms et je n'arrive pas à m'en défaire ! Et comme tout cela est lié au système de sélection des objets et du treeview ça devient insoluble... Et je n'ai pas envie de tout reprendre... Sur le papier je reconnais que c'est plutôt simple mais une fois intégré dans le programme cela l'est beaucoup moins. Et puis dans ton exemple tu gère un objet fixe donc oui là c'est simple. Mais si l'on commence à mettre plusieurs forms avec une sélection et des objets dedans, là ça se corse... J'ai 2 solutions : - Reprendre toute la gestion du treeview et des objets en intégrant le designer de KGF. Travail considérable en sachant que j'y suis depuis un certain temps... - Garder le programme tel qu'il était avant l'intégration du designer et tenter une configuration 100% Panoramic. Mais là c'est pareil j'ai des limitations Comme le ON_MOVE qui ne réagit que sur la form 0 Voilà ou j'en suis pour le moment. Déçu de ne pas pouvoir mettre ça en place et que ça fonctionne correctement. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 31 Mar 2022 - 18:07 | |
| Dommage... Et pourtant, ça marche ! Regarde cette démo: - Code:
-
' test_designer.bas
label user_event, select_10, select_11, deselect
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam%
MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
' memo 10 : ' mémo à traiter form 10 inactive 10 : ' <============ après la suppression du Designer, faire activate 10 ! button 101 : parent 101,10 : left 101,30 : top 101,50 form 11 : top 10,50 : left 11,400 inactive 11 : top 11,50
main_menu 1000 sub_menu 1001 : parent 1001,1000 : caption 1001,"Sélectionner form 1O" on_click 1001,select_10 sub_menu 1002 : parent 1002,1000 : caption 1002,"Sélectionner form 11" on_click 1002,select_11 sub_menu 1003 : parent 1003,1000 : caption 1003,"Désélectionner" on_click 1003,deselect
memo 123 : hide 123 : bar_both 123
on_user_event user_event end
select_10: if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return select_11: if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",11,handle(0),handle(123),object_internal(11),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return deselect: if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) return user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select return
Deux forms, dont une avec un bouton. Au départ, rien n'est sélectionné. Le menu te permet de sélectionner une form ou l'autre et de la changer par le Designer. Le bouton dans la form suit docilement les déplacements de la form. Tu peux aussi désélectionner. Mais sélectionner une form directement alors qu'une autre est encore sélectionnée, ça marche aussi... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 31 Mar 2022 - 19:04 | |
| Bonsoir Klaus ! Aucun doute que le designer fonctionne ! Le problème vient incontestablement de mon programme. Je ne mets pas en doute le bon fonctionnement de KGF. Mon programme devient une telle usine à gaz encore une fois... En plus de ce que tu présente j'ai fais en sorte que l'on puisse cliquer sur les objets pour les sélectionner. Enfin ceux qui sont cliquables... Et je crois bien que mon problème vient de là.... Je suis en train de remonter le fil petit à petit pour tenter de démêler tout ça ! Je suis en vacances semaine prochaine, j'aurai plus de temps à y consacrer... Je te tiens au courant. Merci pour ton aide ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 31 Mar 2022 - 21:16 | |
| Alors, essaie le code qui suit. Un simple clic dans une des deux forms la sélectionne et l'attache au Designer. - Code:
-
' test_designer.bas
label user_event, select_10, select_11, deselect
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam%
MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
' memo 10 : ' mémo à traiter form 10 button 101 : parent 101,10 : left 101,30 : top 101,50 form 11 : top 10,50 : left 11,400
on_click 10,select_10 on_click 11,select_11
main_menu 1000 sub_menu 1001 : parent 1001,1000 : caption 1001,"Sélectionner form 1O" on_click 1001,select_10 sub_menu 1002 : parent 1002,1000 : caption 1002,"Sélectionner form 11" on_click 1002,select_11 sub_menu 1003 : parent 1003,1000 : caption 1003,"Désélectionner" on_click 1003,deselect
memo 123 : hide 123 : bar_both 123
on_user_event user_event end
select_10: active 11 inactive 10 : ' <============ après la suppression du Designer, faire activate 10 ! if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return select_11: active 10 inactive 11 : ' <============ après la suppression du Designer, faire activate 10 ! if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",11,handle(0),handle(123),object_internal(11),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return deselect: if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) return user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 31 Mar 2022 - 23:09 | |
| Merci Klaus ! J'ai passé toutes ces étapes depuis un bon moment... Le soucis que j'ai rencontré en fait c'est lors de l'intégration du nouveau designer alors que toute la gestion objet était réalisée depuis un moment. Et c'est là que les problèmes sont apparus ! Mais je pense avoir mis le doigt sur le bug... En fait j'ai un double appel dans une SUB qui génère un bug au 2ème passage en trouvant sur son chemin un DIR_LOCAL alors que la variable locale est déjà créée. Concrètement, il y a un second appel à la SUB alors que le premier n'est pas terminé. Et cela se produit lors d'un appel par ON_ACTIVATE ou ON_CLIC sur le FORM. Ces 2 appels sont nécessaires pour 2 gestions différentes du form. La parade que j'ai trouvé pour le moment c'est que si la variable locale existe alors on sort de la SUB. Et là plus de bug ! C'est pas très glorieux comme technique mais cela semble fonctionner. Je reviens vers toi dans le weekend ou début de semaine pour la suite. Encore merci. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Ven 1 Avr 2022 - 2:32 | |
| l'important est vraiment d'inactiver l'objet sélectionné et attaché au Designer au moment deson attachement, et de le réactiver dès qu'il est détaché du Designer. Et, d'ailleurs, pour cela, il faut supprimer le Designer et le recréer lors de l'attachement à un autre objet, tel que c'est fait dans la dernière démo.
Dans ce cas, tu n'auras plus le problème d'activation d'une sub alors qu'elle n'a pas fini, tout simplement parce qu'il n'y a plus d'évènement supplémentaire. Et en ce qui concerne la sélection par programme,, comme dans la démo, il fait tester si la variable contenant le Designer (DS% dans le cas de la démo) est différent de zéro. Il faut alors d'abord supprimer le Désigner, réactiver l'objet attaché et recréer le Designer pour qu'il gère un autre objet. Tout cela est visible dans la démo.
EDIT 01/01/2022 à 17:40
Ce n'est pas un poisson d'Avril, mais j'ai pensé à un problème qui pourrait causer des ennuis de synchronisation entre un objet Panoramic et le Designer chargé de le "configurer".
Tant que tu n'agis que par le Designer, tout ira bien. Mais si tu changes la position ou les dimensions de l'objet encadré par le programme Panoramic, la synchronisation avec le Designer est rompue et inpossible à récupérer.
Conseil: Si position ou dimensions doivent être changées par le programme Panoramic, alors procéder comme suit: - tout d'abord, supprimer le Designer - changer ce qu'il faut - recréer un Designer - attacher l'objet modifié auDesigner
Alors, il n'y aura plus de problème. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 11:05 | |
| Voici une version du progamme de démo un peu plus explicite. Il y a toujours les deux forms, mais la form 10 contient un bouton maintenant. On peut sélectionner n'importe lequel de ces objets et le modifier par le designer qui apparait. Le menu permet de désélectionner l'objet sélectionné, quel qu'il soit. Un bouton permet de déplacer l'objet sélectiionné par programme. On peut ainsi agir sur n'importe lequel de ces objets. Une variable objet_selectionne% contient le numéro de l'objet sélectionné actuellement. Une variable parent_selectionne% contient le parent de l'objet sélectionné actuellement. Cette dernière peut être remplacée par l'appel de la fonction parent(objet_selectionne%). Observe surtout l façon dont on déplace (ou redimensiionne, c'est pareil) un objet sélectionné: - supprimer le Designer - déplacer l'objet - recréer le designer - Code:
-
' test_designer.bas
label user_event, select_10, select_11, select_101, move, deselect
dim res%, i%, s$, obj%, DS%, p%, MaskOrigin%, MaskOperation%, MaskPanoramic%, MaskLow%, MaskHigh% dim MoveAction%, SizeAction%, ll%, tt%, ww%, hh%, action%, WParam%, LParam% dim objet_selectionne% : objet_selectionne% = -1 dim parent_selectionne% : parent_selectionne% = -1
MaskOrigin% = hex("FF000000") MaskOperation% = hex("00FF0000") MaskHigh% = hex("FFFF0000") MaskLow% = hex("0000FFFF") MaskPanoramic% = hex("0000FFFF") MoveAction% = hex("00030000") SizeAction% = hex("00040000")
dll_on "KGF.dll"
' memo 10 : ' mémo à traiter form 10 : top 10,30 : left 10,width(0)+30 button 101 : parent 101,10 : left 101,30 : top 101,50 form 11 : top 11,top(10)+height(10)+20 : left 11,width(0)+60
on_click 10,select_10 on_click 11,select_11 on_click 101,select_101
main_menu 1000 sub_menu 1001 : parent 1001,1000 : caption 1001,"Sélectionner form 1O" on_click 1001,select_10 sub_menu 1002 : parent 1002,1000 : caption 1002,"Sélectionner form 11" on_click 1002,select_11 sub_menu 1004 : parent 1004,1000 : caption 1004,"Sélectionner button 101" on_click 1004,select_101 sub_menu 1005 : parent 1005,1000 : caption 1005,"Déplacer l'objet sélectionné" on_click 1005,move sub_menu 1003 : parent 1003,1000 : caption 1003,"Désélectionner" on_click 1003,deselect
memo 123 : hide 123 : bar_both 123
on_user_event user_event end
select_10: if objet_selectionne%>0 then active objet_selectionne% if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) inactive 10 : ' <============ après la suppression du Designer, faire activate 10 ! objet_selectionne% = 10 parent_selectionne% = 0 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",10,handle(0),handle(123),object_internal(10),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return select_11: if objet_selectionne%>0 then active objet_selectionne% if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) inactive 11 : ' <============ après la suppression du Designer, faire activate 11 ! objet_selectionne% = 11 parent_selectionne% = 0 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",11,handle(0),handle(123),object_internal(11),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return select_101: if objet_selectionne%>0 then active objet_selectionne% if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) inactive 101 : ' <============ après la suppression du Designer, faire activate 101 ! objet_selectionne% = 101 parent_selectionne% = 10 ' dans CreateDesigner, le dernier paramètre est la largeur de la bordure jaune. ' Une largeur de 3 est un minimum si l'on veut pouvoir saisir les poignées noires. DS% = dll_call6("CreateDesigner",101,handle(10),handle(123),object_internal(101),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) return move: if objet_selectionne%>0 DS% = dll_call1("DeleteDesigner",DS%) top objet_selectionne%,top(objet_selectionne%) + 10 left objet_selectionne%,left(objet_selectionne%) + 10 DS% = dll_call6("CreateDesigner",objet_selectionne%,handle(parent_selectionne%),handle(123),object_internal(objet_selectionne%),1,3) ' l'appel suivant impose une grille magnétique de 24 pixels ' res% = dll_call6("DesignerFunction",5,DS%,0,0,0,24) end_if return deselect: if DS%<>0 then DS% = dll_call1("DeleteDesigner",DS%) if objet_selectionne%>0 then active objet_selectionne% objet_selectionne% = -1 parent_selectionne% = -1 return user_event: if bin_and(USER_EVENT_WPARAM,MaskOrigin%)<>0 then return : ' pas venant du designer ? WParam% = USER_EVENT_WPARAM LParam% = USER_EVENT_LPARAM action% = bin_and(WParam%,MaskOperation%)/65536 select action% case 3 obj% = bin_and(WParam%,MaskPanoramic%) ll% = bin_and(LParam%,MaskHigh%)/65536 tt% = bin_and(LParam%,MaskLow%) left obj%,ll% top obj%,tt% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(left(10))+","+str$(top(10))+" "+hex$(USER_EVENT_WPARAM)+" "+hex$(USER_EVENT_LPARAM) return case 4 obj% = bin_and(WParam%,MaskPanoramic%) ww% = bin_and(LParam%,MaskHigh%)/65536 hh% = bin_and(LParam%,MaskLow%) width obj%,ww% height obj%,hh% ' caption 0,hex$(WParam%)+" "+hex$(LParam%)+" "+str$(width(10))+","+str$(height(10)) return end_select return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 13:45 | |
| Bonjour Klaus, Bon a priori cela fonctionne bien maintenant ! Si tu veux voir l'avancement de l'éditeur (en chantier !!! hihihi) tu peux le télécharger depuis ce lien. Il suffit de dézipper le fichier. Le tout est dans un dossier. Comme c'est une version de test, tu verra les GRIDs en bas de l'écran qui bien sûr n'existeront plus après. c'est pour le débogage. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 14:41 | |
| Bonjour à tous ! Sujets : Designer (Klaus) et Editeur d’objets (Minibug)J’ai testé, c’est génial ! Belles prouesses ! Bravo Klaus et Minibug ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 16:31 | |
| Merci à Minibug et Marc !
Si cela vous intéresse, je viens de poster ma moûture d'un GUI_Builder utilisant KGFTreeView, KGFGrid, 7Zip et Designer. Pour le mome,t, il gère BUTTON, EDIT, PICTURE_BUTTON et PANEL, mais il contient déjà tout ce qu'il faut pour construire d'autres "maquettes". Pour cela, cliquer sur "Défini", saisir * et valider, et on a la maquette "matrice" permettant de créer les autres maquettes (par "Enregistrer_sous...", puis modifier les valeurs des nouvelles maquettes, puis "Enregistrer").
Au passage, la maquette est présentée dans un KGFTreeView ayant des champs "protégés" (ni=on saisissables, non supprimables, non déplaçables) et d'autres libres d'accès. Les éléments simples peuvent être modifiés quant à leur nom, leur nature et leur valeur âr défaut, et peuvent être déplacés par Drag end Drop (nouvelle possiblité de KGFTreeView depuis la nouvelle version de KGF.dll de ce jour). | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 17:45 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 18:08 | |
| Non, Minnibug, certes pas !
J'ai juste voulu créer une "preuve de faisabilité" puisque tu m'as mis en doute sur la possibilité d'utiliser le Designer. Je n'ai aucune intention de créer un outil complet, et de plus, ce ne serait nullement intégré à quoi que ce soit.
En fait, j'ai voulu faire une démo, mais vraiment qu'une démo, de Designer en collaboration avec les 3 autres objets annexes que sont KGFGrid, KGFTreeView et 7Zip.
Ta démarche garde tout son intérêt - mon code, qui n'ira pas plus loin d'ailleurs, est juste un libre-service de techniques et portions de code à porter ailleurs. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Sam 2 Avr 2022 - 18:16 | |
| Je rigole Klaus... Ne le prends surtout pas au pied de la lettre... Si c'était le cas je n'aurai pas développé toutes ces versions d'éditeur qui sont (presque) aussi nombreuses que les versions de Panoramic !!! Par contre oui je me servirai avec joie de ces nouvelles fonctions et ces nouvelle possibilités. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 7 Avr 2022 - 16:19 | |
| Bonjour Klaus !
J'ai quelques difficultés avec l'objet TAB. Je te rassure cela ne vient pas de KGF ! Simplement comme on ne peut pas déplacer ni agrandir cet objet, cela pose quelques soucis lors de sa sélection.
Est ce qu'il serai possible quand le désigner est activé, de bloquer le déplacement et le redimensionnement d'un objet TAB ? Ou bien une fonction permettant cela, pour qu'on active ou désactive le déplacement et le redimensionnement et en fait avoir juste le cadre du désigner.
De plus lorsqu'un objet est sélectionné dans un TAB celui-ci ne s'affiche pas en avant plan comme avec les FORMs par exemple. Mais ça je vais voir car je crois qu'il faut passer par un ACTIVE tab% ou quelque chose comme ça. il faut que je recherche...
Dernière édition par Minibug le Jeu 7 Avr 2022 - 17:37, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts Jeu 7 Avr 2022 - 16:41 | |
| Ok. Je vais faire quelques essais - je n'ai pas encore essayé avec TAB. | |
| | | Contenu sponsorisé
| Sujet: Re: KGF.dll - demandes ou suggestions de modifications ou ajouts | |
| |
| | | | KGF.dll - demandes ou suggestions de modifications ou ajouts | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |