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!
)
-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
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
