Page 1 sur 1

probleme avec SaveFileRequester (annuler)

Publié : ven. 30/juin/2006 18:58
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

@++

Publié : ven. 30/juin/2006 19:32
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

Publié : ven. 30/juin/2006 20:19
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

Publié : ven. 30/juin/2006 21:55
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.