Page 8 sur 12

Publié : lun. 03/oct./2005 12:12
par Good07
C'est encore moi :D
Désolé de te déranger encore une fois, J'ai bien viré la librairie Ldb comme tu me l'as suggéré, mais cette fois-ci le programme s'arrête sur LdbInit() qui ne semble pas avoir été incorporé à ta librairie. j'ai supprimé cette instruction de mon programme qui semble pour l'instant fonctionner sans elle. Mais en serat-il de même par la suite :?:

Publié : lun. 03/oct./2005 14:12
par Droopy
Plus la peine d'utiliser LdbInit
La librairie s'initialise toute seule quand tu ouvre ou créé une base de donnée 8)

Publié : sam. 08/oct./2005 14:22
par Droopy
Qu'en pensez ?

Code : Tout sélectionner

;Author : Dr Dri / lionel_om / Droopy

#GFP_Drive=1
#GFP_Path=2
#GFP_File=4
#GFP_Extension=8


Procedure.s GetPartOfFile(File.s, Part.l)
  
  Protected Temp.s
  
  ;/ Drive
  If Part & #GFP_Drive
    Temp+Left(File,2)
    If Part & #GFP_Path : Temp+"\":EndIf
  EndIf
  
   
  ;/ Path
  If Part & #GFP_Path
    Temp+Mid(GetPathPart(File),4,Len(GetPathPart(File))-4)
    If Part & #GFP_File : Temp+"\":EndIf
  EndIf
  
  
  ;/ File
  If Part & #GFP_File
    If Len(GetExtensionPart(File))
       Temp+Left(GetFilePart(File), Len(GetFilePart(File))-1-Len(GetExtensionPart(File))) 
    Else
      Temp+File
    EndIf
    If Part & #GFP_Extension : Temp+".":EndIf
  EndIf
  

  ;/ Extension
  If Part & #GFP_Extension
    Temp+GetExtensionPart(File)
  EndIf
  
  ProcedureReturn Temp

EndProcedure    

;/ Test
#file="C:\Directory\SubDirectory\File.exe"
MessageRequester("",GetPartOfFile(#file,#GFP_Drive))
MessageRequester("",GetPartOfFile(#file,#GFP_Path))
MessageRequester("",GetPartOfFile(#file,#GFP_File))
MessageRequester("",GetPartOfFile(#file,#GFP_Extension))
MessageRequester("",GetPartOfFile(#file,#GFP_Drive|#GFP_Path|#GFP_File|#GFP_Extension))

Publié : sam. 08/oct./2005 20:32
par Dr. Dri
passe par des variables temporaires... les appels de fonctions à répétition ont tendance à ralentir...

sinon c'est bien ce qui devait ressortir de notre discussion ^^

Dri

Publié : sam. 08/oct./2005 21:19
par Droopy
Dr. Dri a écrit :passe par des variables temporaires... les appels de fonctions à répétition ont tendance à ralentir...

Code : Tout sélectionner

;Author : Dr Dri / lionel_om / Droopy

#GFP_Drive=1
#GFP_Path=2
#GFP_File=4
#GFP_Extension=8


Procedure.s GetPartOfFile(File.s, Part.l)
  
  Protected Temp.s , TempPathPart.s , TempFilePart.s  , TempExtensionPart.s
  
  TempPathPart=GetPathPart(File)
  TempFilePart=GetFilePart(File)
  TempExtensionPart=GetExtensionPart(File)
  
  ;/ Drive
  If Part & #GFP_Drive
    Temp+Left(File,2)
    If Part & #GFP_Path : Temp+"":EndIf
  EndIf
  
   
  ;/ Path
  If Part & #GFP_Path
    Temp+Mid(TempPathPart,4,Len(TempPathPart)-4)
    If Part & #GFP_File : Temp+"":EndIf
  EndIf
  
  
  ;/ File
  If Part & #GFP_File
    If Len(TempExtensionPart)
       Temp+Left(TempFilePart, Len(TempFilePart)-1-Len(TempExtensionPart)) 
    Else
      Temp+File
    EndIf
    If Part & #GFP_Extension : Temp+".":EndIf
  EndIf
  

  ;/ Extension
  If Part & #GFP_Extension
    Temp+TempExtensionPart
  EndIf
  
  ProcedureReturn Temp

EndProcedure    

;/ Test
#file="C:\Directory\SubDirectory\File.exe"
MessageRequester("",GetPartOfFile(#file,#GFP_Drive))
MessageRequester("",GetPartOfFile(#file,#GFP_Path))
MessageRequester("",GetPartOfFile(#file,#GFP_File))
MessageRequester("",GetPartOfFile(#file,#GFP_Extension))
MessageRequester("",GetPartOfFile(#file,#GFP_Drive|#GFP_Path|#GFP_File|#GFP_Extension))
Merci pour les critiques constructives, ça permet de s'améliorer :wink:

Publié : lun. 10/oct./2005 12:35
par lionel_om
Oui c'est bon, moi ça me va.
Je le dl demain (j'au oublié ma clé USB aujourd8 :? ) et je le teste dans les différents cas.. :wink:

Publié : mer. 12/oct./2005 18:41
par Droopy
Version 1.27 disponible 8)

Changelog :
Wrap Fixed : NetUserAdd
Option Recurse Added for SearchFileInit
Function Added : GetPartOfFile
Function Added : LocaleDate
Function Added : NextDirectory
Function Changed : RunProgramAtStartup
Function Added : DelProgramAtStartup
Function Added : IsProgramRunAtStartup
Function Added : Week

Publié : mer. 12/oct./2005 19:50
par Flype
Merci Droopy pour la nlle version.

Je vais me permettre de faire quelques petites remarques - c pas méchant - juste pour être constructif rassures toi. :P

1/ 66K la lib : ca commence à faire gros l'exe quand on utilise ne serait-ce qu'une seule fonction. Peut etre - vu le projet grandissant - qu'il faudra penser à la splitter en pls petites libs.

2/ BlockInput() & BlockInputW98() : pas pratique pour le programmeur, ne pourrais-tu pas faire le test toi-même dans la lib et appliquer la bonne procédure en fonction de l'OS ?

3/ ChangeLog : il est à l'envers, en principe, on met la der ver en haut.

4/ LocaleDate(Mask.s,Date.l,lang.l) : il faudrait utiliser le principe des parametres facultatifs proposés par TailBite.
- LocaleDate(Date.l) ; avec un masque par défaut donc, lang à 0
- LocaleDate(Date.l,Mask.s,)
- LocaleDate(Date.l,Mask.s,lang.b)
- LocaleDate(Date.l,Mask.s,lang.b,sublang.b)

remarques :
lang.b et sublang.b sont des .b
il faudra faire une procedure LCID privée pour supporter les sublang.b dont voici le source :

Code : Tout sélectionner

Procedure.l LCID(lang.b,sublang.b) 
  
  ; Retourne une valeur LCID utilisable avec GetDateFormat() par ex. 
  
  Protected lang.b, sublang.b, lRes.l 
  
  lRes = (#SORT_DEFAULT<<16) | ( (sublang<<10) | lang ) 
  
  ProcedureReturn lRes 
  
EndProcedure
heu et pis c tout parceque le match commence à l'instant. :D

Publié : mer. 12/oct./2005 21:00
par Droopy
1°) Une Lib créée avec TailBite n’inclus dans l’exe que la fonction de la lib qui est utilisée !

2°) Sera modifié dans la prochaine version avec le code suivant :

Code : Tout sélectionner

; Inhibit keyboard & Mouse
; PureBasic 3.93
; 
; Windows 9x : 
; Caution : The keyboard And Mouse are disabled Until Next reboot
; State.l don't care / Return : Nothing
; 
; Other OS  :
; State.l = #True --> Locked / #False --> Unlocked
; Return 1 is sucess / 0 If error Or always Locked
  

ProcedureDLL BlockInput(State.l)
  
  If NTCore() ;/ NT Core
  
  If State.l=#True
    retour=BlockInput_(#True)
    
  EndIf
  
  If State.l=#False
    retour=BlockInput_(#False)
  EndIf
  
  If retour <>0 : retour =1 : EndIf
  
Else ;/ Windows 9x
  
  RunProgram("RunDll32.exe","MOUSE,DISABLE","")
  RunProgram("RunDll32.exe","KEYBOARD,DISABLE","")
  
EndIf
  
  ProcedureReturn retour
  
EndProcedure

 
;/ Test
If NTCore()
  MessageRequester("Info","10 seconds with keyboard & Mouse locked")
  BlockInput(#True)
  Delay(10000)
  BlockInput(#False)
  MessageRequester("Keyboard & Mouse","Are Unlocked")
Else
  BlockInput(1)
  MessageRequester("Keyboard & Mouse disable","You must Reset !")
EndIf
3°) Je savais pas, je vais le mettre à l’endroit dans la prochaine version.

4°) Les procédures créés avec les paramètres facultatifs dans tailbite empêchent d’exécuter la procédure directement, et ne facile ensuite ni le débogage, ni l’apperçu du code source.
Donc je n’utilise pas cette possibilité .

5°) J'ai pas tout compris :oops:

Merci pour tes critiques, constructives :wink:

Publié : mer. 12/oct./2005 21:53
par Progi1984
Concernant ton 1°, si la fonction dépend d'une autre fonction, est ce que les deux fonctions sont inclues ?

Publié : mer. 12/oct./2005 21:58
par Flype
Droopy a écrit :1°) Une Lib créée avec TailBite n’inclus dans l’exe que la fonction de la lib qui est utilisée !
coool je savais pas.
4°) Les procédures créés avec les paramètres facultatifs dans tailbite empêchent d’exécuter la procédure directement, et ne facile ensuite ni le débogage, ni l’apperçu du code source.
Donc je n’utilise pas cette possibilité .
vraiment dommage ! :cry:

5°) je vais tenter de t'expliquer : ce que dit la doc microsoft

Code : Tout sélectionner

int GetDateFormat(
  LCID Locale,               // locale
  DWORD dwFlags,             // options
  CONST SYSTEMTIME *lpDate,  // date
  LPCTSTR lpFormat,          // date format
  LPTSTR lpDateStr,          // formatted string buffer
  int cchDate                // size of buffer
);
tu vois "LCID Locale". en principe LCID n'est pas simplement notre 'lang.b'. c'est plus compliqué car il est possible de préciser un sous langage (francais belge, francais canadien, anglais us, anglais uk, etc... )

toujours dans la doc msdn:

Code : Tout sélectionner

This parameter can be a locale identifier created by the MAKELCID macro, or one of the following predefined values.
la macro MAKELCID comme il dise je t'ai donné le code qui y correspond.

donc pour une fonction un petit peu plus complete :

Code : Tout sélectionner

Procedure.l LCID(lang.b,sublang.b) 
  
  ; Retourne une valeur LCID utilisable avec GetDateFormat() par ex. 
  
  Protected lang.b, sublang.b, lRes.l 
  
  lRes = (#SORT_DEFAULT<<16) | ( (sublang<<10) | lang ) 
  
  ProcedureReturn lRes 
  
EndProcedure 

Procedure.s LocaleDate(Mask.s,date.l,lang.l,sublang.l) 
  
  ; Retourne une date formatée par l'API Win32. 
  
  Protected Mask.s, date.l, lang.l, sublang.l, sRes.s, a.SYSTEMTIME 
  
  a\wYear  = Year(date) 
  a\wMonth = Month(date) 
  a\wDay   = Day(date) 
  
  sRes = Space(255) 
  GetDateFormat_(LCID(lang,sublang),0,a,Mask,sRes,255) 
  
  ProcedureReturn sRes 
  
EndProcedure

Publié : mer. 12/oct./2005 22:22
par Droopy
Pour le point 4 je poste ici la doc de TailBite :

Code : Tout sélectionner

You can make your function accept variable arguments. To do so, you must include two or more ProcedureDLL's with the same name and an index number:

   ProcedureDLL MyFunction(arg1, arg2)
     result = Pow(arg1, arg2)
     ProcedureReturn result
   EndProcedure

   ProcedureDLL MyFunction2(arg1, arg2, arg3)
     result = Pow(arg1, arg2)/arg3
     ProcedureReturn result
   EndProcedure
   
To be considered as different versions of the same function with different argument number, the arguments names and types must coincide between them; otherwise, both functions will be considered different functions and processed that way.

After the library is made, and the compiler restarted from the PureBasic editor, if you type MyFunction( in the PureBasic editor, the status window will show:

MyFunction (arg1, arg2 [, arg3])

And you'll be able to call the function with two or three arguments. You can make as many versions as you want, with a different number of arguments, as long as you follow the mentioned rules.
Sinon merci pour le point 5, je matte ça 8)

A+

Publié : mer. 12/oct./2005 22:34
par Flype
tu sais ma proposition de sous langage ne servira à rien si tu ne rends pas le parametre 'sublang' facultatif. en effet, çà va devenir contraignant de préciser à chaque fois un sous langage si on en a pas besoin. quoiqu'on peut mettre '0' et çà marchera aussi ou faire un LocaleDate2().... :roll:

que veux tu me dire en mettant la doc TailBite ? que c'est contraignant à faire ? tu fais comme tu veux droopy mais moi je trouve çà au contraire génial. :twisted:
:jesors:

Publié : mer. 12/oct./2005 23:02
par Droopy

Code : Tout sélectionner

Procedure.l LocaleDate_LCID(lang.b,sublang.b) 
  
  ; Retourne une valeur LCID utilisable avec GetDateFormat() par ex. 
  
  Protected lang.b, sublang.b, lRes.l 
  
  lRes = (#SORT_DEFAULT<<16) | ( (sublang<<10) | lang ) 
  
  ProcedureReturn lRes 
  
EndProcedure 

ProcedureDLL.s LocaleDate(Mask.s,Date.l,lang.l) 
  
  Protected Date.l, lang.l, lcid.l, sRes.s, st.SYSTEMTIME 
  
  st\wYear   = Year(Date) 
  st\wMonth  = Month(Date) 
  st\wDay    = Day(Date) 
  st\wHour   = Hour(Date) 
  st\wMinute = Minute(Date) 
  st\wSecond = Second(Date) 
  
  sRes = Space(255) 
  GetDateFormat_(lang,0,st,Mask,sRes,255) 
  
  ProcedureReturn sRes 
  
EndProcedure 

ProcedureDLL.s LocaleDate2(Mask.s,Date.l,lang.l,sublang.l) 
  
  Protected Mask.s, Date.l, lang.l, sublang.l, sRes.s, a.SYSTEMTIME 
  
  a\wYear  = Year(Date) 
  a\wMonth = Month(Date) 
  a\wDay   = Day(Date) 
  
  sRes = Space(255) 
  GetDateFormat_(LocaleDate_LCID(lang,sublang),0,a,Mask,sRes,255) 
  
  ProcedureReturn sRes 
  
EndProcedure


;/ Test
Temp.s="Italian : "+LocaleDate("dddd d MMMM yyyy gg",Date(),#LANG_ITALIAN)+#CRLF$
Temp.s+"Spanish : "+LocaleDate("dddd d MMMM yyyy gg",Date(),#LANG_SPANISH)+#CRLF$
Temp.s+"Local : "+LocaleDate("dddd d MMMM yyyy gg",Date(),0)+#CRLF$+#CRLF$
 
Temp.s+"Uzbek (Latin) : "+LocaleDate("dddd d MMMM yyyy gg",Date(),$43,1)+#CRLF$
Temp.s+"Uzbek (Cyrillic) : "+LocaleDate("dddd d MMMM yyyy gg",Date(),$43,2)
 
MessageRequester("Locale Date",Temp)
Comme il n'y a que les cons qui ne changent pas d'avis, ce sera la première fonction de la Droopy Lib qui acceptera un paramètre facultatif ...

Qu'en pense tu ?

Publié : mer. 12/oct./2005 23:07
par Flype
:10:
droopy = :lilangel: