PureBasic 4.00 - Beta 1

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

La fonction asc renvoie maintenant une valeur sur 8 bits signés même si on l'attribut à un long!

donc pour des valeurs dépassant 127, on se retrouve avec des valeurs négatives!!
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

popstatic a écrit :N'est-ce arrivé qu'a moi? parmis les appels de fonctions de mon code, un foire et le message d'erreur est.....

---------------------------
PureBasic
---------------------------
Line 128: A array name need to start with a character (a-z, _ or *)
---------------------------
OK
---------------------------

ma fonction s'appelle redim() et elle est appellée depuis une autre fonction.
Il existe maintenant une fonction native redim() pour redimensionner les tableaux. Normale que la tienne ne fonctionne plus! Renomme là.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ici le procedurereturn de la procedure de Codage ne renvoie pas le charactere !!!!! ????

Code : Tout sélectionner

Procedure.s codage(texte$)
    texte_coder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)
        If Asc(char$)>=30 And Asc(char$)<=127           
            nv_char$= Chr(Asc(char$)+80)
        EndIf       
        texte_coder$=texte_coder$+nv_char$
        Debug texte_coder$
        CallDebugger
    Next
    ProcedureReturn texte_coder$
EndProcedure


Procedure.s DeCodage(texte$)
    texte_decoder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)
        Debug Asc(char$)
        CallDebugger
        If Asc(char$)>=110 And Asc(char$)<=207
            char$=Chr(Asc(char$)-80)           
        EndIf
        texte_decoder$=texte_decoder$+char$    
    Next

    ProcedureReturn texte_decoder$
EndProcedure

CallDebugger
Debug retour.s=codage("a")
Debug DeCodage(retour.s)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nico a écrit :La fonction asc renvoie maintenant une valeur sur 8 bits signés même si on l'attribut à un long!

donc pour des valeurs dépassant 127, on se retrouve avec des valeurs négatives!!
ben ça ne respecte pas le Code ASCII alors !! :?

comment on fait pour les code sup a 127 ?? 8O
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tu fais comme ça

Code : Tout sélectionner

For i = 32 To 255 
Debug Asc(Chr(i)) & $FF
Next i

Est-ce normal de devoir faire comme ça ? ou c'est un bug ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

On peut faire ainsi (truc du soldat inconnu):
val.l=Huit_bits_signes & $ff

Code : Tout sélectionner

Procedure.s DeCodage(texte$) 
    texte_decoder$="" 
    For i=1 To Len(texte$) 
        char$=Mid(texte$,i,1)
        val.l= Asc(char$) & $ff
        If val>=110 And val<=207 
            char$=Chr(Asc(char$)-80) 
        EndIf 
        texte_decoder$=texte_decoder$+char$ 
    Next 
    Debug texte_decoder$ 
    ProcedureReturn texte_decoder$ 
EndProcedure 
[EDIT] grillé par Comtois!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Franchement , vous trouvez que c'est un progres vous ? 8O


pourtant on peut faire

Code : Tout sélectionner

For a =1 To  255
   Debug Chr(a)
Next a
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

olivier a écrit :Tellement absorbé par regarder les nouveautés, je n'arrive pas à poster mes fellicitations à l'équipe de PUREBASIC LONGUE VIE !!! :D :D :D :D

Je m'arrette devant un problème tout simple, ce code ne marche plus 8O et je reste 8O alors si vous aviez une piste pour me dé 8O ,

Code : Tout sélectionner

Procedure.s codage(texte$)
    texte_coder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)

        If Asc(char$)>=30 And Asc(char$)<=127
            
            nv_char$= Chr(Asc(char$)+80)
        EndIf
        
        texte_coder$=texte_coder$+nv_char$
    Next
    ProcedureReturn texte_coder$
EndProcedure

Procedure.s DeCodage(texte$)
    texte_decoder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)
        If Asc(char$)>=110 And Asc(char$)<=207
            char$=Chr(Asc(char$)-80)
            
        EndIf
        texte_decoder$=texte_decoder$+char$
    Next
    ;Debug texte_decoder$
    ProcedureReturn texte_decoder$
EndProcedure

Debug DeCodage(codage("abcdefgh"))
@Droopy : c'est la mise à jour de ta lib qui doit arrivé un lundi ???? :D
Juste une boutade pour te remercier encore pour ta fabuleuse lib et que j'attends apres pour pouvoir corriger mes progs....

Merci d'avance.
va dans menu -> compiler -> compiler options -> create unicode executable

et çà marche.

Merci à toute l'équipe Purebasic pour PB4.0, qui respecte largement ses engagements.

J'ai pas testé beaucoup, mais j'ai trouvé qq bugs avec PB4.0
. Bug graphique avec ListIconGadget() + #PB_Gadget_LineColor.
. EditorGadget() + #PB_Gadget_FrontColor : La couleur est perdu après un SetGadgetFont()
. HyperLinkGadget() : Le fond n'est pas transparent comme spécifié dans le 'readme'

Code : Tout sélectionner

;-

Enumeration ; Gadgets
  #gPanel
  #gContainer1
  #gString1
  #gString2
  #gString3
  #gEditor
  #gContainer2
  #gText
  #gHyperLink
  #gComboBox
  #gContainer3
  #gListIcon
  #gMax
EndEnumeration

;-

Procedure.l GUI_Create()
  
  ; Create the window and the graphical interface
  
  If OpenWindow(0,0,0,640,480,#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget,"Test")
    
    ; Create the Menu
    
    If CreateMenu(0,WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open"   +Chr(9)+"Ctrl+O")
        MenuItem(2, "Save"   +Chr(9)+"Ctrl+S")
        MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
        MenuBar()
        MenuItem(4, "Close"  +Chr(9)+"Ctrl+C")
    EndIf
    
    ; Create a PopupMenu
    
    If CreatePopupMenu(1)
    EndIf
    
    ; Create the ToolBar
    
    If CreateToolBar(0,WindowID(0))
      ToolBarStandardButton(0,#PB_ToolBarIcon_New)
      ToolBarStandardButton(1,#PB_ToolBarIcon_Open)
      ToolBarStandardButton(2,#PB_ToolBarIcon_Save)
    EndIf
    
    ; Create the Statusbar
    
    If CreateStatusBar(0,WindowID(0))
      AddStatusBarField(250)
      AddStatusBarField(1000)
    EndIf
    
    ; Create the GadgetList
    
    If CreateGadgetList(WindowID(0))
    
      If PanelGadget(#gPanel,10,30,620,400)
      
        AddGadgetItem(#gPanel,-1,"Page 1")
          If ContainerGadget(#gContainer1,5,5,350,350,#PB_Container_Single)
            StringGadget(#gString1,10,10,200,22,"StringGadget()")
            StringGadget(#gString2,10,40,200,22,"StringGadget()")
            StringGadget(#gString3,10,70,200,22,"StringGadget()")
            EditorGadget(#gEditor,10,100,200,200)
            SetGadgetText(#gEditor,"EditorGadget()"+#CRLF$+"EditorGadget()")
            CloseGadgetList()
          EndIf
          
        AddGadgetItem(#gPanel,-1,"Page 2")
          If ContainerGadget(#gContainer2,5,5,350,350,#PB_Container_Single)
            TextGadget(#gText,10,10,200,22,"TextGadget()")
            HyperLinkGadget(#gHyperLink,10,40,200,22,"HyperLinkGadget()",$00ffff,#PB_HyperLink_Underline)
            CloseGadgetList()
          EndIf
          
        AddGadgetItem(#gPanel,-1,"Page 3")
          If ContainerGadget(#gContainer3,5,5,350,350,#PB_Container_Single)
            ListIconGadget(#gListIcon,10,10,200,200,"A",20,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
            For i=2 To 25
              AddGadgetColumn(#gListIcon,i,Chr(65+i),20)
            Next
            For i=1 To 99
              AddGadgetItem(#gListIcon,i,Str(i))
            Next
            CloseGadgetList()
          EndIf
          
      EndIf
      
    EndIf
    
  EndIf
  
  ProcedureReturn #True
  
EndProcedure
Procedure.l GUI_Color()
  
  ; Scanning for desktop properties
  
  If ExamineDesktops()
    If DesktopDepth(0) < 16
      ProcedureReturn #False
    EndIf
  EndIf
  
  ; Colors of the graphical interface
  
  a.l = $000000
  b.l = $ffffff
  c.l = $e0e0e0
  d.l = $00e0e0
  e.l = $00e000
  f.l = $d06060
  
  ; Colorize the window
  
  SetWindowColor(0,c)
  
  ; Colorize the gadgetlist
  
  For i=0 To #gMax-1
  
    If IsGadget(i)
    
      Select GadgetType(i)
      
        Case #PB_GadgetType_Container 
          SetGadgetColor(i,#PB_Gadget_BackColor,c)
          
        Case #PB_GadgetType_String, #PB_GadgetType_Editor
          SetGadgetColor(i,#PB_Gadget_FrontColor,f)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_Text
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,c)
          
        Case #PB_GadgetType_ListIcon
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          SetGadgetColor(i,#PB_Gadget_LineColor,a)
          
        Case #PB_GadgetType_ListView
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_HyperLink
          SetGadgetColor(i,#PB_Gadget_FrontColor,c)
          
        Case #PB_GadgetType_ScrollArea
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_Calendar, #PB_GadgetType_Date
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          SetGadgetColor(i,#PB_Gadget_TitleBackColor,a)
          SetGadgetColor(i,#PB_Gadget_TitleFrontColor,d)
          SetGadgetColor(i,#PB_Gadget_GreyTextColor,a)
          
        Case #PB_GadgetType_Tree
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          SetGadgetColor(i,#PB_Gadget_LineColor,a)
          
        Case #PB_GadgetType_ExplorerList
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_ExplorerTree
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_ProgressBar
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_Spin
          SetGadgetColor(i,#PB_Gadget_FrontColor,a)
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_MDI
          SetGadgetColor(i,#PB_Gadget_BackColor,d)
          
        Case #PB_GadgetType_Splitter, #PB_GadgetType_ScrollBar, #PB_GadgetType_TrackBar, #PB_GadgetType_ComboBox, #PB_GadgetType_Panel
          ; Not Supported
          
        Default
          ; Unknown Gadget Type
          
      EndSelect
      
    EndIf
    
  Next
  
  ProcedureReturn #True
  
EndProcedure
Procedure.l GUI_Font()
  
  ; Load Fonts
  
  LoadFont(0,"Arial", 8,#Null)
  LoadFont(1,"Arial", 8,#PB_Font_Bold)
  LoadFont(2,"Arial",14,#PB_Font_Bold)
  
  ; Apply to the graphical interface
  
  For i=0 To #gMax-1
    If IsGadget(i)
      Select GadgetType(i)
        Case #PB_GadgetType_Button:        SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Calendar:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_CheckBox:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ComboBox:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Container :    SetGadgetFont(i,FontID(0))
        Case #PB_GadgetType_Date:          SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Editor:        SetGadgetFont(i,FontID(2))
        Case #PB_GadgetType_ExplorerList:  SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ExplorerTree:  SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ExplorerCombo: SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Frame3D:       SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_HyperLink:     SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Image:         SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_IPAddress:     SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ListIcon:      SetGadgetFont(i,FontID(0))
        Case #PB_GadgetType_ListView:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_MDI:           SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Option:        SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Panel:         SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ProgressBar:   SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ScrollArea:    SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_ScrollBar:     SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Spin:          SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Splitter:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_String:        SetGadgetFont(i,FontID(2))
        Case #PB_GadgetType_Text:          SetGadgetFont(i,FontID(2))
        Case #PB_GadgetType_TrackBar:      SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Tree:          SetGadgetFont(i,FontID(1))
        Case #PB_GadgetType_Web:           SetGadgetFont(i,FontID(1))
        Default
      EndSelect
    EndIf
  Next
  
  ProcedureReturn #True
  
EndProcedure
Procedure.l GUI_Main()
  
  ; Main Loop
  
  HideWindow(0,#False)
  
  Repeat
    
    ; Process events
    
    Select WaitWindowEvent(50)
      
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Menu
        Debug EventMenu()
        
      Case #PB_Event_Gadget
        Debug EventGadget()
        
      Case #WM_MOUSEMOVE
        StatusBarText(0,1,"Mouse("+Str(WindowMouseX(0))+","+Str(WindowMouseY(0))+")")
        
    EndSelect
    
    ; After events
    
    StatusBarText(0,0,FormatDate("%dd/%mm/%yyyy, %hh:%ii:%ss",Date()))
    
  ForEver
  
  CloseWindow(0)
  
  ProcedureReturn #True
  
EndProcedure

;-

If GUI_Create()
  GUI_Color()
  GUI_Font()  ; <-------- La couleur #PB_Gadget_FrontColor de l'EditorGadget() est perdue.
  GUI_Main()
EndIf

;-

If GUI_Create()
  GUI_Font()  ; <-------- Là non c'est ok.
  GUI_Color()
  GUI_Main()
EndIf

;-
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ceci ne resoud pas le blem suivant


la variable retour.s , ne recois pas le charactere !!!

Code : Tout sélectionner

Procedure.s codage(texte$)
    texte_coder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)
        If Asc(char$)>=30 And Asc(char$)<=127           
            nv_char$= Chr(Asc(char$)+80)
        EndIf       
        texte_coder$=texte_coder$+nv_char$
        Debug texte_coder$
        CallDebugger
    Next
    ProcedureReturn texte_coder$
EndProcedure


Procedure.s DeCodage(texte$)
    texte_decoder$=""
    For i=1 To Len(texte$)
        char$=Mid(texte$,i,1)
        Debug Asc(char$)
        CallDebugger
        If Asc(char$)>=110 And Asc(char$)<=207
            char$=Chr(Asc(char$)-80)           
        EndIf
        texte_decoder$=texte_decoder$+char$    
    Next

    ProcedureReturn texte_decoder$
EndProcedure

CallDebugger
Debug retour.s=codage("a")
Debug DeCodage(retour.s)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ca marche sous cette forme

Code : Tout sélectionner

CallDebugger
retour.s=codage("a")
Debug retour.s
Debug DeCodage(retour.s)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

va dans menu -> compiler -> compiler options -> create unicode executable

et çà marche.
Je pense qu'il est mieux de comprendre le problème que de le contourner à la compilation :lol: ; c'est le type d'erreur qu'on est tous amené à rencontrer avec les nombres signés.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui c'est vrai, çà permet juste de comprendre qu'il y a un lien, ce qui n'apporte rien c'est sûr :D
Par contre pour les couleurs, il y a qq problèmes à résoudre aussi, mais c'est excellent ce nouvel aspect de pb (entre autres évidemment).
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

L'unicode est un changement profond, normal qu'il y ait de petits soucis! Cependant, c'est l'avenir! Nous devons nous y mettre, voilà tout.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

@Flype : en tout cas Merci pour l'astuce
va dans menu -> compiler -> compiler options -> create unicode executable
ça me rassure ! :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Code : Tout sélectionner

Procedure.s codage(texte$) 
    texte_coder$="" 
    For i=1 To Len(texte$)
        ;char.c = PeekC(@texte$+i-1)
        char.c = Asc(Mid(texte$,i,1))
        If char >= 30 And char <= 127 
            nv_char$= Chr(char+80) 
        EndIf 
        texte_coder$=texte_coder$+nv_char$ 
    Next 
    ProcedureReturn texte_coder$ 
EndProcedure 

Procedure.s DeCodage(texte$) 
    texte_decoder$=""
    For i=1 To Len(texte$)
        char.c = PeekC(@texte$+i-1)
        ;char.c = Asc(Mid(texte$,i,1))
        If char >= 110 And char <= 207 
            nv_char$=Chr(char-80) 
        EndIf 
        texte_decoder$=texte_decoder$+nv_char$ 
    Next 
    ProcedureReturn texte_decoder$ 
EndProcedure 

Debug DeCodage(codage("abcdefgh"))
on peut maintenant utilisé le type .c ( caractère ascii non signé ! ) plutot qu'un string.
Et çà, çà fait avancer le schmilblik ? :wink:
Image
Répondre