Page 1 sur 2

Arrrrggg! J'y comprends rien!

Publié : sam. 29/oct./2005 16:21
par Chris
J'avais dans l'idée de faire une petite application basée sur Internet Explorer pour transférer rapidement de petits fichiers sur mon ftp.

Pour transférer une image, par exemple, IE est largement suffisant pour ne pas avoir à lancer un prog de ftp.

Le programme se compose essentiellement d'un ExplorerTreeGadget() à gauche, d'un WebGadget() à droite, on sélectionne le fichier à envoyer, on le glisse sur le WebGadget, et basta!

Un bouton permet de redescendre d'un cran dans la hiérachie, et de se rapprocher de la racine du site.

Mais voilà, je coince sur un tas de problèmes:
  • -1 Je n'arrive pas à faire le drag and drop. (Ben ouais! :oops: )
    -2 Si je clique sur un dossier dans le site, ça m'ouvre une nouvelle fenêtre. Comment récupérer le chemin du dossier pour l'envoyer au WebGadget()
    -3 ... Je sais plus et ça me gonfle
J'imagine que tout ça passe par les interfaces, mais voilà, les interfaces, j'y comprends que dalle
Bref, si ça interesse quelqu'un, voilà le code, et si vous savez comment faire, modifiez le et postez sur le forum.

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

;- Procedures
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")
    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/)")
      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()
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 

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 = Tmp$ : Tmp$ = "" : EndIf
          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
Des volontaires...? :roll:

Publié : sam. 29/oct./2005 17:03
par Anonyme2
Chris,

je regarde demain (ce soir j'ai du monde) pour le drag and drop, j'ai déjà fait ça mais avec un explorertreegadget (ou explorerlistgadget je ne sais plus) sur une listicongadget avec plus ou moins de bohneur

Le reste on verra (à chaque jour suffit sa peine)

Publié : sam. 29/oct./2005 18:11
par nico
Comment faire si on a un password?

Publié : sam. 29/oct./2005 18:17
par Chris
Le login et le pass, c'est IE qui te les demande et qui les crypte dans ses fichiers.

Par contre, comme mon pass et mon login étaient déjà rentré dans IE, je n'ai pas pu vérifier si le WebGadget() se comportait pareil.

Publié : sam. 29/oct./2005 18:45
par nico
J'ai désactivé cette possibilité d'IE car un prog peut facilement tout récupérer, c'est pareil avec Outlook j'enregistre pas les mots de passe.

SetWindowLong_(Htreeview,#GWL_STYLE,GetWindowLong_(Htreeview,#GWL_STYLE) !#TVS_DISABLEDRAGDROP)

Il faut ajouter cette ligne mais ça suffira pas car il faut l'implémenter; il y a un exemple sur Pureaera.

Publié : sam. 29/oct./2005 18:51
par Chris
nico a écrit :J'ai désactivé cette possibilité d'IE car un prog peut facilement tout récupérer, c'est pareil avec Outlook j'enregistre pas les mots de passe.

SetWindowLong_(Htreeview,#GWL_STYLE,GetWindowLong_(Htreeview,#GWL_STYLE) !#TVS_DISABLEDRAGDROP)

Il faut ajouter cette ligne mais ça suffira pas car il faut l'implémenter; il y a un exemple sur Pureaera.
Tu as essayé le code, pour voir si IE t'affichait la boite pour rentrer ton log et ton pass?

Parce que moi, j'ai enregistré les miens, et donc, IE ne me les demande plus. Alors je ne peux pas savoir si ça marche.

C'est pour quoi faire le SetWindowLong(). Pour le Drag sur le WebGadget()?

Publié : sam. 29/oct./2005 19:04
par nico
J'ai une boite de dialogue qui me dit que je n'ai pas les droits, je n'ai pas la possibilité de rentrer ce mot de passe.

Il n'y a pas une forme d'écriture pour le mettre dans la barre d'adresse?


Par défaut le tree n'accepte pas le drag'ndrop; c'est à dire qu'il ne t'envoie pas les messages pour le traitement:TVN_BEGINDRAG etc....., le code sert à l'activation du drag'ndrop du tree.

Publié : sam. 29/oct./2005 19:12
par Chris
Il me semble que c'est ftp://login:Password@serveur ou quelque chose dans ce genre, mais je n'arrive pas à rentrer sur mon ftp avec ça.

Publié : sam. 29/oct./2005 19:48
par Chris
J'ai trouvé comment était la chaine pour le ftp.

C'est ce que j'avais dit, [ftp://Login:Password@Serveur], mais si il y a un @ dans le login, il faut le remplacer par %40.

Pour NeufTelecom, par exemple:
Le login, c'est [login@neuf.fr], donc:
[ftp://login%40neuf.fr:pass@ftpperso.neuf.fr]

Publié : sam. 29/oct./2005 20:15
par nico
Pour moi, ça marche avec le @.

Comme toi, ça m'ouvre une deuxième fenêtre!

Sinon, c'est vraiment une bonne idée.

Publié : dim. 30/oct./2005 10:19
par Anonyme2
Le drag fonctionne mais je n'ai pas terminé, je n'arrive pas à me connecter chez Free (j'ai fait pas mal d'essais)

Publié : dim. 30/oct./2005 10:23
par Chris
Denis a écrit :Le drag fonctionne mais je n'ai pas terminé, je n'arrive pas à me connecter chez Free (j'ai fait pas mal d'essais)
Tu as essayé directement avec IE ?
Parce que chez Free, il paraît qu'ils sont un peu... bizarres... leurs ftp!

Publié : dim. 30/oct./2005 11:02
par Anonyme2
J'utilise Firefox et plus IE

J'ai relu sur free ce qu'ils disent ici mais toutes mes tentatives échouent, j'accède bien au serveur mais pas logged
Si je met @ j'ai une erreur et %40 me permet de ne pas avoir cette erreur

J'ai l'erreur 530 no logged in

C'est un problème d'écriture de la chaîne très certainement

Pour le drag je boque pour faire apparaître l'image sur le Webgadget, je suis en train de faire des tests, il faut que celui-ci accepte le drag and drop mais par exemple avec DragAcceptFiles_ ça marche depuis l'explorer mais pas depuis l'explorerTreegadget :roll:

Publié : dim. 30/oct./2005 11:12
par Chris
Pour le drag, si tu le fais entre l'Explorer et le WebGadget(), ça fonctionne sans rien ajouter.

Tu connectes ton WebGadget au site ftp, et tu fais ton drag&drop, et ça marche.

Plus ça va, plus j'ai l'impression que je vais revenir à une connexion ftp normale, parce que ce type de connexion par IE ne doit pas fonctionner sur tous les serveurs :(

Publié : dim. 30/oct./2005 12:14
par Anonyme2
Pour le drag sur le webgadget c'est Ok, il faut que positionne correctement l'image et que j'arrive à avoir l'arborescence du site pour voir comment placer l'élément

Un coup de main sera bien, le webgadget est un object DirectX avec la classe AtlAxWin