Droopy's Lib

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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 :?:
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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)
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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))
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Concernant ton 1°, si la fonction dépend d'une autre fonction, est ce que les deux fonctions sont inclues ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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+
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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 ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

:10:
droopy = :lilangel:
Image
Répondre