Arrrrggg! J'y comprends rien!

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je viens de me souvenir que le ftp par Free n'accepte pas le ftp:// devant ftpperso.free.fr, j'ai modifié ton code pour mon besoin

Je me suis connecté mais j'arrive sur une interface de free ou je dois encore retaper mon Login qui apparait pourtant sur la page ainsi que le pass

Mais là encore l'arborscence fait partie de l'interface de Free, pas glop :cry:

Je vais faire autrement pour voir si j'arrive à placer l'élément là ou je veux
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

voici le code que j'utilise pour le drag and drop.

Je n'ai pas trouvé comment récupérer les infos du webgadget pour pouvoir mettre celui survolé en surbrillance et enfin le déposer au bon emplacement en sachant que pour mettre à jour la page, c'est le système qui rafraichi lorsque le fichier/dossier aura été ajouté sur le site

j'ai modifié le code de Chris pour afficher le dossier C:\ de mon disque en mettant ceci

file://C:\

directement dans la 1ere stringadget de la fenetre qui apparaît en cliquant sur le bouton réglage puis en validant.

Si quelqu'un a une idée, on pourrait terminer le code, je vais encore chercher

J'ai ajouté quelques variables globales, ajouté quelques lignes à la procedure Open_Win_Main() et j'ai ajouté une callback gérée par le système et par par PB car on ne récupère pas les infos de notification car l'explorerTreegadget a sa propre fenêtre Parent qui inercepte ces événements (Pb gère ça) et Pb sait qu'il a déjà répondu à ces message ce qui fait que l'on ne passe pas dans la callback définie par Setwindowcallback()

c'est clair non :mrgreen:

Code : Tout sélectionner

;- Constantes Fenêtres
Enumeration
      #Win_Main
      #Win_Options
EndEnumeration

;- Constantes Gadgets
Enumeration
      #Ex_Tree
      #Web
      #Txt_Mask
      #Str_Mask
      #Btn_Mask
      #Str_FtpFolder
      #Btn_PrevFolder
      #Btn_Options
      #Txt_Serveur
      #Str_Adresse
      #Text_Source
      #Str_Source
      #Btn_Valider
      #Btn_Annuler
      #Btn_Folder
EndEnumeration

;- Variables
Global Serveur.s, Source.s

;* -----------------------------------------------
; ajouté cette ligne
Global Drag_en_Cours.l, DragImageList.l, SourceGadget.l
Global SourceItem.l, GadgetCible.l, CibleItem.l, WindowProc_Org_ExplorerTree.l
;* -----------------------------------------------


;- Procedure
;- Callback
Procedure WindowCallback(Window.l, Message.l, wParam.l, lParam.l)
      Resultat = CallWindowProc_(WindowProc_Org_ExplorerTree, Window, Message, wParam, lParam)
      
      If Message = #WM_NOTIFY
            *pnmh.NMTREEVIEW = lParam
            If *pnmh\hdr\hwndFrom = GadgetID(#Ex_Tree)
                  If *pnmh\hdr\code = #TVN_BEGINDRAG
                        SourceGadget = #Ex_Tree ; le gadget d'ou provient l'opération
                        SourceItem = *pnmh\itemNew\hItem ; l'élément du gadget concerné
                        DragImageList = SendMessage_(GadgetID(SourceGadget), #TVM_CREATEDRAGIMAGE, 0, SourceItem)
                        SendMessage_(GadgetID(SourceGadget), #TVM_SELECTITEM, #TVGN_CARET, #Null)
                        If DragImageList And ImageList_BeginDrag_(DragImageList, 0, 0, 0)
                              ImageList_DragEnter_(GadgetID(SourceGadget), 0, 0)
                              ImageList_DragShowNolock_(#True)
                              ImageList_DragLeave_(GadgetID(SourceGadget))
                              ShowCursor_(#False)
                              SetCapture_(GetParent_(GadgetID(SourceGadget)))
                              SendMessage_(GadgetID(SourceGadget), #TVM_SELECTITEM, #TVGN_CARET, SourceItem)
                              Drag_en_Cours = #True
                        EndIf
                  EndIf
                  
            EndIf
            
      ElseIf Message = #WM_MOUSEMOVE And Drag_en_Cours
             ; ici on est en train de déplacer l'élément si on a Drag_en_Cours qui vaut #True
             ; Drag_en_Cours est à #True dans la callback après interception de #WM_NOTIFY
             ; puis de #TVN_BEGINDRAG
             ; Drag_en_Cours est à #False lorsque l'on relache le bouton de la souris
             ; en interceptant le message   #WM_LBUTTONUP  And Drag_en_Cours
           If DragImageList
               UpperLeft.POINT\x = PeekW(@lParam)
               UpperLeft.POINT\y = PeekW(@lParam+2)
               ClientToScreen_(GadgetID(SourceGadget), @UpperLeft.POINT)
               ImageList_DragShowNolock_(#False)
               ImageList_DragShowNolock_(#True)
               ImageList_DragMove_(UpperLeft\x, UpperLeft\y)
        EndIf
             
     ElseIf Message = #WM_LBUTTONUP And Drag_en_Cours
          ImageList_EndDrag_() 
          ReleaseCapture_()
          ShowCursor_(#True)
          ImageList_Destroy_(DragImageList)  
          DragImageList = 0 
          Drag_en_Cours = #False

          ; on regarde si on est sur le webgadget
            GadgetCibleID = ChildWindowFromPoint_(GetParent_(Window), PeekW(@lParam), PeekW(@lParam+2))
            If GadgetCibleID = GadgetID(#web)
                  GadgetCible = #web
            Else
                  GadgetCible = -1
            EndIf
         
         
     EndIf
      ProcedureReturn Resultat
EndProcedure

Procedure Open_Win_Main()
      If OpenWindow(#Win_Main, 216, 0, 600, 290, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar, "FTP-Send My File")
            hwnd = WindowID(#Win_Main) : Result = hwnd
            If CreateGadgetList(hwnd)
                  ExplorerTreeGadget(#Ex_Tree, 5, 30, 175, 230, Source, #PB_Explorer_AlwaysShowSelection | #PB_Explorer_NoDriveRequester)
                  WebGadget(#Web, 185, 30, 410, 255, Serveur)
                  TextGadget(#Txt_Mask, 5, 270, 50, 15, "Masque")
                  StringGadget(#Str_Mask, 60, 265, 95, 20, "")
                  ButtonGadget(#Btn_Mask, 155, 265, 25, 20, "Go")
                  StringGadget(#Str_FtpFolder, 210, 5, 385, 20, "")
                  ButtonGadget(#Btn_PrevFolder, 185, 5, 25, 20, "<<")
                  ButtonGadget(#Btn_Options, 5, 5, 175, 20, "Règlages")
                  
                  ;* -----------------------------------------------
                  ; ajouté ces lignes
;                 DragAcceptFiles_(GadgetID(#Web), #True)
                  SetWindowLong_(GadgetID(#Ex_Tree), #GWL_STYLE, (GetWindowLong_(GadgetID(#Ex_Tree), #GWL_STYLE)& ( ~#TVS_DISABLEDRAGDROP)))
                  WindowProc_Org_ExplorerTree = SetWindowLong_(GetParent_(GadgetID(#Ex_Tree)), #GWL_WNDPROC, @WindowCallback())
                  ;* -----------------------------------------------
                  
            EndIf
      EndIf
      ProcedureReturn Result
EndProcedure

Procedure Open_Win_Options()
      If OpenWindow(#Win_Options, 278, 139, 355, 135, 0, "FTP-Send My File : Règlages")
            If CreateGadgetList(WindowID())
;                  TextGadget(#Txt_Serveur, 5, 10, 345, 15, "Adresse du serveur : (ftp://ftp.mon-serveur.fr/dossier-web/dossier-cible/)")
;                  TextGadget(#Txt_Serveur, 5, 10, 345, 15, "Adresse du serveur : (ftp://ftp.mon-serveur.fr/dossier-web/dossier-cible/)")
                  StringGadget(#Str_Adresse, 5, 25, 345, 20, "")
                  TextGadget(#Text_Source, 5, 60, 345, 15, "Dossier source par défaut")
                  StringGadget(#Str_Source, 5, 75, 325, 20, "")
                  ButtonGadget(#Btn_Valider, 250, 110, 100, 20, "Valider")
                  ButtonGadget(#Btn_Annuler, 150, 110, 100, 20, "Annuler")
                  ButtonGadget(#Btn_Folder, 330, 75, 20, 20, "...")
            EndIf
      EndIf
      
      SetGadgetText(#Str_Adresse, Serveur)
      SetGadgetText(#Str_Source, Source)
EndProcedure

Procedure.s BSTR_To_STR(BSTR.l)
      Protected tmp.s
      If BSTR = 0 : ProcedureReturn "" : EndIf
      lenb = SysStringLen_(BSTR) + 1
      tmp = Space(lenb)
      If WideCharToMultiByte_(#CP_ACP, 0, BSTR, lenb, @tmp, lenb, #Null, #False) = 0
            ProcedureReturn ""
      EndIf
      SysFreeString_(BSTR)
      ProcedureReturn tmp
EndProcedure

Procedure SavePref()
      CreatePreferences("SendMyFile.ini")
      PreferenceGroup("Global")
      WritePreferenceString("FTP-Path", Serveur)
      WritePreferenceString("Source", Source)
      ClosePreferences()
EndProcedure

Procedure LoadPref()
      OpenPreferences("SendMyFile.ini")
      PreferenceGroup("Global")
      Serveur = ReadPreferenceString("FTP-Path", "about:blank")
      Source = ReadPreferenceString("Source", "")
      ClosePreferences()
EndProcedure

LoadPref()

h_Main = Open_Win_Main()
Goto fin
If h_Main
      Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#Web), #GWL_USERDATA)
EndIf

If Browser = 0
      MessageRequester("Erreur", "Impossible d'initialiser le navigateur", #MB_OK | #MB_ICONERROR)
      End
Else
      
      Repeat
            While WindowEvent() : Wend : Delay(1)
            Browser\get_Busy( @IsBusy.l)
      Until IsBusy = 0
EndIf

*Adress.b = AllocateMemory(#MAX_PATH)
If Browser\get_LocationURL( @ * Adress) = #ERROR_SUCCESS
      Adresse.s = BSTR_To_STR(*Adress)
      SetGadgetText(#Str_FtpFolder, Adresse)
EndIf
fin:
Repeat
      Select WaitWindowEvent()
            Case #PB_EventGadget
                  Select EventGadgetID()
                        Case #Btn_Mask ;{ / Modifie le type de fichiers affichables dans l'explorateur
                              If GetGadgetText(#Str_Mask) <> ""
                                    Mask$ = GetGadgetText(#Str_Mask)
                                    
                                    If Left(Mask$, 2) <> "*." : Mask$ = "*." + Mask$ : EndIf
                                    SetGadgetText(#Str_Mask, Mask$)
                                    Chemin$ = GetPathPart(GetGadgetText(#Ex_Tree))
                                    SetGadgetText(#Ex_Tree, Chemin$ + Mask$)
                              EndIf
                              ;}
                        Case #Btn_PrevFolder ;{ / Redescend dans l'arbre des fichiers du site
                              If Left(Adresse, 6) = "ftp://"
                                    Chemin$ = Right(Adresse, Len(Adresse) - 6)
                                    Cnt = CountString(Chemin$, "/")
                                    If Cnt > 1
                                          Chemin$ = "ftp://" + StringField(Chemin$, Cnt - 1, "/") + "/"
                                    EndIf
                                    SetGadgetText(#Web, Chemin$)
                                    
                                    Repeat
                                          While WindowEvent() : Wend : Delay(1)
                                          Browser\get_Busy( @IsBusy.l)
                                    Until IsBusy = 0
                                    
                                    *Adress.b = AllocateMemory(#MAX_PATH)
                                    If Browser\get_LocationURL( @ * Adress) = #ERROR_SUCCESS
                                          Adresse.s = BSTR_To_STR(*Adress)
                                          SetGadgetText(#Str_FtpFolder, Adresse)
                                    EndIf
                              EndIf
                              ;}
                        Case #Btn_Options ;{ / Ouvre la fenêtre des options
                              Open_Win_Options()
                              ;}
                        Case #Btn_Folder ;{ / Change le dossier par défaut pour les fichiers à envoyer
                              Tmp$ = PathRequester("Dossier par défaut", "")
                              If Tmp$ <> "" : Source = "file://"+Tmp$ : Tmp$ = "" : EndIf
                              MessageRequester("Source",Source,16)
                              SetGadgetText(#Str_Source, Source)
                              ;}
                        Case #Btn_Valider ;{ / Valide les options, et ferme la boite
                              Serveur = GetGadgetText(#Str_Adresse)
                              If Serveur <> "about:blank"
                                   ; If Left(Serveur, 6) <> "ftp://" : Serveur = "ftp://" + Serveur : EndIf
                               ;     If Right(Serveur, 1) <> "/" : Serveur + "/" : EndIf
                              EndIf
                              Source = GetGadgetText(#Str_Source)
                              
                              SavePref() : LoadPref()
                              
                              SetGadgetText(#Web, Serveur)
                              SetGadgetText(#Ex_Tree, Source)
                              SetGadgetText(#Str_FtpFolder, Serveur)
                              
                              CloseWindow(#Win_Options)
                              UseWindow(#Win_Main)
                              ;}
                        Case #Btn_Annuler ;{ / Ferme la boite des options sans rien changer
                              CloseWindow(#Win_Options)
                              UseWindow(#Win_Main)
                              ;}
                  EndSelect
            Case #PB_EventCloseWindow
                  If EventWindowID() = #Win_Options
                        CloseWindow(#Win_Options)
                        UseWindow(#Win_Main)
                  Else
                        Quit = #True
                  EndIf
                  
      EndSelect
Until Quit
End
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Le problème reste d'envoyer le fichier au WebGadget.

Si seulement on savait comment il fonctionne :?

De toute manière, il manque quand même queque chose, puisque de l'explorer au WebGadget, l'upload du fichier se passe sans problème.

Ou alors, c'est peut-être l'explorer qui gère ça !

Depuis ce matin, j'ai le nez dans le SDK, mais j'arrive à rien :cry:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris a écrit :Le problème reste d'envoyer le fichier au WebGadget.

Si seulement on savait comment il fonctionne :?

De toute manière, il manque quand même queque chose, puisque de l'explorer au WebGadget, l'upload du fichier se passe sans problème.

Ou alors, c'est peut-être l'explorer qui gère ça !

Depuis ce matin, j'ai le nez dans le SDK, mais j'arrive à rien :cry:
On ne peut pas envoyer le fichier au Webgadget (ce n'est qu'une interface d'affichage)
Le gadget est mis à jour par le système (il y a une commande de rafraîchissement).

Pour y arriver, il faut trouver sur quel élément on est sur le webgadget , récupérer le chemin et ajouter sur le site distant (ou disque dur si on affiche des fichiers) et pour terminer mettre à jour l'affichage du webgadget avec la commande SetGadgetState(#web, #PB_Web_Refresh)

C'est comme IE, tu n'écris rien sur les pages visitées sauf dans les formulaires
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris,

tu as une saisie d'écran de l'arborescence de ton site par exemple car moi les résultats chez Free c'est pas ça

Je me demande si ça serait pas plus facile d'avoir un treegadget qui afficherait l'arborescence du site et qui permettrait plus facilement d'insérer un élément par drag 'n drop

Il faut pour ça écrire des commandes de lecture/écriture en ftp, mais je pense que dans la communauté certains l'on déjà fait.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Copie d'écran dans Internet Explorer
Image

Copie d'écran dans le WebGadget
Image
Répondre