probleme avec SaveFileRequester (annuler)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

probleme avec SaveFileRequester (annuler)

Message par venom »

bonjour,

voila je suis entrain de faire un programme qui enregistre un fichier texte. et j'aimerais savoir comment faire pour que quand j'annule mon sauvegardage sa ne me cree pas mon fichier quand meme :D .

voici la source :wink:

Code : Tout sélectionner

Enumeration 
  #Window_0 
EndEnumeration 

Enumeration 
  #Text_0 
  #String_0 
  #String_1 
  #Text_1 
  #Button_0 
  #Button_1 
  #Button_2
  #Button_3
  #String_2 
  #StatusBar_0 
  #String_NomS
EndEnumeration 

Procedure.l CalculateSeed(InputNumber.l) 
  ProcedureReturn Int(Log(InputNumber) * Cos(InputNumber) * 137) 
EndProcedure 

Procedure.l GetPasswordValue(Password.s) 
  ASCII_Vals.l 
  
  For i = 1 To Len(Password) 
    ASCII_Vals = ASCII_Vals + Asc(Mid(Password, i, 1)) 
  Next i 
  
  If ASCII_Vals > Len(Password) 
    ProcedureReturn Int(CalculateSeed(ASCII_Vals) / CalculateSeed(Len(Password) + 1)) 
  Else 
    ProcedureReturn CalculateSeed(ASCII_Vals) 
  EndIf 
EndProcedure 

Procedure.l WrapNumber(lngNumber.l, lngMinimum.l, lngMaximum.l) 
  DefType.l Range, check 
  Range = lngMaximum - lngMinimum 
  check = lngNumber 
  
  If lngNumber > lngMaximum 
    Repeat 
      check = check - Range 
    Until check <= lngMaximum 
  ElseIf lngNumber < lngMinimum 
    Repeat 
      check = check + Range 
    Until check >= lngMinimum 
  EndIf 
  ProcedureReturn check 
EndProcedure 

Procedure.s Encrypt(Password.s, Input.s) 
  DefType.l PasswordVal, CurrentChar, CurrentMod 
  enctxt.s  
  PasswordVal = GetPasswordValue(Password) 
    
  CurrentMod = 2 
    
  For i = 1 To Len(Input) 
    CurrentChar = Asc(Mid(Input, i, 1)) 
    CurrentChar = CurrentChar + PasswordVal 
    CurrentChar = CurrentChar - CalculateSeed(CurrentMod) 
    CurrentChar = WrapNumber(CurrentChar, 0, 255) 
    enctxt = enctxt + Chr(CurrentChar) 
    CurrentMod = CurrentMod + 1 
    
    If CurrentMod > 30 
      CurrentMod = 2 
    EndIf 
  Next i 
  ProcedureReturn enctxt  
EndProcedure 

Procedure.s Decrypt(Password.s, Input.s) 
  DefType.l PasswordVal, CurrentChar, CurrentMod 
  dectxt.s  
  PasswordVal = GetPasswordValue(Password) 
  CurrentMod = 2 
    
  For i = 1 To Len(Input) 
    CurrentChar = Asc(Mid(Input, i, 1)) 
    CurrentChar = CurrentChar - PasswordVal 
    CurrentChar = CurrentChar + CalculateSeed(CurrentMod) 
    CurrentChar = WrapNumber(CurrentChar, 0, 255) 
    dectxt = dectxt + Chr(CurrentChar) 
    CurrentMod = CurrentMod + 1 
    
    If CurrentMod > 30 
      CurrentMod = 2 
    EndIf 
  Next i 
  ProcedureReturn dectxt    
EndProcedure
 
Global FontID2 
FontID2 = LoadFont(2, "comic sans ms", 8, #PB_Font_Bold) 

Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 0, 0, 322, 440,  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget , "VENOM CRYPTAGE") 
    If CreateStatusBar(#StatusBar_0, WindowID()) 
      AddStatusBarField(322) 
    EndIf 
    
    If CreateGadgetList(WindowID()) 
      TextGadget(#Text_0, 10, 20, 85, 20, "Mot de passe:") 
      SetGadgetFont(#Text_0, FontID2) 
      
      StringGadget(#String_0, 90, 18, 210, 20, "", #PB_String_Password) 
      SendMessage_(GadgetID(#String_0), #EM_LIMITTEXT, 100, 0)
       
      StringGadget(#String_1, 20, 70, 280, 100, "", #PB_String_MultiLine|#ES_AUTOVSCROLL|#WS_VSCROLL|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT) 
      SendMessage_(GadgetID(#String_1), #EM_LIMITTEXT, 1000, 0) 
      TextGadget(#Text_1, 20, 50, 45, 15, "Texte:")
      SetGadgetFont(#Text_1, FontID2)
      
      ButtonGadget(#Button_0, 20, 180, 280, 30, "Crypter") 
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control | #PB_Shortcut_E, #Button_0) 
      SetGadgetFont(#Button_0, FontID2) 
      
      ButtonGadget(#Button_1, 20, 210, 280, 30, "Decrypter") 
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control | #PB_Shortcut_D, #Button_1) 
      SetGadgetFont(#Button_1, FontID2) 
      
      ButtonGadget(#Button_2, 20, 240, 280, 30, "enregistrer sous decrypter") 
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control | #PB_Shortcut_D, #Button_2) 
      SetGadgetFont(#Button_2, FontID2)
      
      ButtonGadget(#Button_3, 20, 270, 280, 30, "enregistrer sous crypter") 
      AddKeyboardShortcut(#Window_0, #PB_Shortcut_Control | #PB_Shortcut_D, #Button_3) 
      SetGadgetFont(#Button_3, FontID2)
      
      StringGadget(#String_2, 20, 310, 280, 100, "", #PB_String_MultiLine|#ES_AUTOVSCROLL|#WS_VSCROLL|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT) 
      SendMessage_(GadgetID(#String_2), #EM_LIMITTEXT, 1000, 0) 
    EndIf 
  EndIf 
EndProcedure 

 Procedure saveas() 
  fichier$ = SaveFileRequester("Enregistrer sous", "document texte decrypter","texte|*.txt", 0) 
  If CreateFile(0,fichier$+".txt") 
    WriteString(GetGadgetText(#String_1))
    CloseFile(0)
    StatusBarText(#StatusBar_0, 0, "sauvegarder avec succes") 
  EndIf 
EndProcedure

 Procedure saveas1() 
  fichier$ = SaveFileRequester("Enregistrer sous", "document texte crypter","texte|*.txt", 0) 
  If CreateFile(0,fichier$+".txt") 
    WriteString(GetGadgetText(#String_2))
    CloseFile(0)
    StatusBarText(#StatusBar_0, 0, "sauvegarder avec succes") 
  EndIf 
EndProcedure

Open_Window_0() 
ActivateGadget(#String_0) 
DisableGadget(#Button_0, 1) 
DisableGadget(#Button_1, 1) 
DisableGadget(#Button_2, 1)
DisableGadget(#Button_3, 1)

Repeat 
  
  Event = WaitWindowEvent() 
  If Event = #PB_EventCloseWindow 
    Quit = 1 
  ElseIf Event = #PB_Event_Gadget Or Event = #PB_Event_Menu 
    
    Select EventGadgetID() 
    
      Case #Button_0  ;crypter
        If GetGadgetText(#String_0) = "" 
          MessageRequester("attention", "vous devez entrée un mot de passe pour crypter vos information", #MB_ICONWARNING) 
        Else 
          SetGadgetText(#String_2, Encrypt(GetGadgetText(#String_0), GetGadgetText(#String_1))) 
          If Len(GetGadgetText(#String_2)) <> Len(GetGadgetText(#String_1)) 
            SetGadgetText(#String_2, "")  
          Else 
            SetGadgetText(#String_1, fichier$)
            DisableGadget(#Button_0, 1) 
            DisableGadget(#Button_1, 0)
            DisableGadget(#Button_2, 1)
            DisableGadget(#Button_3, 0)
            StatusBarText(#StatusBar_0, 0, "Codage avec succès !") 
          EndIf 
        EndIf 
        
      Case #Button_1  ;Decrypter 
        If GetGadgetText(#String_0) = "" 
          MessageRequester("attention", "vous devez entrée un mot de passe pour décrypter vos information", #MB_ICONWARNING) 
        Else 
          SetGadgetText(#String_1, Decrypt(GetGadgetText(#String_0), GetGadgetText(#String_2))) 
          SetGadgetText(#String_2, fichier$) 
          DisableGadget(#Button_1, 1) 
          DisableGadget(#Button_0, 0)
          DisableGadget(#Button_3, 1)
          DisableGadget(#Button_2, 0)
          StatusBarText(#StatusBar_0, 0, "Décodage avec succès !") 
        EndIf 
        
      Case #String_1  ; Input 
        If EventType() = #PB_EventType_Change 
          DisableGadget(#Button_0, 0)
          DisableGadget(#Button_2, 0)
        EndIf
        
      Case #String_2  ; Output 
        If EventType() = #PB_EventType_Change 
          DisableGadget(#Button_1, 0)
          DisableGadget(#Button_3, 0)
        EndIf 
      
      Case #Button_2
       saveas()
      
      Case #Button_3
       saveas1()
       
    EndSelect 
  EndIf 
  
Until Quit 

End

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Fais un test sur le contenu de la variable fichier$. Si l'utilisateur annule, elle sera vide. Et dans ce cas tu créé ton fichier seulement si elle n'est pas vide
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Plus simple, tu proposes à l'utilisateur le choix d'enregistrer ou non avec un requester.
Comme ça par exemple:

Code : Tout sélectionner

Case #BOUTON_SAVEAS
          Resultat = MessageRequester("Enregistrer sous","Voulez-vous enregistrer ce fichier ?",#MB_ICONEXCLAMATION | #PB_MessageRequester_YesNo) 
            If Resultat = 6
             a$ + "Yes" ;<--- si OK  
                EnregistrerSous() ;<--- ta procedure d'enregistrement
            ElseIf Resultat = 7
             a$ + "No" ;<--- si NO rien ne se passe
            EndIf
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Ouai c'est valable mais plus lourd pour l'utilisateur, sa lui rajoute une boîte de dialogue et si jamais il clique sur annulé, on retourne à 0.
Répondre