Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] chiusura finestra showmodal

    Ciao a tutti,

    prima di avviare (creare) il mio progetto voglio verificare se il programma è stato attivato tramite una certa chiave di attivazione. quindi procedo in questo modo:

    codice:
    var
      FrmIdentificazione: TFrmIdentificazione;
      FrmAttivazione: TFrmAttivazione;
      Attivato:=True;
    begin
      Application.Initialize;
      Application.Title := 'MiaApplicazione';
     
        try
          FrmAttivazione:= TFrmAttivazione.Create(nil);
          Attivato:=False;
          if FrmAttivazione.ShowModal  = mrOk then
            Attivato:=True;
         finally
          FrmAttivazione.Free;
         end;
    
      Application.CreateForm(TDM, DM);
      if Attivato then
       begin
         Application.CreateForm(TFrmMain, FrmMain);
         Application.Run;
       end
      else
        DM.Free;
    nel FrmAttivazione nell'evento onshow ho scritto questo codice:

    codice:
    procedure TFrmAttivazione.FormShow(Sender: TObject);
    begin
       cxTextEditCodice.Text:=GetVolumeId('c');
       Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Attivazione.ini');
       try
        cxTextEditChiave.Text:=ini.ReadString('Attivazione','Chiave','');
       finally
        ini.Free;
       end;
    
      if CalcolaChiave=cxTextEditChiave.Text then
         ModalResult := mrOk;
    end;
    pur eseguendo il comando ModalResult := mrOk; la FrmAttivazione non viene chiusa.

    perfavore, mi dite dove sbaglio????

    forse non devo usare l'evento onshow???

    sto sbattendo la testa già da un pò..

    grazie

  2. #2
    Forse è banale come risposta ma hai provato a cambiare la logica, ossia invece di fare lo show test il tutto nel create :
    codice:
     
    
        FrmAttivazione:= TFrmAttivazione.Create(nil);
        if FrmAttivazione.Attivato then
        begin
           FrmAttivazione.Free;
           Application.CreateForm(TDM, DM);
           Application.CreateForm(TFrmMain, FrmMain);
           Application.Run;  
        end
        else
        begin
           // possibile showmodal per compilazione attivazione
           FrmAttivazione.ShowModal;
           FrmAttivazione.Free;
        end;
    Nella form di attivazione nell'evento create gestisci il tutto, inserisci la variabile Attivato nella sezione public della form TFrmAttivazione

    codice:
     
    procedure TFrmAttivazione.FormCreate(Sender: TObject);
    begin
       cxTextEditCodice.Text:=GetVolumeId('c');
       Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Attivazione.ini');
       try
        cxTextEditChiave.Text:=ini.ReadString('Attivazione','Chiave','');
       finally
        ini.Free;
       end;
       Attivato := CalcolaChiave=cxTextEditChiave.Text;
    end;
    NB. il tutto non è testato ma scritto "al volo"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao

    ...non ho capito come dichiarare 'attivato'

    codice:
    type
      TFrmAttivazione = class(TForm)
        dxLayoutControl1Group_Root: TdxLayoutGroup;
        dxLayoutControl1: TdxLayoutControl;
        cxGroupBoxCodiceChiave: TcxGroupBox;
        dxLayoutControl1Item1: TdxLayoutItem;
        cxLabel1: TcxLabel;
        cxTextEditCodice: TcxTextEdit;
        BtnAnnulla: TcxButton;
        cxLabel2: TcxLabel;
        cxTextEditChiave: TcxTextEdit;
        BtnEntra: TcxButton;
        BtnGenera: TcxButton;
        procedure BtnEntraClick(Sender: TObject);
        procedure BtnAnnullaClick(Sender: TObject);
        procedure cxTextEditCodiceKeyPress(Sender: TObject; var Key: Char);
        procedure FormShow(Sender: TObject);
        procedure BtnGeneraClick(Sender: TObject);
        procedure cxGroupBoxCodiceChiaveMouseDown(Sender: TObject;
          Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
        function CalcolaChiave: String;
      public
        { Public declarations }
        function Execute: Boolean;
        Attivato:Boolean;
      end;
    in questa maniera mi da errore..
    dove lo devo mettere?

    grazie

  4. #4
    che errore ?
    la posizine è esatta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Originariamente inviato da Nettuno95
    che errore ?
    la posizine è esatta.

    [Error] UntAttivazione.pas(39): Field definition not allowed after methods or properties

  6. #6
    hhehe vero!! non mi ero accorto ... leggi bene l'errore ....
    la variabile devi metterla prima della function

    public
    { Public declarations }
    Attivato:Boolean;
    function Execute: Boolean;

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ..la dichiarazione della vriabile funziona..
    adesso sto provando se riesco a risolvere il problema principale..

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    codice:
        FrmAttivazione:= TFrmAttivazione.Create(nil);
          if not FrmAttivazione.Attivato then
              FrmAttivazione.ShowModal;
    
        if FrmAttivazione.Attivato then
        begin
           FrmAttivazione.Free;
           Application.CreateForm(TDM, DM);
           Application.CreateForm(TFrmMain, FrmMain);
           Application.Run;  
        end;
    funziona!
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.