Advertisement
Guest User

Untitled

a guest
May 8th, 2013
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. EnableExplicit
  2. EnableASM
  3.  
  4. ;- Declarations
  5. Declare Free_ScrollArea_From_Images()
  6.  
  7. ;-Constantes Fenкtres
  8. Enumeration
  9.   #MainWindow
  10. EndEnumeration
  11.  
  12. ;-Constantes Gadgets
  13. Enumeration 0
  14.   #Texte_ScrollAreaGadget_Icone
  15.   #HmainCombo
  16.   #ScrollAreaGadget_Icone   ; scrollarea fenкtre principale
  17.   #ScrollAreaGadget_OpenFileRequesterIcone   ; scrollarea fenкtre d'ouverture fichier ico etc
  18.   #ContainerGadget_OpenFileRequesterIcone   ; ListViewGadget d'ouverture fichier png, jpg etc
  19.   #TextGadget_ScrollAreaGadget_OpenFileRequesterIcone
  20. EndEnumeration
  21.  
  22. Enumeration 0;
  23.   ; Read-Write
  24.   #FileFormat_Unknown
  25.   #ICO
  26.   #CUR
  27.   #ANI
  28.   #ICL
  29.   #DLL
  30.   #BMP
  31.   #PNG
  32.   #JPG
  33.   #TIF
  34.   ; Read-Only
  35.   #EXE
  36.   #OCX
  37.   #CPL
  38.   #SRC
  39. EndEnumeration
  40.  
  41. #Option_Fenetre = #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
  42. #CRLF = Chr(13) + Chr(10)
  43. #CRLF_2 = #CRLF + #CRLF
  44. #Format_16 = 16
  45. #Format_32 = 32
  46. #Format_48 = 48
  47. #Format_96 = 96
  48. #Format_128 = 128
  49. #Offset_X_Icone_Apercu = 3
  50. #Offset_Y_Icone_Apercu = 3
  51. #Intervale_X_Icone_Apercu = 3
  52. #Intervale_Y_Icone_Apercu = 3
  53. #Taille_Icone_Apercu = #Format_48
  54. #largeurScrollAreaOpenfile = ((#Taille_Icone_Apercu + #Intervale_X_Icone_Apercu)*5) + (#Offset_X_Icone_Apercu*2) + 25
  55.  
  56. ; valeur retournйe en cas d'erreur
  57. #Return_Error = 0
  58.  
  59. ; couleur fond scrollarea de Getopenfilename
  60. #CoulerFondScrollarea_Getopenfilename = #White
  61.  
  62. ; constante des messages de la boоte de dialogue
  63. ; #CDN_FIRST = -601
  64. #CDN_FOLDERCHANGE = (#CDN_FIRST-2)
  65. #CDN_HELP = #CDN_FIRST-4
  66. #CDN_INITDONE = #CDN_FIRST
  67. #CDN_FILEOK = #CDN_FIRST-5
  68.  
  69. #CDN_SELCHANGE = #CDN_FIRST-1
  70. #CDN_SHAREVIOLATION = #CDN_FIRST-3
  71. #CDN_TYPECHANGE = #CDN_FIRST-6
  72. #OFN_FORCESHOWHIDDEN = $10000000
  73. #OFN_ENABLESIZING = $800000
  74.  
  75. #Maxi_File_Buffer_31_Ko = 31*1024  ; taille du buffer de texte de la boоte de dialogue
  76.  
  77. ; les deux constantes suivantes pour l'extension des fichiers lnk
  78. #Link_extensionFile = ".lnk"
  79. #Link_extensionFile_Length = 4
  80.  
  81. #HeapCompatibilityInformation = 0
  82.  
  83.  
  84. Structure AfficheMiniature
  85.   Reduction.l   ; True l'image est rйduite sinon false
  86.   X_Position.l  ; position X sur le gadget d'affichage
  87.   Y_Position.l  ; position Y sur le gadget d'affichage
  88.   Width.l       ; Largeur d'origine de l'image
  89.   Height.l      ; hauteur d'origine de l'image
  90. EndStructure
  91.  
  92. Structure AfficheImg
  93.   ; mйmorise l'id statique de l'image gadget pour l'icone
  94.   StaticImageGadgetId.l
  95.   ; mйmorise l'id statique de l'image crййe
  96.   StaticImageId.l
  97. EndStructure
  98.  
  99. CompilerIf Defined(Chaine, #PB_Structure) = #False
  100.   Structure Chaine
  101.     pt.c[260]
  102.   EndStructure
  103. CompilerEndIf
  104.  
  105. CompilerIf Defined(EnumChidlDatas, #PB_Structure) = #False
  106.   Structure EnumChidlDatas
  107.     rc.RECT
  108.     Dialog.l
  109.   EndStructure
  110. CompilerEndIf
  111.  
  112. CompilerIf Defined(AffichageMiniature, #PB_Structure) = #False
  113.   Structure AffichageMiniature
  114.     Reduction.l ; rue l'image est rйduite sinon false
  115.     X_Position.l ; position X sur le gadget d'affichage
  116.     Y_Position.l ; position Y sur le gadget d'affichage
  117.     Width.l ; Largeur d'origine de l'image
  118.     Height.l ; hauteur d'origine de l'image
  119.   EndStructure
  120. CompilerEndIf
  121.  
  122. CompilerIf Defined(OFNOTIFY, #PB_Structure) = #False
  123.   Structure OFNOTIFY
  124.     hdr.NMHDR
  125.     *lpOFN.OPENFILENAME
  126.     pszFile.l
  127.   EndStructure
  128. CompilerEndIf
  129.  
  130. CompilerIf Defined(OPENFILENAMEXP, #PB_Structure) = #False
  131.   Structure OPENFILENAMEXP Extends OPENFILENAME
  132.     pvReserved.l
  133.     dwReserved.l
  134.     FlagsEx.l
  135.   EndStructure
  136. CompilerEndIf
  137.  
  138.  
  139. Global hMainWindow    ; Handle de la fenкtre principale
  140. Global Largeur_Ecran  ; mйmorise la largeur de l'йcran
  141. Global Hauteur_Ecran  ; mйmorise la hauteur de l'йcran
  142. Global Ecran.RECT     ; pour retrouver la taille de l'йcran
  143. Global Old_Dialogue_Proc   ; mйmorise la procйdure d'origine de la fenetre parent du dialog
  144. Global hListIcon_Apercu.l   ; mйmorise le handle de la listicon des aperзus
  145. Global Font_Textegadget_Nb_Format_Icones
  146. Global BrushBkgWindow   ; mйmorise la solidbrush couleur fond fenкtre
  147. Global Old_ScrollGadget_Proc.l  ; mйmorise l'adresse de la callback Windows du scrollAreaGadget
  148. Global _WIN32_WINNT.w  ; version de window par l'API
  149. Global _WIN32_IE.w     ; version d'Internet explorer
  150. Global Nb_Button_ToolBarGetOpenFileName.b; mйmorise le nombre de boutons de la Toolbar Getopenfilerequester
  151. Global Quitter_Application.b   ; = #true on ferme l'application
  152. Global FileNumber.l   ; retourne le nombre de fichiers sйlectionйs aprиs la fermeture d dialogue
  153. Global HeapFragValue.l
  154. Global NewList Infos.AfficheImg() ; utilisй pour mйmoriser les images
  155.  
  156. ; Macro
  157. Macro FreeGadgetEx(StaticGadget3)
  158.   If IsGadget(StaticGadget3)
  159.     FreeGadget(StaticGadget3)
  160.   EndIf
  161. EndMacro
  162.  
  163. Macro FreeFontEX(StaticFont)
  164.   If IsFont(StaticFont)
  165.     FreeFont(StaticFont)
  166.   EndIf
  167. EndMacro
  168.  
  169. Macro SetGadgetColorEX(StaticGadget12, type, color)
  170.   If IsGadget(StaticGadget12)
  171.     SetGadgetColor(StaticGadget12, type, color)
  172.   EndIf
  173. EndMacro
  174.  
  175. Macro ShowScrollBarEx(StaticGadget88, Mode, affichage)
  176.   If IsGadget(StaticGadget88)
  177.     ShowScrollBar_(GadgetID(StaticGadget88), Mode, affichage)
  178.   EndIf
  179. EndMacro
  180.  
  181. Macro SetGadgetFontEx(StaticGadget11, StaticFontId)
  182.   If IsFont(StaticFontId) And IsGadget(StaticGadget11)
  183.     SetGadgetFont(StaticGadget11, FontID(StaticFontId))
  184.   EndIf
  185. EndMacro
  186.  
  187. Macro ResizeGadgetEx(Gadget, x, y, Largeur, Hauteur)
  188.   If IsGadget(Gadget)
  189.     ResizeGadget(Gadget, x, y, Largeur, Hauteur)
  190.   EndIf
  191. EndMacro
  192.  
  193. Macro SetGadgetTextEx(StaticGadget4, ch)
  194.   If IsGadget(StaticGadget4)
  195.     SetGadgetText(StaticGadget4, ch)
  196.   EndIf
  197. EndMacro
  198.  
  199. Macro FreeImageEx(StaticImage3)
  200.   If IsImage(StaticImage3)
  201.     FreeImage(StaticImage3)
  202.   EndIf
  203. EndMacro
  204.  
  205. Macro InvalidateRectEX(Staticgadget, lpRect, bErase)
  206.   If IsGadget(Staticgadget)
  207.     InvalidateRect_(GadgetID(Staticgadget), lpRect, bErase)
  208.     UpdateWindow_(GadgetID(Staticgadget))
  209.   EndIf
  210. EndMacro
  211.  
  212.  
  213. ; - Procedures
  214. Procedure _UPeekB(valeur.l)
  215.   ; identique а PeekB() sauf que la valeur retournйe est un long non signй (pas d'extension de signe)
  216.   MOV edx, valeur
  217.   MOVZX eax, byte[edx]
  218.   ProcedureReturn
  219. EndProcedure
  220.  
  221. Procedure.s IE_Version()
  222.   ; retourne une chaine donnant la version de IE au format dйfini ici http://support.microsoft.com/kb/164539
  223.   Protected Hkey.l, Version$ = ""
  224.   Protected lpType.l, lpcbData.l, resultat.l
  225.  
  226.   If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Internet Explorer\", 0, #KEY_QUERY_VALUE, @Hkey)<>#ERROR_SUCCESS
  227.     ProcedureReturn ""
  228.   EndIf
  229.  
  230.   ;1er appel pour dйterminer la taille du buffer
  231.   resultat = RegQueryValueEx_(Hkey, "Version", 0, @lpType, @Version$, @lpcbData)
  232.   If resultat<>#ERROR_MORE_DATA
  233.     RegCloseKey_(Hkey)
  234.     ProcedureReturn ""
  235.   EndIf
  236.  
  237.   Version$ = Space(lpcbData + 2) ; alloue 2 caractиres 0 de fin de chaine
  238.   ; lpcbData contient la taille du buffer а allouer pour la fonction
  239.   ; 2иme appel de la fonction
  240.  
  241.   resultat = RegQueryValueEx_(Hkey, "Version", 0, @lpType, @Version$, @lpcbData)
  242.   RegCloseKey_(Hkey)
  243.   If resultat<>#ERROR_SUCCESS
  244.     ProcedureReturn ""
  245.   EndIf
  246.  
  247.   ProcedureReturn Version$
  248. EndProcedure
  249.  
  250.  
  251. Procedure Init_Main()
  252.   Protected lib.l, *HeapSetInformation
  253.  
  254.   SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Ecran.RECT, 0)
  255.   Largeur_Ecran = Ecran\right-Ecran\Left
  256.   Hauteur_Ecran = Ecran\bottom-Ecran\top-20
  257.  
  258.   ; WinVersion
  259.   If OSVersion()<#PB_OS_Windows_2000
  260.     MessageRequester("Error/Erreur", "Windows version is to old (Windows 2000 minimum)" + Chr(13) + Chr(13) + "La version de Windows est trop ancienne (Windows 2000 minimum)", #MB_ICONERROR)
  261.     End
  262.   EndIf
  263.  
  264.   Select OSVersion()
  265.      
  266.     Case #PB_OS_Windows_Vista, #PB_OS_Windows_Server_2008, #PB_OS_Windows_Future
  267.       _WIN32_WINNT = $0600
  268.      
  269.     Case #PB_OS_Windows_Server_2003
  270.       _WIN32_WINNT = $0502
  271.      
  272.     Case #PB_OS_Windows_XP
  273.       _WIN32_WINNT = $0501
  274.      
  275.     Case #PB_OS_Windows_2000
  276.       _WIN32_WINNT = $0500
  277.      
  278.   EndSelect
  279.  
  280.   If _WIN32_WINNT< = $0400
  281.     MessageRequester("Error/Erreur", "Windows version is to old" + Chr(13) + Chr(13) + "La version de Windows est trop ancienne", 16)
  282.     End
  283.   EndIf
  284.  
  285.   _WIN32_IE = Val(StringField(IE_Version(), 1, "."))
  286.  
  287.   BrushBkgWindow = CreateSolidBrush_(GetSysColor_(#COLOR_BTNFACE))
  288.  
  289.   ; tente d'utiliser la dйfragmentation de la mйmoire (Low-fragmentation Heap)
  290.  
  291.   lib = OpenLibrary(#PB_Any, "Kernel32.dll")
  292.  
  293.   If lib
  294.     *HeapSetInformation = GetFunction(lib, "HeapSetInformation")
  295.     HeapFragValue = 2
  296.    
  297.     If CallFunctionFast(*HeapSetInformation, GetProcessHeap_(), #HeapCompatibilityInformation, @HeapFragValue, SizeOf(HeapFragValue))
  298.       Debug("Success!\n")
  299.      
  300.     Else
  301.       Debug "Failure " + Str(GetLastError_())
  302.     EndIf
  303.     CloseLibrary(lib)
  304.   EndIf
  305. EndProcedure
  306.  
  307. Procedure UnInit_Main()
  308.   ; destruction de la brush
  309.   If BrushBkgWindow
  310.     DeleteObject_(BrushBkgWindow)
  311.   EndIf
  312. EndProcedure
  313.  
  314. Procedure ScrollAreaGadget_CallBack(Window, Message, wParam, lParam)
  315.   Protected Resultat.l = CallWindowProc_(Old_ScrollGadget_Proc, Window, Message, wParam, lParam)
  316.  
  317.   Select Message
  318.     Case #WM_PARENTNOTIFY
  319.       Select wParam & $FFFF
  320.         Case #WM_LBUTTONDOWN, #WM_RBUTTONDOWN, #WM_MBUTTONDOWN
  321.           SetFocus_(Window)
  322.           Resultat = 0
  323.       EndSelect
  324.      
  325.     Case #WM_LBUTTONDOWN, #WM_RBUTTONDOWN, #WM_MBUTTONDOWN
  326.       SetFocus_(Window)
  327.       Resultat = 0
  328.   EndSelect
  329.   ProcedureReturn Resultat
  330. EndProcedure
  331.  
  332. Procedure DialogueCallBack(Window, Message, wParam, lParam)
  333.   Protected ReturnValue = CallWindowProc_(Old_Dialogue_Proc, Window, Message, wParam, lParam)
  334.  
  335.   Select Message
  336.     Case #WM_DESTROY
  337.       FreegadgetEX(#ScrollAreaGadget_OpenFileRequesterIcone)
  338.       FreegadgetEX(#ContainerGadget_OpenFileRequesterIcone)
  339.       FreegadgetEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone)
  340.       FreeFontEX(Font_Textegadget_Nb_Format_Icones)
  341.       Font_Textegadget_Nb_Format_Icones = 0
  342.       Free_ScrollArea_From_Images()
  343.       ReturnValue = 0
  344.      
  345.     Case #WM_CTLCOLORSTATIC
  346.       If IsGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone) And lParam = GadgetID(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone)
  347.         ; on colorise le texte en blue
  348.         If BrushBkgWindow
  349.           SetBkMode_(wParam, #TRANSPARENT)
  350.           SetTextColor_(wParam, #Blue)
  351.           ReturnValue = BrushBkgWindow
  352.         EndIf
  353.       EndIf
  354.      
  355.   EndSelect
  356.  
  357.   ProcedureReturn ReturnValue
  358. EndProcedure
  359.  
  360. Procedure.l enumChildren(hwnd.l, *Var.EnumChidlDatas)
  361.   Protected parentText.Chaine
  362.   Protected childText.Chaine
  363.   Protected classText.Chaine
  364.   Protected rc1.RECT
  365.  
  366.   If hwnd = 0
  367.     ProcedureReturn #Return_Error
  368.   EndIf
  369.  
  370.   If GetDlgCtrlID_(hwnd) = 0
  371.     ProcedureReturn #Return_Error
  372.   EndIf
  373.  
  374.   If GetClassName_(hwnd, @classText, 256) = 0
  375.     ProcedureReturn #Return_Error
  376.   EndIf
  377.  
  378.   SendMessage_(hwnd, #WM_GETTEXT, 256, @childText)
  379.  
  380.   If PeekS(classText) = "SysListView32"
  381.     hListIcon_Apercu = hwnd
  382.   EndIf
  383.  
  384.   If PeekS(classText) = "ToolbarWindow32"
  385.     If GetWindowRect_(hwnd, @rc1) = 0
  386.       ProcedureReturn #Return_Error
  387.     EndIf
  388.    
  389.     If ScreenToClient_(GetParent_(hwnd), @rc1) = 0
  390.       ProcedureReturn #Return_Error
  391.     EndIf
  392.    
  393.     If ScreenToClient_(GetParent_(hwnd), @rc1 + 8) = 0
  394.       ProcedureReturn #Return_Error
  395.     EndIf
  396.     ; on compare avec les tailles de contenue par *rc.rect, si supйrieur *rc.rect prend les valeurs
  397.     ; on ne compare que la position en x car la Toolbar voulue est la plus proche du bord gauche
  398.     If rc1\left<*Var\rc\left
  399.       CopyMemory(@rc1, *Var\rc, SizeOf(RECT))
  400.       *Var\Dialog = hwnd ; handle de la toolbar
  401.     EndIf
  402.    
  403.   EndIf
  404.   ProcedureReturn #True
  405. EndProcedure
  406.  
  407. Procedure LoadImageEx(chaine$, *rc.AffichageMiniature)
  408.   ; mйmorise l'identifiant statique de l'image crйe
  409.   Protected Img
  410.   ; Mйmorise la largeur du ScrollAreaGadget
  411.   Protected WidthGadgetMax.l
  412.   ; Mйmorise la hauteur du ScrollAreaGadget
  413.   Protected HeightGadgetMax.l
  414.   ; mйmorise le ratio image origine
  415.   Protected ratio_origine.f
  416.   ; mйmorise le ratio du gadget d(affichage
  417.   Protected ratio_gadget.f
  418.   ; mйmorise le ratio de l'image affichйe
  419.   Protected ratio_dest.f
  420.   ; mйmorise un ratio temporaire
  421.   Protected ratio_Temp.f
  422.   ; mйmorise la largeur de l'image redimensionnйe
  423.   Protected NewWidth
  424.   ; mйmorise la largeur de l'image redimensionnйe
  425.   Protected Newheight
  426.  
  427.   UseJPEGImageDecoder()
  428.   UseJPEG2000ImageDecoder()
  429.   UsePNGImageDecoder()
  430.   UseTIFFImageDecoder()
  431.  
  432.   Img = LoadImage(#PB_Any, chaine$)
  433.   If Img
  434.     WidthGadgetMax = #largeurScrollAreaOpenfile-25-(#Offset_X_Icone_Apercu*2)
  435.     HeightGadgetMax = GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone)-(#Offset_Y_Icone_Apercu*2)-25
  436.    
  437.     ; rйcupйration des tailles de l'image d'origine
  438.     *Rc\Width = ImageWidth(Img)
  439.     *Rc\Height = ImageHeight(Img)
  440.    
  441.     ; calcul du ratio image d'origine largeur/hauteur
  442.     ratio_origine = *Rc\Width/*Rc\Height
  443.    
  444.     ; calcul du ratio gadget d'affichage largeur/hauteur
  445.     ratio_gadget = WidthGadgetMax/HeightGadgetMax
  446.    
  447.     ; on redimensionne si un des cфtйs au moins est > au cфtй correspondant du gadget
  448.     If (HeightGadgetMax> = *Rc\Height) And (WidthGadgetMax> = *Rc\Width)
  449.       ; on ne redimensionne pas
  450.       NewWidth = *Rc\Width
  451.       Newheight = *Rc\Height
  452.       *Rc\Reduction = #False
  453.     Else ; (HeightGadgetMax < *Rc\Height) And (WidthGadgetMax < *Rc\Width)
  454.      
  455.       ratio_Temp = WidthGadgetMax/*Rc\Width
  456.       ratio_dest = HeightGadgetMax/*Rc\Height
  457.      
  458.       ; on utilise le ratio le plus petit pour rйduire l'image d'origine
  459.       If ratio_Temp<ratio_dest
  460.         ratio_dest = ratio_Temp
  461.       EndIf
  462.      
  463.       *Rc\Reduction = #True
  464.       ; on redimensionne
  465.       NewWidth = Round((*Rc\Width*ratio_dest), 0)
  466.       Newheight = Round((*Rc\Height*ratio_dest), 0)
  467.       ResizeImage(img, NewWidth, Newheight)
  468.     EndIf
  469.    
  470.     ; fixe la valeur des йlйments *Rc\X_Position et *Rc\Y_Position
  471.     *Rc\X_Position = (#largeurScrollAreaOpenfile-NewWidth)/2
  472.     If (#largeurScrollAreaOpenfile-NewWidth) & 1 ; impaire
  473.       *Rc\X_Position-1
  474.     EndIf
  475.    
  476.     *Rc\Y_Position = (HeightGadgetMax + 25 + (#Offset_Y_Icone_Apercu*2)-Newheight)/2
  477.     If (HeightGadgetMax + 25 + (#Offset_Y_Icone_Apercu*2)-Newheight) & 1 ; impaire
  478.       *Rc\Y_Position-1
  479.     EndIf
  480.    
  481.     ProcedureReturn img
  482.   Else
  483.     ProcedureReturn #Return_Error
  484.   EndIf
  485.  
  486. EndProcedure
  487.  
  488. Procedure Free_ScrollArea_From_Images()
  489.   ; la procedure retire tous les gadgets du scrollarea du Dialogue GetOpenFileName_()
  490.   If ListSize(Infos())
  491.     ; on efface les йlйments correspondants
  492.     ForEach Infos()
  493.       FreeImageEx(Infos()\StaticImageId) ; image
  494.       If IsGadget(Infos()\StaticImageGadgetId)
  495.         SetGadgetState(Infos()\StaticImageGadgetId, 0)
  496.         FreeGadget(Infos()\StaticImageGadgetId) ; gadget utilisй pour afficher l'image
  497.       EndIf
  498.     Next
  499.     ClearList(Infos())
  500.   EndIf
  501.   InvalidateRectEX(#ScrollAreaGadget_OpenFileRequesterIcone, #Null, #True)
  502. EndProcedure
  503.  
  504. Procedure Affiche_Image(chaine$)
  505.   ; mйmorise le texte d'йnumйration de l'icфne
  506.   Protected Texte$
  507.   ; mйmorise le type de fichier
  508.   Protected FileType.l
  509.   ; mйmorise l'identifiant des images bmp etc
  510.   Protected Img.l
  511.   ; mйmorise la position de l'image rйduite qui sera affichйe (format BMP, PNG etc)
  512.   Protected Rc.AffichageMiniature
  513.  
  514.   Free_ScrollArea_From_Images()
  515.   If FileSize(chaine$)>0 And IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone) And IsGadget(#ContainerGadget_OpenFileRequesterIcone)
  516.     Free_ScrollArea_From_Images()
  517.    
  518.     Select LCase(Right(chaine$, 4))
  519.        
  520.       Case ".bmp"
  521.         FileType = #BMP
  522.         Img = LoadImageEx(chaine$, @rc)
  523.        
  524.       Case ".jpg"
  525.         FileType = #JPG
  526.         Img = LoadImageEx(chaine$, @rc)
  527.        
  528.       Case ".png"
  529.         FileType = #PNG
  530.         Img = LoadImageEx(chaine$, @rc)
  531.        
  532.       Case ".tif"
  533.         FileType = #TIF
  534.         Img = LoadImageEx(chaine$, @rc)
  535.        
  536.     EndSelect
  537.    
  538.     Select FileType
  539.         ;-#BMP, #JPG
  540.       Case #BMP, #JPG, #PNG
  541.         ; on masque le scrollaragadget
  542.         HideGadget(#ScrollAreaGadget_OpenFileRequesterIcone, 1)
  543.         ; on affiche la listviewgadget
  544.         HideGadget(#ContainerGadget_OpenFileRequesterIcone, 0)
  545.         If Img<>#Return_Error
  546.           If AddElement(Infos())
  547.             Infos()\StaticImageId = Img
  548.             Infos()\StaticImageGadgetId = ImageGadget(#PB_Any, Rc\X_Position, Rc\Y_Position, 0, 0, ImageID(Img))
  549.            
  550.             If Infos()\StaticImageGadgetId
  551.               If Rc\reduction
  552.                 Texte$ = "Image rйduite - "
  553.               Else
  554.                 Texte$ = "Image non rйduite - "
  555.               EndIf
  556.               Texte$ + Str(rc\Width) + " x " + Str(rc\height) + " pixels"
  557.               SetGadgetTextEx(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Texte$)
  558.             EndIf
  559.           EndIf
  560.         EndIf
  561.        
  562.        
  563.     EndSelect
  564.    
  565.   EndIf
  566. EndProcedure
  567.  
  568.  
  569. Procedure.l OFHookProc(hdlg, Message, wParam, *lParam.OFNOTIFY)
  570.   ; ; mйmorise l'identifiant systиme du dialogue
  571.   Protected hDialog.l
  572.   ; rйsultat de la fonction
  573.   Protected Resultat = #False
  574.   ; retrouve les coordonnйes du bureau et de la boite de dialogue
  575.   Protected wr.RECT, wr1.RECT, rcc.RECT
  576.   ; mйmorise le handle du parent de la boite de dialogue
  577.   Protected Parent_hdlg.l
  578.   ; mйmorise l'adresse du buffer mйmoire de 31 Ko
  579.   Protected *FileBuffer.long
  580.   ; mйmorise le chemin du fichier
  581.   Protected Path$
  582.   ; mйmorise la longuer du chemin
  583.   Protected Path_Lenght.l
  584.   ; mйmorise les coordonnйes de la Toolbar de gauche qui ne s'affiche pas bien avec les thиmes XP
  585.   Protected rc.RECT
  586.   ; mйmorise les coordonnйes de la zone client de la boite de dialogue
  587.   Protected clientRect.rect
  588.   ; mйmorise les coordonnйes de la boite de dialogue
  589.   Protected windowrect.rect
  590.   ; mйmorise les coordonnйes de de la boite de dialogue lors de l'йnumйration et son handle
  591.   Protected ToolBarGauche.EnumChidlDatas
  592.   ; mйmorise les coordonnйes du bouton Annuler
  593.   Protected Cancel.RECT
  594.   ; mйmorise la hauteur calculйe de la toobar pour redimensionnement eventuel
  595.   Protected HauteurToolBar.l
  596.   ; mйmorise les йcarts entre la zone client de la boite dialogue et ses coordonnйe entiиres de la fenкtre
  597.   ; est utilisй pour dйterminer s'il faut ou non redimensionner, cette variable est aussi utilisйe pour
  598.   ; calculer l'offset а appliquer aux bouton Annuler et Ok
  599.   Protected ecartWindow.l
  600.   ; mйmorise le texte de plusieurs fichiers sйlectionnйs
  601.   Protected Texte$
  602.   ; mйmorise l'identifiant de la zone propre du scrollareagadget
  603.   Protected hWnd_ScrollArea
  604.   ; mйmorise si la fenкtre Getopenfilename a dйjа йtй modifiйe
  605.   Protected GetOpenfilename_modifer
  606.  
  607.   Select Message
  608.     Case #WM_INITDIALOG
  609.       Parent_hdlg.l = GetParent_(hdlg)
  610.       If Parent_hdlg = 0
  611.         Resultat = #True
  612.       Else
  613.         Old_Dialogue_Proc = SetWindowLong_(Parent_hdlg, #GWL_WNDPROC, @DialogueCallBack())
  614.       EndIf
  615.       If GetWindowRect_(Parent_hdlg, wr.RECT) And GetWindowRect_(GetDesktopWindow_(), wr1.RECT)
  616.         If ((wr1\right/2)-((wr\right + #largeurScrollAreaOpenfile + 10)/2)>20) And (((wr1\bottom/2)-((wr\bottom)/2))>20)
  617.           MoveWindow_(Parent_hdlg, (wr1\right/2)-((wr\right + #largeurScrollAreaOpenfile + 10)/2), ((wr1\bottom/2)-((wr\bottom)/2)), wr\right + #largeurScrollAreaOpenfile + 30, wr\bottom-wr\top, #True)
  618.         EndIf
  619.       EndIf
  620.       If UseGadgetList(Parent_hdlg)
  621.         hDialog = GetDlgItem_(Parent_hdlg, #lst1)
  622.         If hDialog
  623.           If GetWindowRect_(hDialog, wr.RECT) And ScreenToClient_(hdlg, wr.RECT) And ScreenToClient_(hdlg, @wr\right)
  624.             wr1\left = -10
  625.             GetWindowRect_(GetDlgItem_(Parent_hdlg, #IDCANCEL), wr1.RECT)
  626.             ScreenToClient_(hdlg, wr1.RECT)
  627.             ScreenToClient_(hdlg, @wr1\right)
  628.             ; crйation du scrollAreaGadget perso
  629.             If ScrollAreaGadget(#ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 20, wr\top + 22, #largeurScrollAreaOpenfile, wr1\bottom-wr\top-20, #largeurScrollAreaOpenfile-25, wr1\bottom-wr\top-40, 55, #PB_ScrollArea_Flat)
  630.               hWnd_ScrollArea = FindWindowEx_(GadgetID(#ScrollAreaGadget_OpenFileRequesterIcone), 0, "PureScrollAreaChild", 0)
  631.               If hWnd_ScrollArea
  632.                 Old_ScrollGadget_Proc = SetWindowLong_(hWnd_ScrollArea, #GWL_WNDPROC, @ScrollAreaGadget_CallBack())
  633.               EndIf
  634.               SetGadgetColorEX(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_Gadget_BackColor, #CoulerFondScrollarea_Getopenfilename)
  635.               SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerWidth, #largeurScrollAreaOpenfile-25)
  636.               ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_VERT, #True)
  637.               CloseGadgetList()
  638.               TextGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 40, GadgetY(#ScrollAreaGadget_OpenFileRequesterIcone)-25, #largeurScrollAreaOpenfile-20, 20, "", #PB_Text_Center)
  639.               SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
  640.             EndIf
  641.             ; crйation de la ListGadget perso
  642.             If ContainerGadget(#ContainerGadget_OpenFileRequesterIcone, wr\right + 20, wr\top + 22, #largeurScrollAreaOpenfile, wr1\bottom-wr\top-20, #PB_Container_Flat)
  643.               SetGadgetColor(#ContainerGadget_OpenFileRequesterIcone, #PB_Gadget_BackColor, #White)
  644.               HideGadget(#ContainerGadget_OpenFileRequesterIcone, 1)
  645.               If IsGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone) = 0
  646.                 TextGadget(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, wr\right + 40, GadgetY(#ContainerGadget_OpenFileRequesterIcone)-25, #largeurScrollAreaOpenfile-20, 20, "", #PB_Text_Center)
  647.                 SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
  648.               EndIf
  649.             EndIf
  650.           EndIf
  651.         EndIf
  652.       EndIf
  653.       Resultat = #True
  654.      
  655.     Case #WM_NOTIFY
  656.       *FileBuffer = *lParam\lpOFN\lCustData
  657.       If (_WIN32_WINNT> = $0501) And (GetOpenfilename_modifer = #False)
  658.         ; on retrouve les coordonnйes de la toolbar et de son handle
  659.         ; on force ToolBarGauche\rc\left а une grande valeur pour que le teste dans EnumChildWindows_ soit Ok
  660.         ToolBarGauche\rc\left = 65534
  661.         EnumChildWindows_(*lParam\hdr\hwndFrom, @enumChildren(), @ToolBarGauche)
  662.         If Nb_Button_ToolBarGetOpenFileName< = 0
  663.           Nb_Button_ToolBarGetOpenFileName = SendMessage_(ToolBarGauche\dialog, #TB_BUTTONCOUNT, 0, 0)
  664.           If Nb_Button_ToolBarGetOpenFileName
  665.             ; on rйinitialise la fenкtre et le contrфle si besoin
  666.             ; on retrouve la taille des boutons
  667.             ; retrouve les coordonnйes du dernier bouton
  668.             If SendMessage_(ToolBarGauche\dialog, #TB_GETITEMRECT, Nb_Button_ToolBarGetOpenFileName-1, @rc)
  669.               ; calcul de la hauteur ToolBar
  670.               If GetWindowRect_(*lParam\hdr\hwndFrom, windowrect.RECT) And GetClientRect_(*lParam\hdr\hwndFrom, @clientRect)
  671.                 HauteurToolBar = rc\bottom + (Nb_Button_ToolBarGetOpenFileName*((SendMessage_(ToolBarGauche\dialog, #TB_GETPADDING, 0, 0)>>16) & $FFFF))
  672.                 ; calcul de la diffйrence entre la zone client de la fenкtre et la fenкtre
  673.                 ecartWindow.l = (windowrect\bottom-windowrect\top)-(clientRect\bottom-clientRect\top)
  674.                 ; on vйrifie avant de modifier si le point bas de la toolbar \bottom est infйrieur au point bas du boutton annuler
  675.                 ; si c'est le cas on modifie, sinon on laisse
  676.                 If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), Cancel.RECT); And (_WIN32_WINNT >= $0600)
  677.                   If ScreenToClient_(*lParam\hdr\hwndFrom, @Cancel\right)
  678.                     ; on teste si la hauteur de la toolbar des boutons а gauche dйpasse le point bas du bouton "Quitter"
  679.                     If HauteurToolBar>Cancel\bottom
  680.                       ; cette valeur sera ajoutйe а la valeur de la hauteur de la toolbar pour dimensionner la boite de dialogue correctement
  681.                       ; on augmente la taille de la fenкtre du dialogue
  682.                       MoveWindow_(*lParam\hdr\hwndFrom, windowrect\left, windowrect\top, windowrect\right-windowrect\left, HauteurToolBar + ToolBarGauche\rc\top + ecartWindow, #True)
  683.                       ; on rectifie la taille de la toolbar des boutons а gauche pour qu'elle ne soit pas trop grande par rapport aux nombre de boutons
  684.                       HauteurToolBar-((Nb_Button_ToolBarGetOpenFileName)*((SendMessage_(ToolBarGauche\dialog, #TB_GETPADDING, 0, 0)>>16) & $FFFF)) + 2
  685.                      
  686.                       MoveWindow_(ToolBarGauche\dialog, ToolBarGauche\rc\left, ToolBarGauche\rc\top, ToolBarGauche\rc\right-ToolBarGauche\rc\left, HauteurToolBar, #True)
  687.                       ; on dйcale les 2 boutons OK et Cancel et les 2 texte gadget qui vont avec
  688.                       ; on descend le bouton cancel, on retrouve les coordonnйes de la fenкtre dйplacйe
  689.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), wr1.RECT) And GetWindowRect_(*lParam\hdr\hwndFrom, windowrect.RECT)
  690.                         ecartWindow = (windowrect\bottom-wr1\bottom)/2
  691.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  692.                           ; calcul de l'йcart entre la partie basse du bouton et celle de la fenкtre, le tout divisй par 2
  693.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDCANCEL), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  694.                         EndIf
  695.                       EndIf
  696.                       ; on repositionne le scrollarea juste aprиs le dйplacement du bouton cancel car on a ses coordonnйes avec wr1
  697.                       ResizeGadgetEx(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone) + (ecartWindow))
  698.                       ResizeGadgetEx(#ContainerGadget_OpenFileRequesterIcone, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetHeight(#ContainerGadget_OpenFileRequesterIcone) + (ecartWindow-2))
  699.                      
  700.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb1), wr1.RECT)
  701.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  702.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb1), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  703.                         EndIf
  704.                       EndIf
  705.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc2), wr1.RECT)
  706.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  707.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc2), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  708.                         EndIf
  709.                       EndIf
  710.                      
  711.                       ecartWindow*2/3
  712.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDOK), wr1.RECT)
  713.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  714.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #IDOK), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  715.                         EndIf
  716.                       EndIf
  717.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb13), wr1.RECT)
  718.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  719.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #cmb13), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  720.                         EndIf
  721.                       EndIf
  722.                       ; texte "Nom du fichier"
  723.                       If GetWindowRect_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc3), wr1.RECT)
  724.                         If ScreenToClient_(*lParam\hdr\hwndFrom, @wr1) And ScreenToClient_(*lParam\hdr\hwndFrom, @wr1 + 8)
  725.                           MoveWindow_(GetDlgItem_(*lParam\hdr\hwndFrom, #stc3), wr1\left, wr1\top + ecartWindow, wr1\right-wr1\left, wr1\bottom-wr1\top, #True)
  726.                         EndIf
  727.                       EndIf
  728.                     Else
  729.                       ; on ne modifie pas car pas besoin et la boite a йtй centrй en WM_InitDialog
  730.                     EndIf
  731.                   EndIf
  732.                 EndIf
  733.               EndIf
  734.             EndIf
  735.           EndIf
  736.         EndIf
  737.       EndIf
  738.      
  739.       Select *lParam\hdr\code
  740.         Case #CDN_INITDONE
  741.           GetOpenfilename_modifer = #True
  742.          
  743.          
  744.           ;- #CDN_FOLDERCHANGE, #CDN_TYPECHANGE
  745.         Case #CDN_FOLDERCHANGE, #CDN_TYPECHANGE
  746.           ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_HORZ, #False)
  747.           SetgadgetfontEX(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, Font_Textegadget_Nb_Format_Icones)
  748.           SendMessage_(*lParam\hdr\hwndFrom, #CDM_SETCONTROLTEXT, #edt1, @"")
  749.           If IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone)
  750.             SetGadgetTextEx(#TextGadget_ScrollAreaGadget_OpenFileRequesterIcone, "")
  751.             Free_ScrollArea_From_Images()
  752.           EndIf
  753.          
  754.           ;- #CDN_SELCHANGE
  755.         Case #CDN_SELCHANGE
  756.           If *lParam\hdr\code = #CDN_SELCHANGE
  757.             ShowScrollBarEx(#ScrollAreaGadget_OpenFileRequesterIcone, #SB_HORZ, #False)
  758.             If IsGadget(#ScrollAreaGadget_OpenFileRequesterIcone)
  759.               Free_ScrollArea_From_Images()
  760.              
  761.               ; on vide la liste de ses йlйments
  762.               PokeL(*FileBuffer, 0) ; on remet la chaine а 0
  763.               ; avant d'afficher, on vйrifie que le fichier est bien dans la zone d'йcriture des noms de fichiers
  764.               SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETSPEC, #Maxi_File_Buffer_31_Ko, *FileBuffer)
  765.               ; on compte les " contenu dans la chaine
  766.               If _UPeekB(*FileBuffer) = '"'
  767.                ; remet les scrollbar а 0
  768.                SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerHeight, GadgetHeight(#ScrollAreaGadget_OpenFileRequesterIcone)-20)
  769.                SetGadgetAttribute(#ScrollAreaGadget_OpenFileRequesterIcone, #PB_ScrollArea_InnerWidth, #largeurScrollAreaOpenfile-25)
  770.                Texte$ = "Plusieurs йlйments sont sйlectionnйs"
  771.              ElseIf _UPeekB(*FileBuffer)
  772.                ; on teste que c'est un fichier et pas un dossier
  773.                Path_Lenght = 1
  774.                Path$ = Space(Path_Lenght)
  775.                Path_Lenght = SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETFILEPATH, Path_Lenght, @Path$)
  776.                If Path_Lenght>0
  777.                  Path$ = Space(Path_Lenght-1)
  778.                  If Len(Path$) = Path_Lenght-1
  779.                    ; Path_Lenght = SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETFOLDERPATH, Path_Lenght, @Path$)
  780.                    Path_Lenght = SendMessage_(*lParam\hdr\hwndFrom, #CDM_GETFILEPATH, Path_Lenght, @Path$)
  781.                    ; on teste si c'est un lien, fichier lnk
  782.                    ; si oui, on ne fait rien, sinon, c'est un fichier а afficher
  783.                    If LCase(Right(PeekS(*FileBuffer), #Link_extensionFile_Length))<>#Link_extensionFile
  784.                      Path$ = GetPathPart(Path$)
  785.                      If Len(Path$)
  786.                        If Right(Path$, 1)<>"\"
  787.                          Path$ + "\"
  788.                        EndIf
  789.                        If FileSize(Path$ + PeekS(*FileBuffer))> = 0
  790.                          
  791.                          ; *********************************************
  792.                          ; c'est ici que l'on affiche l'image sйlectionnйe
  793.                          
  794.                          Affiche_Image(Path$ + PeekS(*FileBuffer))
  795.                          
  796.                          ; *********************************************
  797.                          
  798.                        EndIf
  799.                      EndIf
  800.                    EndIf
  801.                  EndIf
  802.                EndIf
  803.              EndIf
  804.            EndIf
  805.          EndIf
  806.      EndSelect
  807.      Resultat = #True
  808.  EndSelect
  809.  
  810.  ProcedureReturn Resultat
  811. EndProcedure
  812.  
  813. Procedure.l Open_FileRequester(InitialDir$, Pattern.l, PatternPosition.l, buffer.l)
  814.  Protected Resultat.l
  815.  Protected lpofn.OPENFILENAMEXP
  816.  
  817.  lpofn\lStructSize = SizeOf(OPENFILENAMEXP)
  818.  lpofn\hwndOwner = hMainWindow
  819.  lpofn\hInstance = #Null
  820.  lpofn\lpstrFilter = pattern
  821.  lpofn\lpstrCustomFilter = #Null
  822.  lpofn\nMaxCustFilter = #Null
  823.  lpofn\nFilterIndex = PatternPosition
  824.  lpofn\lpstrFile = buffer
  825.  lpofn\nMaxFile = #Maxi_File_Buffer_31_Ko
  826.  lpofn\lpstrFileTitle = #Null
  827.  lpofn\nMaxFileTitle = #Null
  828.  lpofn\lpstrInitialDir = @InitialDir$ ; Windows 2000/XP et > sinon voir la dйfinition
  829.  lpofn\lpstrTitle = @"Ouvrir les fichiers"
  830.  lpofn\flags = #OFN_HIDEREADONLY | #OFN_EXPLORER | #OFN_ENABLEHOOK | #OFN_ALLOWMULTISELECT | #OFN_FILEMUSTEXIST | #OFN_FORCESHOWHIDDEN | #OFN_SHAREAWARE | #OFN_PATHMUSTEXIST
  831.  lpofn\nFileOffset = 0
  832.  lpofn\nFileExtension = 0
  833.  lpofn\lpstrDefExt = 0
  834.  lpofn\lCustData = buffer
  835.  lpofn\lpfnHook = @OFHookProc()
  836.  lpofn\lpTemplateName = 0
  837.  lpofn\pvReserved = 0
  838.  lpofn\FlagsEx = 0
  839.  
  840.  Font_Textegadget_Nb_Format_Icones = LoadFont(#PB_Any, "TAHOMA", 9, #PB_Font_Italic | #PB_Font_HighQuality)
  841.  
  842.  EnableWindow_(WindowID(#MainWindow), #False)
  843.  
  844.  Nb_Button_ToolBarGetOpenFileName = #False
  845.  If GetOpenFileName_(@lpofn)
  846.    Resultat = #True
  847.  Else
  848.    Resultat = -CommDlgExtendedError_()
  849.  EndIf
  850.  EnableWindow_(WindowID(#MainWindow), #True)
  851.  
  852.  ProcedureReturn Resultat
  853. EndProcedure
  854.  
  855. Procedure.s Open_FileRequesterEx(InitialDir$, Pattern, PatternPosition, *ReturnedFilesNumber)
  856.  Protected *FileBuffer
  857.  Protected nb_files
  858.  Protected getFile$ = ""
  859.  Protected No_Error
  860.  
  861.  *FileBuffer = AllocateMemory(#Maxi_File_Buffer_31_Ko) ; 31 Ko allouй pour la chaоne
  862.  If *FileBuffer = 0
  863.    ProcedureReturn getFile$
  864.  EndIf
  865.  
  866.  No_Error = Open_FileRequester(InitialDir$, Pattern, PatternPosition, *FileBuffer)
  867.  If Len(PeekS(*FileBuffer))
  868.    If No_Error = #True
  869.      If FileSize(GetFilePart(PeekS(*FileBuffer)))<0
  870.        ; on met une virgule а la place des 0 pour sйparer les fichiers et le chemin йgalement
  871.        ; si il y a un double 0, c'est la fin de chaine, on termine sans mettre de virgule
  872.        ; le nombre de fichiers est le nobre de virgule
  873.        ! xor ecx, ecx ; ecx mйmorise le nombre de virgules
  874.        ! mov eax, [p.p_FileBuffer] ; eax = adresse zone mйmoire
  875.        ! boucle :
  876.        ! inc eax ; eax pointe le 1er йlйment
  877.        ! cmp word [eax], 0 ; teste si c'est un double 0, si oui on quite
  878.        ! je quit
  879.        ! cmp byte [eax], 0 ; il n'y a pas de double 0, on teste le 0 simple
  880.        ! je virgule ; si = 0 on met une virgule
  881.        ! jmp boucle
  882.        ! virgule :
  883.        ! mov byte [eax], ","
  884.        ! inc ecx
  885.        ! jmp boucle
  886.        ! quit :
  887.        ! mov eax, [p.p_ReturnedFilesNumber] ; i vaut le nombre de fichier contenu dans la chaine
  888.        ! mov [eax], ecx ; i vaut le nombre de fichiers contenu dans la chaine
  889.      Else
  890.        ; un seul fichier de sйlectionnй
  891.        ! mov ecx, 1
  892.      EndIf
  893.      ! mov eax, [p.p_ReturnedFilesNumber] ; i vaut le nombre de fichier contenu dans la chaine
  894.      ! mov [eax], ecx
  895.      getFile$ = PeekS(*FileBuffer)
  896.    Else
  897.      ; GetOpenFileName_ retourne nonzero si c'est OK
  898.      ; sinon retourne 0 et il faut tester CommDlgExtendedError_()
  899.      ; ici GetOpenFileName a retournй 0
  900.      ;
  901.      ; GetOpenFileName_() retourne 0
  902.      ; si CommDlgExtendedError_() = 0 --> le bouton cancel a йtй activй, on ne fait rien
  903.      ;
  904.      ; on met le compteur de fichier а 0
  905.      ! mov eax, [p.p_ReturnedFilesNumber] ; i vaut le nombre de fichier contenu dans la chaine
  906.      ! sub ecx, ecx ; ecx vaut le nombre de fichiers contenu dans la chaine soit 0 ici
  907.      ! mov [eax], ecx
  908.      
  909.      ; on traite les erreurs
  910.      ; si CommDlgExtendedError_() = 0 --> le bouton cancel a йtй activй, on ne fait rien
  911.      If No_Error
  912.        MessageRequester("Error/Erreur", "An error system has occur, no file names returned" + Chr(13) + Chr(13) + "Une erreur systиme est arrivйee, aucun nom de fichier renvoyй")
  913.      EndIf
  914.    EndIf
  915.  EndIf
  916.  FreeMemory(*FileBuffer)
  917.  ProcedureReturn getFile$
  918. EndProcedure
  919.  
  920.  
  921.  
  922. ;- Code principal
  923. hMainWindow = OpenWindow(#MainWindow, Ecran\left, Ecran\top, Largeur_Ecran, Hauteur_Ecran, "Openfilerequester et miniatures", #Option_Fenetre)
  924. If hMainWindow = 0
  925.  MessageRequester("Erreur systиme", "La crйation de la fenкtre principale a йchouйe." + #CRLF + "L'application va se terminer.", 16)
  926.  End
  927. EndIf
  928. Init_Main()
  929.  
  930. ;ShowWindow_(hMainWindow, #SW_SHOWMAXIMIZED)
  931.  
  932. Open_FileRequesterEx("C:\" + "\JPG", ?Patern_Ico, 1, @FileNumber)
  933.  
  934.  
  935. ; ShowWindow_(hMainWindow, #SW_SHOWMAXIMIZED)
  936.  
  937. ; ;- Boucle
  938. ; Repeat
  939. ; Select WaitWindowEvent()
  940. ;
  941. ; Case #PB_Event_CloseWindow
  942. ; Quitter_Application = #True
  943. ;
  944. ; EndSelect
  945. ; Until Quitter_Application
  946.  
  947. ; restauration de la mйmoire etc
  948. UnInit_Main()
  949. DisableASM
  950. End
  951.  
  952. DataSection
  953.  Patern_Ico : ; filtre pour les fichiers au format ico, dll, exe, icl etc
  954.  Data.s "Tous formats"
  955.  Data.s "*.ani;*.cur;*.icl;*.ico;*.dll;*.exe;*.bmp;*.jpg;*.png;*.tif;*.tiff"
  956.   Data.s "icones (*.icl;*.ico;*.dll;*.exe)"
  957.   Data.s "*.icl;*.ico;*.dll;*.exe"
  958.   Data.s "Bibliothиques d'icфne (*.icl)"
  959.   Data.s "*.icl"
  960.   Data.s "Curseurs (*.ani, *.cur)"
  961.   Data.s "*.ani;*.cur"
  962.   Data.s "Images (*.bmp, *.jpg, *.png, *.tif, *.tiff)"
  963.   Data.s "*.bmp;*.jpg;*.png;*.tif;*.tiff"
  964.   ; Data.s "Curseurs animйs(*.ani)"
  965.   ; Data.s "*.ani"
  966.   ; Data.s "Curseurs simples(*.cur)"
  967.   ; Data.s "*.cur"
  968.   Data.w 0 ; double 0 de fin de chaine signalant la fin des filtres de la boоte
  969. EndDataSection
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement