Arrrrggg! J'y comprends rien!

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Arrrrggg! J'y comprends rien!

Message 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:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Comment faire si on a un password?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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()?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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:
Dernière modification par Anonyme2 le dim. 30/oct./2005 11:29, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :(
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Répondre