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 |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 25 Fév 2015 - 21:16 | |
| Je vais prendre sur le webdav pour tout remettre en ordre... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 25 Fév 2015 - 21:17 | |
| Nouvelle version: KGF.dll V4.34 du 25/02/2015
Nouveautés: -amélioration de la fonction GetActualVersions
Modules modifiés: KGF.dll
Les sources sont à jour. La doc est inchangée.
En cas d'absence d'internet, ou si le fichier versions.txt téléchargé est invalide, ce fichier résultant est supprimé du texte, et la fonction retourne 1. Elle ne retourne 0 donc uniquement si la liaison est bonne et si le fichier récupéré est valide.
| |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec kgf.dll. Mer 25 Fév 2015 - 21:34 | |
| @Klaus. Le code suivant provoque l'erreur Not Correct Arithmetic Expression. Error in Fonction. Merci de ton aide. Je souhaiterais afficher la fenêtre en mode modal. - Code:
-
dim hnd%, res%
dll_on "kgf.dll"
form 1 hnd%=handle(1) res%=dll_call2("SetMinimizeMaximize",hnd%,0) res%=dll_call2("SetCloseBox",hnd%,0) ' Form modale res%=dll_call3("ManageFormProperties",object_internal(1),2,1)
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 25 Fév 2015 - 21:42 | |
| C' est rentré dans l' ordre. Pour ceux que cela intéresse, le morceau de code pour la mise à jour auto dans PPE : - Code:
-
dll_on kgf$
vkgf$=string$(255," ") res% = DLL_call1("KGFdllVersion",adr(vkgf$)) vkgf$=trim$(vkgf$)
if file_exists(BDR$)=1 BDR_handle% = dll_call1("LoadDLL",adr(BDR$)) fonction$="BDRversion" res%=dll_call2("TargetDLL",BDR_handle%,adr(fonction$)) vbdr$=string$(255," ") res% = dll_call1("CallDLL1",adr(vbdr$)) vbdr$=trim$(vbdr$) end_if
Fic$ = Temp$+"Versions.txt" res% = DLL_call1("GetActualVersions",adr(fic$))
if file_exists(fic$)=0 if message_warning_ok( "Vous êtes hors connexion !!!"+chr$(13)+"La vérification des mises à jour est impossible."+"Version de actuel de KGF.dll : "+vkgf$)=1 end_if goto suite end_if
file_open_read 1,Fic$ file_readln 1,a_vkgf$ file_readln 1,a_vbdr$ file_close 1 file_delete fic$
if a_vkgf$<>vkgf$ or a_vbdr$<>vbdr$ ' je récupère les adresses de téléchargement dans un fichier externe, ' plus facile à mettre à jour si Klaus change d' hébergeur if file_exists(Maj_inf$)=1 file_open_read 1,Maj_inf$ file_readln 1,date_maj$ file_readln 1,KGF_url$ file_readln 1,BDR_url$ file_readln 1,KGFaide_url$ file_readln 1,BDRaide_url$ file_close 1 end_if
fil1$ = Temp$+"KGF.dll" fil2$ = Temp$+"BDR.dll" fil3$ = Temp$+"KGF.chm" fil4$ = Temp$+"BDR_SUB.chm"
res% = DLL_call2("DownloadFile",adr(KGF_url$),adr(fil1$)) res% = DLL_call2("DownloadFile",adr(BDR_url$),adr(fil2$)) res% = DLL_call2("DownloadFile",adr(KGFaide_url$),adr(fil3$)) res% = DLL_call2("DownloadFile",adr(BDRaide_url$),adr(fil4$))
if file_exists(BDR$)=1 res% = dll_call1("UnLoadDLL",BDR_handle%) end_if
dll_off
if a_vkgf$<>vkgf$ Maj_kgf() end_if
if file_exists(BDR$)=1 if a_vbdr$<>vbdr$ Maj_bdr() end_if end_if
if file_exists(fil1$)=1 : file_delete fil1$ : end_if if file_exists(fil2$)=1 : file_delete fil2$ : end_if if file_exists(fil3$)=1 : file_delete fil3$ : end_if if file_exists(fil4$)=1 : file_delete fil4$ : end_if if file_exists(fic$)=1 : file_delete fic$ : end_if
dll_on kgf$ end_if Suite:
' ------------------------------------------------------------------------------------------------------------------------- SUB Maj_kgf() if file_exists(KGF$)=1:file_delete KGF$:End_if file_rename Temp$+"KGF.dll",KGF$ if file_exists(KGF_chm$)=1:file_delete KGF_chm$:end_if file_rename Temp$+"KGF.chm",KGF_chm$ END_SUB
SUB Maj_bdr() if file_exists(BDR$)=1 then file_delete BDR$ file_rename Temp$+"BDR.dll",BDR$ if file_exists(BDR_chm$)=1:file_delete BDR_chm$:end_if file_rename Temp$+"BDR_SUB.chm",BDR_chm$ END_SUB
La partie jusqu' aux pointillés est dans une procédure plus générale d' initialisation. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 25 Fév 2015 - 21:45 | |
| Désolé. C'est une erreur dans la doc. Tu le vois d'ailleurs également dans le code du programme de démo que j'ai posté: ce n'est pas ManageFormProperties, mais SetFormProperties !
Je corrigerai la doc. Mais, d'ores et déjà, change le nom de la fonction et ça passera. | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Re: KGF_dll - nouvelles versions Mer 25 Fév 2015 - 21:49 | |
| J'obtiens le message d'erreur suivant: Cannot make a visible window modal.Merci de ton aide. Par contre, le code suivant fonctionne: - Code:
-
dim hnd%, res%
dll_on "kgf.dll"
form 1 hnd%=handle(1) res%=dll_call2("SetMinimizeMaximize",hnd%,0) res%=dll_call2("SetCloseBox",hnd%,0) ' Form modale hide 1 res%=dll_call3("SetFormProperties",object_internal(1),2,1) show 1 Il serait bon de prévoir dans la commande SetFormProperties un hide, puis un show. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 25 Fév 2015 - 21:57 | |
| Tu as raison, Pédro. Je ferai cela pour la prochaine version. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 25 Fév 2015 - 22:07 | |
| C'est fait: 1. La doc est corrigée et à jour. 2. KGF.dll est modifiée pour la fonction SetFormProperties code 2: on fait systématiquement un HIDE de la form avant d'appliquer la fonction | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème de fenêtre modale. Jeu 26 Fév 2015 - 8:21 | |
| Bonjour. Merci Klaus pour cette avancée. Cependant, un problème subsiste. Les objets dont le parent est la forme modale n'apparaissent pas dans cette form, excepté dans le cas où 'SetFormProperties' est placé en fin de code. Mais cette solution ne me satisfait pas, car de nouveaux objets peuvent être ajoutés à la volée, après affichage de la form modale. Merci de voir. - Code:
-
dim hnd%, res%
dll_on "kgf.dll"
form 1 hnd%=handle(1) res%=dll_call2("SetMinimizeMaximize",hnd%,0) res%=dll_call2("SetCloseBox",hnd%,0)
' Form modale res%=dll_call3("SetFormProperties",object_internal(1),2,1)
button 2 parent 2,1 caption 2,"test" | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 26 Fév 2015 - 8:41 | |
| Certes. Il faut rappeler SetFormProperties après les rajouts, ou précisément au moment où la form devra apparaître.
Mais je te rappelle que cette technique va à l'encontre des principes de programmation sous Windows. Il est très fortement déconseillé d'interrompre un traitement quelconque poir attendre une action de l'utilisateur.
Ce qu'il faut faire: 1. créer une form normale, et faire HIDE immédiatement 2. paramétrer cette form, et placer tous les objets dessus 3. placer également un bouton "Annuler" et "Valider" sur cette form, chacun avec sa routine ON_CLICK 4. placer un ON_CLOSE sur cette form, avec son évènement 5. définit une variable indicateur du genre form_est_validee% 6. pour appeler la fenêtre, faire INACTIVE 0, puis SHOW de cette form, et faire form_est_validee%=0 7. dans l'évènement ON_CLICK du bouton Annuler, simplement faire HIDE de cette form 8. dans m'évènement "Valider" de cette form, faire HIDE de la form, et form_est_validee%=1 9. dans l'évènement ON_CLOSE de cette form, faire le traitement de validation si form_est_validée%=1
C'est ce que je fais dans mes multiples fenêtres de Synedit_Editor. Je vais te poster un extrait opérationnel, bientôt, à titre d'exemple. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 26 Fév 2015 - 9:29 | |
| Regarde l'exemple qui suit. Le bouton "Nom..." demande la saisie d'un nom et lance le traitement du nom si le nom n'est pas vide. La fenêtre est appelée en simulation de mode normal. Toute l'astuce consiste à séparer le traitement en 2 phases: 1. traitements préalables avant la saisie 2. traitements du résultat de la saisie Et cette deuxième phase n'est pas exécutée si la saisie est abandonnée. Voici le code. Tout mon Synedit_Editor est construit selon ce principe: - Code:
-
label abandonner, valider, close100, nom
dim valide%
form 100 : hide 100 : top 100,400 : left 100,300 on_close 100,close100 alpha 101 : parent 101,100 : top 101,10 : left 101,10 : caption 101,"Nom:" edit 102 : parent 102,100 : top 102,10 : left 102,60
button 198 : parent 198,100 : top 198,100 : left 198,10 : caption 198,"Abandon" on_click 198,abandonner
button 199 : parent 199,100 : top 199,100 : left 199,150 : caption 199,"Valider" on_click 199,valider
button 10 : top 10,10: left 10,10 : caption 10,"Nom..." on_click 10,nom
end
abandonner: hide 100 active 0 to_foreground 0 return valider: if trim$(text$(102))="" message "Le nom manque." return end_if valide% = 1 hide 100 active 0 to_foreground 0 message "on traite le nom "+text$(102) ' ici, traitement du nom (phase 2) return close100: active 0 to_foreground 0 return nom: ' ici, faire éventuellement les traitements préalables (phase 1) valide% = 0 inactive 0 show 100 return return
| |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème de fenêtre modale. Jeu 26 Fév 2015 - 15:28 | |
| @Klaus.
Finalement, j'ai choisi la voie la plus simple, et qui fonctionne parfaitement.
J'utilise donc inactive 0 lors de l'affichage de la form interne, puis active 0 lors de sa disparition. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 28 Fév 2015 - 6:53 | |
| Petit souci avec le redimensionnement et Tab... Le "Panel" lié à l' onglet se détache de la barre des onglets sur un redimensionnement de l' objet conteneur. Je mets une version d' essai de PPE_Vs3 en zip sur mon webdav C' est court, il n' y a pas encore tout dedans... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 9:43 | |
| J'ai pris le ZIP, mais je ne comprends pas bien. Au lancement, seul le premier onglet s'affiche, avec le libellé "...". Et rien n'est réactif. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 15:41 | |
| Nouvelle version: KGF.dll V4.35 du 28/02/2015Nouveautés: -jeu de fonctions pour intercepter des évènements sur des forms PanoramicModules modifiés: KGF.dll KGF.chmLes sources et la doc sont à jour. Ces routines sont documentées dans la section des "fonctions de gestion des fenêtres". Elles sont au nombre de 4: res% = dll_call1("MoveSizeWindowInitHook",handle(edit%)) res% = dll_call1("MoveSizeWindowAddHook",handle(form%)) res% = dll_call1("MoveSizeWindowRemoveHook",id%) res% = dll_call0("MoveSizeWindowKillHook")Voici une démo qui montre une fenêtre avec un bouton en bas à droite. On peut redimensionner cette fenêtre, et le bouton restera à sa place, sans apparition d'ascenseurs: - Code:
-
' test_MoveSizeWindow.bas
label MoveSize, close0
dim xMS%, res%
on_close 0,close0
form 10 : command_target_is 10 : top 10,100 : left 10,100 edit 1 : hide 1 : on_change 1,MoveSize button 2 : top 2,height(10)-80 : left 2,width(10)-100
dll_on "KGF.dll"
res% = dll_call1("MoveSizeWindowInitHook",handle(1)) message "init: "+str$(res%) xMS% = dll_call1("MoveSizeWindowAddHook",handle(10)) message "add: "+str$(xMS%)
end
MoveSize: caption 0,time$+": "+text$(1) top 2,height(10)-80 : left 2,width(10)-100 return close0: xMS% = dll_call0("MoveSizeWindowKillHook") return Je pense que cela va résoudre pas mal de problèmes de redimensionnent de fenêtres. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 17:18 | |
| Excellent en attendant de voir si Jack incorpore ces événements dans Panoramic, ça permettra en effet de faire des applis plus "pro" | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 28 Fév 2015 - 17:55 | |
| Super ces nouvelles fonctions ! Je vais vite me mettre à jour.... **************************************************************************** Pour Tab, au départ ( c' est une version en construction ) j' affiche un tab avec un onglet ( 1 pb à la fois ) si tu clic sur zoom+ dans le main menu le form s' agrandi et là le panel attaché à l' onglet est complètement dissocié je ré- utilise la fonction de géométrie dans la procédure d' agrandissement du form et je prends bien garde de reformater le panel parent avant mais.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 18:05 | |
| Je vais voir ça...
EDIT
J'ai l'impression que, déjà au démarrage, sans avoir utilisé "Zoom +", la partie "blanche" n'est pas en lien correctement avec l'onglet. Dès le départ, il y a un problème de positionnement. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Adresse de mon site Sam 28 Fév 2015 - 18:41 | |
| Cela vient du fait que j' ai coupé la déclaration des objets et leur positionnement.
je ne fais que déclarer les objet dans la sub gui et en fin de sub, j' appelle la sub de placement et dimensionnement
Pour tab, j' ai mis dans le gui des dimensions fixes de départ mais comme en fin de sub il y a l' appel au re-positionnement-dimensionnement elle perd tout de suite la liaison. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 19:52 | |
| - Citation :
- j' ai mis dans le gui
on voit bien que tu descends des druides bretons. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 28 Fév 2015 - 19:56 | |
| Pour un Corse, c' est un comble... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 28 Fév 2015 - 20:02 | |
| Je suis en train de travailler sur la structure de ton programme. Le problème vient d'une confusion d'adressage, puisque tu crées un panel dans lequel tu insères le TAB, puis tu redimensionnes le tout. Or, Tab est lui-même dans un panel de façon automatique, et cela décale tout. Je laisse tomber le panel PanC% et j'envoie le TabObject directement dans Form0. Ca va déjà beaucoup mieux, mais je n'ai pas tout à fait fini. je verrai ça plus tard ce soir.
En tout cas, c'est la piste à suivre.
Une question: le panel PanB%, il sert à quoi ? Ce ne serait pas, par hasard, juste un marqueur pour marquer la place du Synedit_Editor ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 1 Mar 2015 - 1:56 | |
| Bon, ca y est, j' ai réussi à virer le squater de mon ordi ! Pan% est le panel general sur lequel tout le monde s' accroche et sur le lequel je reprends les dimensions de la surface client de ma fenêtre pour le redimensionnement. - les panG%(i%) sont les panel glissant de gauche - les panO%(i%) sont les panel glissant pour les outils - les panL%(i%) sont les panel glissant pour les librairies - le panB% est le panel du bas qui une fois habillé sera la StatutBar - le PanC% est le panel central qui sert de support au Tableur dont chaque onglet seront les supports des objets synedit. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 1 Mar 2015 - 2:36 | |
| Justement, Ygeronimi ! PanC% fait doublon, car le TabObject est un panel lui-même, dans lequel la barre d'onglets est un objet indépendant de Panoramic, mais intégré dans un objet Panel tout à fait standard comme si j'avais utilisé la commande PARENT de Panoramic, puis chaque "page" onglet est un Panel standard elle-même, intégrée dans le Panel de base de l'objet TabObject, par un équivalent de PARENT. Et les objets Synedit, par la suite, sont insérés dans ces Panels individuels, chacun avec un équivalent de commande PARENT. Et si tu places le TabObject lui-même dans un Panel, tu obtiens une profondeur hiérarchique supplémentaire ce qui te pose problème lorsqu'il faut calculer les positions de chacun. Dans ma réflexion, que je vais reprendre maintenant, je suis arrivé à ceci: - Code:
-
' >>>>panel central ' CreateObject("Panel",PanC%,Pan%,0) : width PanC%,980 : height PanC%,610 Tab% = dll_call1("CreateTabObject",handle(0)) : ' <=== Klaus au lieu de (PanC%)) Tab_res% = dll_call6("TabObjectFunction",Tab%,5,0,3,0,0) Tab_res% = dll_call6("TabObjectFunction",Tab%,1,0,1,0,0) Tab_res% = dll_call5("TabObjectGeometry",Tab%,5,5,974,610)
' >>>Onglet 1 Ongle$="-----" Tab_res% = dll_call2("AddTabObjectTab",Tab%,adr(Ongle$)) ' Tab_res% = dll_call6("TabObjectFunction",Tab%,8,1,2,0,0)
Jusque là, tout va bien. Ensuite, pour ajuster les dimensions, je fais: - Code:
-
SUB ResizeForm() Dim_local L%,H% Full_space Pan% :L%=Width(Pan%) : H%=Height(Pan%) TB_res% = dll_call4("ModifyToolbar",2,0,0,0) Height PanG%(1),H%-51 :Width PanG%(1),250 : Top PanG%(1),26 :Left PanG%(1),0 Height PanG%(2),H%-51 :Width PanG%(2),250 : Top PanG%(2),26 :Left PanG%(2),0 Height PanG%(3),H%-51 :Width PanG%(3),250 : Top PanG%(3),26 :Left PanG%(3),0 Height PanG%(4),H%-51 :Width PanG%(4),250 : Top PanG%(4),26 :Left PanG%(4),0
Tab_res% = dll_call5("TabObjectGeometry",Tab%,250+5,26+5,L%-250-10,610) : ' <=== Klaus ' Height PanB%,25 :Width PanB%,L% : Top PanB%,H%-25 :Left PanB%,0 END_SUB
Je pense que c'est dans cette direction qu'il faut aller. Par la suite, si tu veux faire un ajustement dynamique, il faut faire comme dans Synedit_Editor, car j'y ai le même problème: Dans le cas de Synedit_Editor, cela s'applique à chaque form qui contient un objet Synedit. Dans ton cas, il faut adapter ce principe à redimensionner l'objet TabObject, puis chaque objet Synedit de façon identique. Et avec les nouvelles fonctions d'interception du redimensionnement d'une form, tu peu aisément récupérer cet évènement lorsque tu tires les bords de la fenêtre principale, et ainsi ajuster tout dynamiquement. Regarde comment ça se passe dans Panoramic_Editor, ainsi que dans le petit code de démo des nouvelles fonctions de la version 4.35 de KGF.dll.
Dernière édition par Klaus le Dim 1 Mar 2015 - 2:39, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 1 Mar 2015 - 2:38 | |
| Je me serai bien basé sur : "GetFormClientMetrics" pour récupérer la surface client mais les mesures renvoyées sont, pour le moins, bizarres form : 750 x 1250 zone client : 650 x 1234 pour la largeur, 1250-1234 =16 (8+8 ) ok! pour la hauteur, 750-650=100 (30+8+?) j' ai un main menu (30+8+20=58) j' ai la toolbar (30+8+20+26=84) Même si les deux objets sont pris en compte dans la mesure, où sont passées les 16 qui manque ?
Dernière édition par ygeronimi le Dim 1 Mar 2015 - 2:41, édité 1 fois | |
| | | 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
| |
| |
| |