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 |
|
|
| MyDrive Connector | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Ven 24 Jan 2014 - 19:42 | |
| La solution: dans ta procédure GUI(), ajoute une ligne juste après la commande SUB: - Code:
-
Sub GUI() on_close 0,quitter et ça marche. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 24 Jan 2014 - 19:50 | |
| ATTENTION !
Si tu mets "On_close 0,Quitter" avec w7, ca bug la solution est peut-être valable pour XP mais pas pour W7.
edit : le pb de Papydall vient du bouton Quitter pas de la Croix... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Ven 24 Jan 2014 - 22:46 | |
| Pas d'accord. Tu te souviens du programme de démo de toolbar avec bouton de sortie, validé par tous ? le revoici: - Code:
-
' démo_toolbar_avec_bouton_de_sortie.bas
' Ce petit programme montre l'utilisation de la toolbar dans un programme Panoramic. ' La toolbar est un objet externe à Panoramic, créé par une fonction de KGF.dll ' et injecté dans une fenêtre du programme Panoramic. ' ' Chaque bouton de la toolbar est visualisé par une icône carrée, dont les ' dimensions en pixels sont précisées lors de la création de la toolbar. ' Toutes les icônes ont les mêmes dimensions. Les icônes peuvent être chargées ' à partir d'un fichier icône (*.ico), à partir de la bibliothèque interne ou ' à partir d'une bibliothèque fournie par l'utilisateur (*.ilb). Elles peuvent ' être également un séparateur (un espace vide non cliquable de la taille d'une icône) ' ou un diviseur (une barre verticale étroite non cliquable) pour les toolbar horizontales ' ' Lors de la création de la toolbar, on indique la fenêtre (form) dans laquelle ' elle devra apparaître, et un objet EDIT invisible qui recevra l'identifiant ' de chaque bouton cliqué, et dont l'évènement ON_CHANGE servira pour signaler ' un clic sur un des boutons de la toolbar. ' ' Chaque bouton est associé à un identifiant. C'est uune valeur entière 1, 2, ... ' qui servira à identifier le bouton cliqué, dans la routine ON_CHANGE du EDIT ' associé à la toolbar. C'est dans cette routine qu'il faut placer les traitements ' spécifiques pour chaque bouton. ' ' Pour pouvoir arrêter le programme Panoramic, il faut supprimer la toolbar avant ' de sortir. Sinon, on obtient en général des crashs (violation de mémoire ou autre). ' Ceci doit être fait dans une routine ON_CLOSE 0. ' ' Un cas particulier est à traiter d'une façon spéciale. Si l'on veut placer un ' bouton dans la toolbar dont l'action sera l'arrêt du programme. En effet, si ' l'on arrête simplement le programme par "termnate", on a alors un conflit: la ' routine ON_CLOSE de la form 0 sera appelée pour supprimer la toolbar, mais la ' routine évènement déclenchant det évènement est toujours en cours. Ceci provoque ' inévitablement un crash. ' ' Alors, la solution consiste à déclencher un autre évènement, avec un délai ' suffisamment long pour laisser la routine évènement du clic se terminer. ' Un timer Panoramic est parfaitement adapté à cela. On le programme pour un ' délai de 500 ms dans la routine ON_CHANGE de l'objet EDIT, puis cette routine ' se termine normalement. Lorsque le timer se déclenche, on stoppe le timer ' tout de suite, on supprime le timer, et maintenant, on peut supprimer la ' toolbar sans risque, puis décharger KGF.dll. ' ' Le programme suivant illustre ces techniques.
' les labels utilisés: label click_toolbar : ' routine évènement pour le clic des boutons label close0 : ' appelé lors de la fermeture de form 0 label sortir : ' appelé par le timer activé par le 3ème bouton
' variables diverses dim res%, icon$, after%, hint$, yy%
' ouverture de KGF.dll dll_on "KGF.dll"
' un objet EDIT caché par lequel la toolbar signale ' l'identification du bouton cliqué. Chaque clic charge ' l'identifiant du bouton dans cet objet EDIT, et son ' évènement ON_CHANGE déclenche alors la routone click_toolbar ' dans laquelle on va traiter le bouton cliqué. edit 1 : hide 1 on_change 1,click_toolbar
' assurer une fermeture propre en supprimant la toolbar on_close 0,close0
' création de la toolbar (horizontale en haut de la fenêtre) ' Les paramètres passés sont: ' handle(0) = fenêtre dans laquelle la toolbar apparaîtra ' handle(1) = objet EDIT recevant l'identification du bouton cliqué ' 0 = paramètre non utilisé pour le moment (extension future) ' 0 = position de la toolbar ' 0=bord haut 1=bord gauche 2=bord bas 3=bord droit res% = dll_call4("CreateToolbar",handle(0),handle(1),0,0)
' changement de la couleur de fond de la toolbar (jaune dans ce cas) res% = dll_call4("ModifyToolbar",1,255,255,0)
' définition de la taille des icônes en pixels (défaut: 16) res% = dll_call4("ModifyToolbar",7,16,0,0)
' changer la taille de la fenêtre et adapter la position de la toolbar width 0, width(0) + 200 height 0,screen_y-40 res% = dll_call4("ModifyToolbar",2,0,0,0)
' créer un premier bouton. Paramètres: ' 1 = identifiant du bouton (chargé dans lobjet EDIT en cliquant) ' 0-1 = valeur -1 pour dire "placer l'icône après la dernière icône présente" ' adr(hint$) = texte de la bulle d'information ' adr(icon$) = nom de l'icône ' Possibilités: ' - nom de fichier *.ico ' - "KGF_n" pour choisir l'icône numéro n de la bibliothèque iinterne ' - "USER_n" pour choisir l'icône numéro n de la bibliothèque utilisateur ' - " " (un espace) pour créer un séparateur (espace vide de la taille d'une icône ' - "" (chaîne vide) pour créer un diviseur (uniquement toolbars horizontales) hint$ = "" icon$ = "KGF_266" res% = dll_call4("AddButtonToToolbar",1,0-1,adr(hint$),adr(icon$))
' créer un deuxième bouton hint$ = "" icon$ = "KGF_66" res% = dll_call4("AddButtonToToolbar",2,0-1,adr(hint$),adr(icon$))
' créer un troisième bouton hint$ = "" icon$ = "KGF_204" res% = dll_call4("AddButtonToToolbar",3,0-1,adr(hint$),adr(icon$))
end
' routine évènement lancée lorqu'un des boutons est cliqué click_toolbar: ' récupérer l'identifiant du bouton cliqué yy%=val(text$(1)) ' effectuer le traitement approprié pour chaque identifiant select yy% case 1 message "Click sur bouton 1" case 2 message "Click sur bouton 2" case 3 ' utiliser le 3ème bouton comme bouton de sortie if object_exists(17)=0 then timer 17 : ' créer un timer si nécessaire timer_interval 17,500 : ' fixer l'interval à 500 ms on_timer 17,sortir : ' indiquer le label pour l'évènement timer end_select return ' ici, le timer activé par le 3ème bouton a été déclenché. On veut sortir. sortir: timer_off 17 : ' désactiver le timer ' demander confirmation (on peut supprimer cette ligne pour une sortie directe) if message_confirmation_yes_no("Voulez-vous vraiment sortir ?")<>1 then return ' on a accepté la sortie, donc continuer directement avec ce qui suit. ' ici, la form 0 est en train de fermer. ' On va supprimer la toolbar et décharger KGF.dll. close0: ' supprimer complètement la toolbar ' paramètres: ' 1 = suppression des boutons ET de la toolbar res% = dll_call1("RemoveToolbar",1) ' décharger la DLL, par sécurité. ' De fait, dans ce programme exemple, dll_off n'est pas nécessaire, ' mais c'est une bonne pratique de programmation de décharger ce qu'on a chargé. dll_off message "On sort..." ' la ligne suivante pourrait être "return" si on ne considère que le ' passage par l'évènement ON_CLOSE qui appelle la rourine close0. ' Mais, comme ce code peut aussi être exécuté à partir de l'évènement timer ' en activant la routine "sortir", il faut mettre "terminate" pour forcer ' l'arrêt du programme. Dans le cas d'une sortie par la croix rouge (ce qui ' déclenche l'évènement ON_CLOSE 0, la commande "terminate" agit exactement ' comme la commande "return". terminate Et c'est fait exactement comme ça. Le problème de la fermeture par la croix dans ta version, c'est qu'on ne revient pas en arrière du ModifyToolba code 8, et on ne supprime pas la toolbar, en sortant par la croix rouge. Ce qui est corrigé par la ligne que j'ai ajouté. En en cas de fermeture par la croix rouge, la dernière ligne de la routine on_close est "terminate" dans ton cas, ce qui, dans ce contexte, est équivalent à "return". | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 5:21 | |
| si je mets un " On_close 0,Quitter" j' ai droit à : "Panoramic a cessé de fonctionner..." si je ne le mets pas tout va bien... EUREKA !!!!! En fait il faut deux labels. 1 Comme ceci pour fermer par le bouton : - Code:
-
Fin: timer_off MDC_timer% Quitter: res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) dll_off terminate
2 comme ceci pour fermer par la croix : - Code:
-
Quitter_croix: res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) return Pourquoi un label fermé ?.... ...ben c' est tout bête ! La commande on_close envoi vers un label à exécuter avant la fermeture qui elle est implicite. Le terminate ferme l' application avant que la crois la ferme. donc on a une erreur puisque la croix cherche à fermer/détruire quelque chose qu'il l' est déjà. Le dll_off est lui implicite par la fermeture par la croix donc devient inutile et renvoie un bug si il est là. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 9:53 | |
| Merci, YGeronnimo. Mais, ça me laisse un peu perplexe. Dans ton code, si tu sors par le bouton, tu fais un REmoveToolbar alors que la DLL est déjà enlevée, dès que la fenêtre se ferme, car ton label Quitter sera alors activé. C'est pourquoi je propose la variable suivants, respectant toujours ta suggestion de séparer les deux traitements: - Code:
-
' fin par la touche de la toolbar Fin: timer_off MDC_timer% res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) dim toolbar_deja_supprimee% : ' signaler que la toolbar est déjà supprimée dll_off terminate
' fermeture de la fenêtre (y compris par la croix rouge) Quitter: if variable("toolbar_deja_supprimee%")=0 res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) end_if return
Essaie stp cette variante. Si tu valides, je mets mon tuto à jour... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 11:39 | |
| J’ai tout essayé : la fermeture par la croix, ça va, mais par l’icône j’ai toujours le même message d’erreur. Je suis sous XP comme Klaus. Klaus est-ce que tu confirmes que chez toi, ça marche ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 12:14 | |
| Oui, ça marche. Voici mon code (j'ai adapté certains chemins à ma configuration): - Code:
-
Variables() Labels() Start_Dll() GUI() Init() end ' ------------------------------------------------------------------------------ Sub Variables() dim Titre$ : Titre$ ="My Drive Connector" dim W_GUI% : W_GUI% =298 dim H_GUI% : H_GUI% =450 dim T_GUI% : T_GUI% =(screen_y-H_GUI%)/2 dim L_GUI% : L_GUI% =(screen_x-W_GUI%)/2 dim obj%,O_List%,O_DList% dim MDC_DB$: MDC_DB$ =dir_current$+"\MDC_DB.bdd" dim MDC_NewFiche%,NF_edit1%,NF_edit2%,NF_edit3%,NF_Button%,clic%,NF_verif% dim Select_List%,Nom$,Login$,pw$ dim MDC_timer% End_sub ' ------------------------------------------------------------------------------ Sub Labels() ' Click Label Fin,Quitter,clic ' Change Label Toolbar_actions,FC_Black End_sub ' ------------------------------------------------------------------------------ Sub Start_Dll() dim KGF$,res% KGF$="KGF.dll" dll_on KGF$ End_sub ' ------------------------------------------------------------------------------ Sub GUI() on_close 0,quitter width 0,W_GUI% : height 0,H_GUI% : top 0,T_GUI% : left 0,L_GUI% Caption 0,Titre$ : font_name 0,"arial" :font_bold 0 :font_color 0,0,0,230 MenuTB() obj%=obj%+1 : O_List%=obj% O_List(O_List%,TB_Container%,1,5,0,height(TB_Container%)-6,width(TB_Container%)-1,"") cursor_point O_List% : On_click O_List%,clic obj%=obj%+1 : O_DList% =obj% O_DList(O_DList%,"") obj%=obj%+1 : MDC_Timer%=obj% O_Timer(obj%,0,500) End_sub ' ------------------------------------------------------------------------------ Sub Init() if file_exists(MDC_DB$)=1 file_load O_DList%,MDC_DB$ Init_Liste() else if message_information_yes_no("La base compte est vide"+chr$(13)+"Voulez vous créer un compte ?...")=1 F_NewFiche() else end_sub end_if end_if End_sub ' ------------------------------------------------------------------------------ Sub Init_Liste() dim_local x%,L$,sep% clear O_List% if count(O_DList%)>0 for x%= 1 to count(O_Dlist%) L$=item_read$(O_DList%,x%) sep%=instr(L$,"|") L$=left$(L$,sep%-1) item_add O_List%,L$ next x% res% = dll_call4("ModifyToolbar",3,2,1,0) else res% = dll_call4("ModifyToolbar",3,2,0,0) end_if End_sub ' ------------------------------------------------------------------------------ Sub MenuTB() dim_local x% dim TB_Position% :TB_Position% =0 dim TB_IcoSize% :TB_IcoSize% = 16 dim TB_Lib$ :TB_Lib$ =dir_current$+"\Fichiers\MDC.ilb" dim chg_hor% :chg_hor% =16 dim chg_ver% :chg_ver% =(TB_IcoSize%-16)+76 dim icon$(12),ic$ dim after% dim hint$(12),h$ dim TB_Edit%, TB_Container%, TB_Button%
obj%=obj%+1 :TB_Edit%=obj% Edit TB_Edit% : hide TB_Edit% :On_Change TB_Edit%,Toolbar_actions
obj%=obj%+1 :TB_Container%=obj% Container TB_Container%
res% = dll_call4("CreateToolbar",handle(0),handle(TB_Edit%),0,TB_Position%) res% = dll_call4("ModifyToolbar",7,TB_IcoSize%,0,0) Adapter_Container() res% = dll_call4("ModifyToolbar",8,1,0,0) res% = dll_call4("ModifyToolbar",2,0,0,0)
if file_exists(TB_Lib$)=1 res% = dll_call4("ModifyToolbar",5,adr(TB_Lib$),0,0) icon$(1) = "USER_1" icon$(2) = "USER_2" icon$(3) = "USER_3" icon$(4) = " " icon$(5) = " " icon$(6) = " " icon$(7) = " " icon$(8) = " " icon$(9) = " " icon$(10)= " " icon$(11)= "USER_7" icon$(12)= "USER_6" else icon$(1) = "KGF_140" icon$(2) = "KGF_186" icon$(3) = "KGF_336" icon$(4) = " " icon$(5) = " " icon$(6) = " " icon$(7) = " " icon$(8) = " " icon$(9) = " " icon$(10)= " " icon$(11)= " " icon$(12)= "KGF_204" end_if hint$(1) = "Ajouter un compte" hint$(2) = "Supprimer un compte" hint$(3) = "Se connecter à un compte" hint$(4) = "" hint$(5) = "" hint$(6) = "" hint$(7) = "" hint$(8) = "" hint$(9) = "" hint$(10)= "" hint$(11)= "" hint$(12)= "Quitter"
for x%=1 to 12 h$=hint$(x%) ic$=icon$(x%) res% = dll_call4("AddButtonToToolbar",x%,x%-1,adr(h$),adr(ic$)) if ic$="USER_7" res% = dll_call4("ModifyToolbar",3,x%,0,0) end_if next x% End_sub ' ------------------------------------------------------------------------------ Sub Adapter_Container() select TB_Position% case 0 top TB_Container%,TB_IcoSize%+10 width TB_Container%,(width(0)-chg_hor%) height TB_Container%,(height(0)-chg_ver%)+10 case 1 left TB_Container%,TB_IcoSize%+12 width TB_Container%,(width(0)-chg_hor%) height TB_Container%,(height(0)-chg_ver%) case 2 width TB_Container%,(width(0)-chg_hor%) height TB_Container%,(height(0)-chg_ver%) case 3 width TB_Container%,(width(0)-chg_hor%) height TB_Container%,(height(0)-chg_ver%) end_select End_sub ' ------------------------------------------------------------------------------ Toolbar_actions: TB_Button%=val(text$(TB_Edit%)) if TB_Button%<0 Message_Error() else select TB_Button% case 1 : F_NewFiche() case 2 : Remove_Fiche() case 3 : Connection() case 12 timer_on MDC_timer% timer_interval MDC_timer%,500 on_timer MDC_timer%,fin end_select end_if return ' ------------------------------------------------------------------------------ Sub Remove_Fiche() dim_local L$ if Select_list%<>0 item_delete O_List%,Select_list% item_delete O_DList%,Select_List% file_save O_DList%,MDC_DB$ Init_Liste() else Message "Sélectionnez un nom..." end_if End_sub ' ------------------------------------------------------------------------------ Sub Connection() dim_local hnd%,s$,T$,cpt% res% = dll_call1("GetKeyboardState",20) if res%>0 then res% = dll_call5("SendSingleKey",handle(0),20,0,0,0) hide 0 Execute "http://www.mydrive.ch" hide 0 pause 3000
while left$(t$,7)<>"MyDrive" T$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(T$)) if T$<>string$(255," ") if left$(T$,7)="MyDrive" exit_while end_if end_if end_while
s$ = Login$ hnd% = dll_call0("GetActiveControl") res% = dll_call2("SendStringAsText",hnd%,adr(s$)) s$ = chr$(9) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = pw$ res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 show 0 End_sub ' ------------------------------------------------------------------------------ Clic: clic%=number_click if clic%=NF_Button% :Save_Compte():end_if if clic%=O_List% :Select_Liste():end_if return ' ------------------------------------------------------------------------------ Sub Select_Liste() dim_local sep%,L$ Nom$="":Login$="":pw$="" if item_index(O_List%)>0 Select_List%=item_index(O_List%) L$=item_read$(O_DList%,Select_List%) sep%=instr(L$,"|") Nom$ = left$(L$,sep%-1) L$=right$(L$,len(L$)-sep%) sep%=instr(L$,"|") Login$= left$(L$,sep%-1) pw$=right$(L$,len(L$)-sep%) end_if End_sub ' ------------------------------------------------------------------------------ Sub Save_Compte() dim_local L$ if text$(NF_edit1%)="":message "Champ 'Pseudo' vide"+chr$(13)+"Enregistrement impossible...":end_sub:end_if if text$(NF_edit2%)="":message "Champ 'Login' vide"+chr$(13)+"Enregistrement impossible...":end_sub:end_if if text$(NF_edit3%)="":message "Champ 'Password' vide"+chr$(13)+"Enregistrement impossible...":end_sub:end_if Verif_liste() if NF_verif%=1 if message_warning_yes_no("Une fiche :"+text$(NF_edit1%)+" existe déjà !"+chr$(13)+"Voulez créer la fiche ?...")<>1 Text NF_edit1%,"" Text NF_edit2%,"" Text NF_edit3%,"panoramic123" Hide MDC_NewFiche% end_sub end_if end_if L$=text$(NF_edit1%)+"|"+Text$(NF_edit2%)+"|"+Text$(NF_edit3%) item_add O_DList%,L$ file_save O_DList%,MDC_DB$ Init_Liste() Text NF_edit1%,"" Text NF_edit2%,"" Text NF_edit3%,"panoramic123" Hide MDC_NewFiche% End_sub ' ------------------------------------------------------------------------------ Sub Verif_liste() dim_local T$,x% NF_verif%=0 if count(O_List%)>0 for x%=1 to count(O_List%) T$=item_read$(O_List%,x%) if T$=Text$(NF_edit1%) NF_verif%=1 exit_for end_if next x% end_if End_sub ' ------------------------------------------------------------------------------ Sub Message_Error() if TB_Button%=-1 then Adapter_Container() if TB_Button%=-2 then message "Error 2" if TB_Button%=-3 then message "Error 3" if TB_Button%=-4 then message "Error 4" End_sub ' ------------------------------------------------------------------------------ Sub F_NewFiche() dim_local hnd% if MDC_NewFiche%>0 show MDC_NewFiche% text NF_edit3%,"panoramic123" Font_color NF_edit3%,120,120,120 else obj%=obj%+1 : MDC_NewFiche%=obj% O_Form(obj%,0,1,0,0,205,350,"Créer un compte") font_name obj%,"arial" : font_size obj%,8 obj%=obj%+1 O_Alpha(obj%,MDC_NewFiche%,1,10,10,0,0,"Pseudo") font_color obj%,0,0,200 obj%=obj%+1 :NF_edit1%=obj% O_Edit(obj%,MDC_NewFiche%,1,25,10,0,200) obj%=obj%+1 O_Alpha(obj%,MDC_NewFiche%,1,50,10,0,0,"Login") font_color obj%,0,0,200 obj%=obj%+1 :NF_edit2%=obj% O_Edit(obj%,MDC_NewFiche%,1,65,10,0,300) obj%=obj%+1 O_Alpha(obj%,MDC_NewFiche%,1,90,10,0,0,"Password") font_color obj%,0,0,200 obj%=obj%+1 :NF_edit3%=obj% O_Edit(obj%,MDC_NewFiche%,1,105,10,0,200) text obj%,"panoramic123" : font_color obj%,120,120,120 on_click NF_edit3%,FC_black obj%=obj%+1 :NF_Button%=obj% O_Button(obj%,MDC_NewFiche%,1,135,width(MDC_NewFiche%)-100,0,0,"Enregistrer",1) end_if hnd%=handle(MDC_NewFiche%) res% = DLL_call2("WindowTopMost",hnd%,1) End_sub ' ------------------------------------------------------------------------------ Sub O_Form(No%,P%,V%,T%,L%,H%,W%,C$) if No%> 0 then FORM No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 : Top No%,T% : Else : Top No%,(Screen_y-H%)/2 : End_If If L% > 0 : Left No%,L%: Else : Left No%,(Screen_x-W%)/2: End_If if C$<>"" then Caption No%,C$ End_Sub ' ------------------------------------------------------------------------------ Sub O_Alpha(No%,P%,V%,T%,L%,H%,W%,C$) ALPHA No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% if C$<>"" then Caption No%,C$ End_Sub ' ------------------------------------------------------------------------------ Sub O_Edit(No%,P%,V%,T%,L%,H%,W%) EDIT No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% End_Sub ' ------------------------------------------------------------------------------ Sub O_List(No%,P%,V%,T%,L%,H%,W%,F$) LIST No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% if F$<>"" if file_exists F$ then file_load No%,F$ end_if End_Sub ' ------------------------------------------------------------------------------ Sub O_Timer(No%,OO%,Inter%) TIMER No% if OO%=1 then timer_on No% if OO%=0 then timer_off No% if inter%>0 then timer_interval No%,inter% End_Sub ' ------------------------------------------------------------------------------ Sub O_Dlist(No%,F$) DLIST No% if F$<>"" then file_load No%,F$ End_Sub ' ------------------------------------------------------------------------------ Sub O_Button(No%,P%,V%,T%,L%,H%,W%,C$,Cl%) BUTTON No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% if C$<>"" then Caption No%,C$ if Cl%> 0 then on_click No%,Clic cursor_point No% End_Sub ' ------------------------------------------------------------------------------ FC_Black: Font_color NF_edit3%,0,0,0 return ' ------------------------------------------------------------------------------ Fin: timer_off MDC_timer% res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) dim toolbar_deja_supprimee% : ' signaler que la toolbar est déjà supprimée dll_off terminate Quitter: if variable("toolbar_deja_supprimee%")=0 res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) end_if return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 13:15 | |
| Dans mes codes il y a deux systèmes de fermeture différents: le 1 pour le bouton le 2 pour la croix La dll n' est pas fermée avant les appels. Dans le 2 la commande on_close fait l' appel à l' arrêt de la fonction 8 et la fermeture de la toolbar dans le label à exécuter avant la fermeture automatique qui elle ferme la dll puis la fenêtre. Dans le 1 j' ai bien un arret de la fonction 8 puis fermeture de la toolbar puis arret de la dll puis terminate. Je vais mettre sur le webdav le dossier complet mis à jour d' ici 5 minutes. Dans ton code, ta variable fait une verif qui sera toujours vrai. Si tu passes par Quitter ta variable n'existera pas. Si tu passes par Fin tu n' aura pas besoin de vérifier son existence puisque la fenêtre sera déjà fermé par terminate... A moins que tu arrives à fermer deux fois la même fenêtre... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 13:59 | |
| Mais non, Ygeronimi.
Dans mon code, si tu fermes par la croix rouge, le code est vrai, car fa fameuse variable n'a pas été définie. Donc, on supprime la toolbar, avant de faire return.
Si tu fermes par le bouton de la toolbar, la toolbar est déjà supprimée, et la fameuse variable a été définie. Donc, lorsque tu arrives dans la routine on_close, la condition est fausse et on n'essaie pas de supprimer la toolbar une seconde fois. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 14:06 | |
| @ Klaus,
si tu utilises "Fin" tu ne peux plus utiliser "Quitter" puisque la commande Terminate à fermer/détruit la fenêtre si tu utilises "Quitter" la variable n' existe pas puisqu' elle n' est pas créée...
Par contre, elle serait utile Si on pouvait supprimer la toolbar en cours de programme car là il faudrait vérifier la présence ou non de la toolbar pour ne pas la supprimer alors qu' elle n' existe déjà plus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 14:11 | |
| Erreur, Ygeronimi. La commande TERMINATE instruit Panoramic d'arrêter le programme. Panoramic ferme tout, y compris la form 0. Mais, comme la form 0 a un évènement ON_CLOSE, cette routine est appelée AVANT la suppression de la form 0 ! La form est encore bel en bien présente. Et si l'on a fermé par la croix rouge, la toolbar n'a évidemment pas encore été supprimée, et il fait le faire à ce moment-là. Regarde le code suivant: - Code:
-
label close0 on_close 0,close0 end close0: message "on sort" return
Si tu arrêtes le programme par la croix rouge, tu vois apparaître le message, mais la form 0 est toujours là, et Panoramic est toujours là ! EDIT Et si fu fais: - Code:
-
label close0,fin on_close 0,close0 button 1 : caption 1,"Fin" : on_click 1,fin end fin: message "Fin" terminate close0: message "on sort" return
En cliquant sur le bouton "Fin", tu vois d'abord le message "Fin", puis la commande TERMINATE agit, et tu vois le message "on sort' - la form 0 étant toujours là, et Panoramic aussi, APRES le TERMINATE !Je constate qu'il n'en est rien, qu'on ne passe pas par ON_CLOSE en faisant TERMINATE ! Donc, je me suis trompé sur ce point. Mais on en revint à ma première solution: le traitement de fin et on_close est identique, sauf que dans le cas particulier du bouton fin de la toolbar, il faut arrpeter le timer. Voici ce que ça donne, sur me plan du principe: - Code:
-
label close0,fin,sortie timer 2 : timer_off 2 timer_interval 2,500 on_close 0,close0 button 1 : caption 1,"Fin" : on_click 1,fin end fin: message "Fin" on_timer 2,sortie timer_on 2 return sortie: timer_off 2 close0: message "Sortie" terminate
Et c'est exactement ce que je faisais dans ma démo toolbar.
Dernière édition par Klaus le Sam 25 Jan 2014 - 14:24, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 14:22 | |
| Je suis bien d' accord mais ce sont deux chemins différents
soit tu prends l' un soit tu prends l' autre et là tu crées ta variables dans un chemin et tu la vérifie dans l' autre alors que les deux n' ont pas de retour possible. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 14:25 | |
| On s'est croisé. J'ai révisé ma position par rapport au TERMINATE. J'avais mal compris son fonctionnement. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 14:27 | |
| La fonction GetToolbarInfo code 1 permet de savoir si la toolbar existe... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 14:36 | |
| Donc, en résumé, voici le traitement de fin qui devrait marcher dans tous les cas: - Code:
-
' ------------------------------------------------------------------------------ Fin: timer_off MDC_timer% Quitter: res% = dll_call2("GetToolbarInfo",1,0) : ' tester si la toolbar existe if res%=1 res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) end_if dll_off terminate
Chez moi, sous XP, pas de problème? Bouton ou croix rouge, tout est géré. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 14:38 | |
| En fait il y a deux commandes
la commande par la croix est une commande windows appelée par clic sur la croix la commande terminate qui est une commande Panoramic
Pour la première, certaines actions seulement sont nécessaires en amont par l' appel de "on_close" Pour la deuxième, toutes les actions de libération sont à faire avant . | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 14:46 | |
| Ton code sera valable pour le bouton mais pas pour la croix.... Tu fermes la fenêtre par terminate alors que la croix appel une autre fonction , windows elle, à le faire. Tu inclus dll_off qui fait aussi un bug par la croix. - Code:
-
Fermeture_Croix: res% = dll_call2("GetToolbarInfo",1,0) : ' tester si la toolbar existe if res%=1 res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) end_if return
Fermeture_bouton: Timer_off MDC_Timer% res% = dll_call2("GetToolbarInfo",1,0) : ' tester si la toolbar existe if res%=1 res% = dll_call4("ModifyToolbar",8,0,0,0) res% = dll_call1("RemoveToolbar",1) end_if dll_off terminate Et là, cela fonctionne sur w7 aussi... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Jan 2014 - 14:50 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 15:03 | |
| OK. Je l'ai intégré chez moi, et sous XP, c'est bon aussi. Dont acte, et MERCI !
J'ai modifié mon tuto pour la toolbar en conséquence ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 17:21 | |
| VOICI LA SOLUTION QUI MARCHE A TOUS LES COUPS J’ai tout testé : les suggestions de Ygeronimi et celle de Klaus : rien ne va en voulant sortir par l’icône. Et puis j’ai voulu tester autre chose en ajoutant un simple STOP entre ModifyToolbar et RemoveToolbar - Code:
-
res% = dll_call4("ModifyToolbar",8,0,0,0) stop res% = dll_call1("RemoveToolbar",1)
ET alors, en répondant au Continue ou non par yes, ça a marché J’ai remplacé le STOP par un WAIT 5000 : ça marche. J’ai diminué la valeur du WAIT , ça ne marche plus ! J’ai retourné à WAIT 5000 , tantôt ça marche, tantôt non. J’ai remplacé finalement le WAIT par un message et ça marche à tous les coups ! - Code:
-
rem ============================================================================ Fin: timer_off MDC_timer% Quitter: res% = dll_call4("ModifyToolbar",8,0,0,0) message "OK on quitte" res% = dll_call1("RemoveToolbar",1) dll_off : terminate rem ============================================================================
Allez comprendre maintenant pourquoi ça a marché ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 17:28 | |
| @Ygeronimi, Passer à W8 n'est pas forcément un choix. Et si c'est possible, j'aime autant que mes codes fonctionne avec. Mais bon, je suis d'accord avec toi, W8 c'est du Windaube, je regrette XP. Mais tout comme Jack, je dois regarder devant.
Comme pour beaucoup, j'ai changé de PC dans la précipitation et la facilité, mais j'ai toujours en tête de changer pour MAC ou LINUX, voir avoir un deuxième PC.
J'attend un peu pour téléchargé ton programme car les essais ne sont pas encore terminé, quoique celui que j'ai actuellement fonctionne. Je rappelle que le problème de fermeture qu'a Papydall, moi je ne l'ai pas sous W8.
A+
Dernière édition par Jean Claude le Sam 25 Jan 2014 - 17:33, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 17:32 | |
| On s'est croisé Papydall,
Je constate que, une fois encore, qu'il s'agit de temps de pause ?????
Je laisse le soins à Klaus et Ygeronimi, qui sont à fond dans le sujet, de vérifier ta solution.
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 17:53 | |
| Comme on est des impatients, on oublie qu’il faut laisser le temps au temps pour faire son boulot.
Dernière édition par papydall le Sam 25 Jan 2014 - 23:00, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 18:44 | |
| Bizarre.
En XP Pro, je n'ai pas besoin de faire une pause ou un message entre ces deux lignes.
J'ai vérifié le code source de la fonction ModifyToolbar code 8: c'est essentiellement une écriture d'un mot de 32 bits dans une adresse à l'intérieur de Windows pour changer l'adresse évènement en cas de changement de dimension de la fenêtre. C'est immédiat - aucune attente n'est requise. Et le code est simplicissime.
Mystère... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MyDrive Connector Sam 25 Jan 2014 - 19:24 | |
| J'ai fait une modif dans KGF.dll, uniquement pour W7. En XP ou Vista, elle sera inactive. Est-ce que vous pouvez recharger KGF.dll (pas de nouveau numéro de version) et réessayer ce programme ? Je serais curieux de savoir si j'ai trouvé une solution... | |
| | | Contenu sponsorisé
| Sujet: Re: MyDrive Connector | |
| |
| | | | MyDrive Connector | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |