Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: AlexLazarus - Novembre 14, 2022, 05:50:11 pm

Titolo: [RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 14, 2022, 05:50:11 pm
Sono perplesso: nel banalissimo programma vorrei convertire in stringa il valore di Pigreco (3,1415). So che dovrebbe esserci una specifica variabile per pigreco, ma il punto è un altro.
Nei tre screenshot viene segnalato un errore perché si aspetta una QWord. Ma anche dichiarando PiGreco come QWord il valore non viene accettato.

Ho provato (non si sa mai...) ad assegnare altri tipi, ma non funziona.

Come mai?

Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: Integer;
Var PiGreco: Double;
  begin
    PiGreco:= 3.1415;;
    Raggio:= StrToInt(Edit1.text);
    Begin
      Label1.Caption:=('Circonferenza di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * PiGreco*2));
      Label2.Caption:=('Diametro di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * 2));
      Label3.Caption:=('Cerchio di raggio ' + Edit1.text + ' = ' + IntToStr(Raggio * Raggio * PiGreco));
    end;
end;

 
Titolo: Re:3,1415 To String: quale type assegnare?
Inserito da: schumi - Novembre 14, 2022, 06:12:46 pm
ciao,
prova con FloatToStr
Titolo: Re:3,1415 To String: quale type assegnare?
Inserito da: quack - Novembre 14, 2022, 06:54:42 pm
Per richiamare PiGreco puoi usare la funzione

function Pi: ValReal;

Il prodotto di un intero e un double è ancora un double, non puoi usare IntToStr, utilizza FloatToStr.

Inoltre se definisci PiGrego come intero (Integer, QWord... ), poi non puoi assegnargli un valore reale (Real, Double... ).

Ciao
Titolo: Re:3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 15, 2022, 07:42:15 am
Grazie a entrambi!
Mi era sfuggita l'esistenza di ValReal; inoltre ero tratto in inganno dal fatto che Lazarus chiedeva con inistenza Qword.
Se mi avesse detto subito "Ehi bro, PiGreco non è intero: prova con ValReal!" tutto sarebbe stato più semplice. 😁
Nello screenshot il mio modesto contributo.
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 15, 2022, 08:43:43 am
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)
Qui di seguito il codice in cui ho usato una funzione cui passare un valore numerico "estratto" dalla stringa presente in un Edit.
Lo screenshot chiarisce ulteriormente il concetto.
Codice: [Seleziona]
 Procedure circonferenza(Raggio:ValReal);
Var Pi:ValReal;
Var PiGreco: Double;
 begin
    Pi:= 3.141592653589793238462643383279502884197169399;
    PiGreco:= 3.141592653589793238462643383279502884197169399;
    Begin
      Form1.Label1.Caption:=('Circonferenza di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * PiGreco*2));
      Form1.Label2.Caption:=('Diametro di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * 2));
      Form1.Label3.Caption:=('Cerchio di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * Raggio * PiGreco));
      Form1.Label6.Caption:=('Pigreco /ValReal): ' + FloatToStr(Pi));
      Form1.Label5.Caption:=('Pigreco / (Double): ' + FloatToStr(PiGreco));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
Var Trovato:Boolean;
Var Carattere:String;
  begin
     Begin
       Trovato:=False;
           For Posizione:= 1 to Length(Edit1.Text) Do
                 Begin
                   Carattere:= Copy(Edit1.Text,Posizione,1);
                   If Carattere = '.' then
                   Begin
                     ShowMessage('Attenzione! Punto invece di Virgola!');
                     Trovato := True;
                   end;
                 End;
     end;
     If Trovato = True then exit;
     Raggio:= StrToFloat(Edit1.Text);
      Circonferenza (Raggio);
end;

end.

Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 15, 2022, 08:59:34 am
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)

In realtà ciò dipende dalla localizzazione: in Italia funziona così. ma se vai in Francia usano la virgola così come in altri paesi.

Se usi il parametro "TFormaSetting" opzionale di FloatToSTr puoi scegliere se usare la virgola o il punto (o altri caratteri  :o ) come decimale.

Posterò un esempio.

N.B.: consiglio spassionato, cercate di usare le definizioni standard per la dichiarazione di variabili, nel passato è più volte successo che definizioni non molto usate siano state abbandonate e non più supportate. In questo caso piuttosto che "ValReal" usate "Double", a meno che ValReal non abbia qualche particolarità specifica.

Ciao
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 15, 2022, 09:37:34 am
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)

In realtà ciò dipende dalla localizzazione: in Italia funziona così. ma se vai in Francia usano la virgola così come in altri paesi.

Se usi il parametro "TFormaSetting" opzionale di FloatToSTr puoi scegliere se usare la virgola o il punto (o altri caratteri  :o ) come decimale.

Posterò un esempio.

N.B.: consiglio spassionato, cercate di usare le definizioni standard per la dichiarazione di variabili, nel passato è più volte successo che definizioni non molto usate siano state abbandonate e non più supportate. In questo caso piuttosto che "ValReal" usate "Double", a meno che ValReal non abbia qualche particolarità specifica.

Aargh! Ma infatti: avevo usato Double (vedi screenshot iniziali) ma non lo accettava. Credo che però l'errore segalato si riferisse al numero 2 (considerato intero?) e non alle variabili Raggio e Pigreco. Certo è che i messaggi di errore sono (IMHO) un po' troppo criptici.
A parte tutto, credo (sempre IMHO) che usando TFormaSetting (e imponendo, ad esempio, la virgola come valore da accettare) il programma EXE può segnalare errore se fatto girare su un PC che invece richiede il punto. Appena il programma parte bisognerebbe pertanto chiedere "Vuoi usare il punto o la virgola come separatore dei decimali?". Altrimenti il programma si interromperebbe e l'utente non ne saprebbe il motivo.
Approfitto della tua tradizionale(!) cortesia(!!) per chieder un'info "al volo": (cfr. Form del primo post) come devo fare per passare il contenuto dell'Edit1 - quando premo invio - alla procedura TForm1.Button1Click? Per come è fatto ora il programma devo digitare il valore e poi premere il pulsante.
In Visual Basic (se non ricordo male) era sufficiente: Call TForm1.Button1Click (o qualcosa del genere).
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 15, 2022, 01:54:11 pm
Primo, TFormatSettings: alla partenza del software DEVI caricarti il "formato" locale. In questo modo non avrai problemi. E' semplicemente automatico.
Devi comunque farlo, perchè comunque l'interpretazione del numero viene effettuato internamente usando il "formato" locale se non specificato altrimenti.

Alternativa è forzare la conversione sempre con il punto (ad esempio)  e sostituire il dato immesso dall'utente formato da eventuale virgola con il punto.

Attenzione che c'è anche l'opposto: visualizzare il numero in stringa (ad esempio in una TEdit) c'è comunque il problema del carattere (magari lo visualizzi con la virgola ma l'imissione dovrebbe essere con il punto).

Tutto questo giusto per creare un pò di confusione, ove non ce ne fosse.

Per "trasferire" il dato quanto premi l'invio devi usare l'evento "onkeyup" del controllo TEdit, tracciare il virtual key "Invio" e fare qualcosa ....
In generale, se vuoi fare una cosa "bella" quando l'utente conferma con l'invio il dato potresti cambiare il colore di sfondo della TEdit (o cambiare il colore del Font del carattere) per evidenziare che il dato è stato "accettato".

Abbi pazienza e ti posto un esempio sia per il TFormatSetting sia per l'evento.

Ciao
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 15, 2022, 03:29:44 pm
Ecco in allegato la demo. Scarica il progetto per capire il tutto. E' più facile a vedersi che a dirsi ....  ;D

Posto piccola parte del codice ...

Codice: [Seleziona]
  var Locale: TFormatSettings;
  //Carica il formato locale
  GetLocaleFormatSettings(SysLocale.DefaultLCID, Locale);

procedure TForm1.ED_EventoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var tempObj: TEdit;
    valuestr: string;
    ValueFloat: double;
begin
  if key = VK_RETURN then
    begin
      if Sender is TEdit then
        begin
            .......

Ciao
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: quack - Novembre 15, 2022, 10:56:00 pm
Ancora... Attenzione al valore decimale eventualmente presente in un stringa: per convertirlo in valore numerico occorre che sia presente il carattere virgola (,) e non punto (.)
Qui di seguito il codice in cui ho usato una funzione cui passare un valore numerico "estratto" dalla stringa presente in un Edit.
Lo screenshot chiarisce ulteriormente il concetto.
Codice: [Seleziona]
 Procedure circonferenza(Raggio:ValReal);
Var Pi:ValReal;
Var PiGreco: Double;
 begin
    Pi:= 3.141592653589793238462643383279502884197169399;
    PiGreco:= 3.141592653589793238462643383279502884197169399;
    Begin
      Form1.Label1.Caption:=('Circonferenza di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * PiGreco*2));
      Form1.Label2.Caption:=('Diametro di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * 2));
      Form1.Label3.Caption:=('Cerchio di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * Raggio * PiGreco));
      Form1.Label6.Caption:=('Pigreco /ValReal): ' + FloatToStr(Pi));
      Form1.Label5.Caption:=('Pigreco / (Double): ' + FloatToStr(PiGreco));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
Var Trovato:Boolean;
Var Carattere:String;
  begin
     Begin
       Trovato:=False;
           For Posizione:= 1 to Length(Edit1.Text) Do
                 Begin
                   Carattere:= Copy(Edit1.Text,Posizione,1);
                   If Carattere = '.' then
                   Begin
                     ShowMessage('Attenzione! Punto invece di Virgola!');
                     Trovato := True;
                   end;
                 End;
     end;
     If Trovato = True then exit;
     Raggio:= StrToFloat(Edit1.Text);
      Circonferenza (Raggio);
end;

end.


Al posto del TEdit potresti usare il componente TSpinEdit per gli interi o TFloatSpinEdit per i numeri decimali, ed accedere al valore digitato dall'utente tramite la proprietà Value. Eviti la seccatura di dover controllare la correttezza di quanto digitato. Stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value, evitando le conversioni da testo a numero e viceversa.

Per cambiare la classe di un componente già posizionato sulla form, in questo caso il TEdit, puoi utilizzare il comando "Cambia classe..." presente nel menu a tendina che compare cliccando con il tasto destro del mouse sul componente da modificare. Dopo aver scelto la classe di destinazione ti verrà chiesto di eliminare le proprietà non valide presenti nel file LMF, clicca su elimina ed il gioco è fatto. Il comando "Cambio di classe" è utile quando hai un componente già posizionato ed ancorato sulla form e vuoi cambiarlo.

Ciao


Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 16, 2022, 08:25:49 am
Ecco in allegato la demo. Scarica il progetto per capire il tutto. E' più facile a vedersi che a dirsi ....  ;D

Posto piccola parte del codice ...

Codice: [Seleziona]
... [eccetera] ...

...uhmm... ho scaricato e ho cercato(!) di capire, ma credo che non mi sia spiegato bene.

1) Anzitutto (IMHO) VK_Return dovrebbe essere una costante "riservata", ma a giudicare dal messaggio di errore non lo è (certo, il listato non è completo, ma...)
2) Il programma che mi hai mandato cambia colore all'Edit e agisce quindi solo all'interno dell'Edit stesso.
3) Il mio obiettivo (cfr. screenshot) è invece attivare automaticamente la sezione ButtonClick del programma quando si preme il pulsante invio nell'Edit, cioè come se si premesse Invio contemporaneamente nell'Edit e nel Button.

Sei comunque gentilissimo nel dedicare tanto tempo a un newbie! Conserverò gelosamente il programma ZIP per futuri sviluppi.
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 16, 2022, 08:49:04 am
Al posto del TEdit potresti usare il componente TSpinEdit per gli interi o TFloatSpinEdit per i numeri decimali, ed accedere al valore digitato dall'utente tramite la proprietà Value. Eviti la seccatura di dover controllare la correttezza di quanto digitato. Stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value, evitando le conversioni da testo a numero e viceversa.

Per cambiare la classe di un componente già posizionato sulla form, in questo caso il TEdit, puoi utilizzare il comando "Cambia classe..." presente nel menu a tendina che compare cliccando con il tasto destro del mouse sul componente da modificare. Dopo aver scelto la classe di destinazione ti verrà chiesto di eliminare le proprietà non valide presenti nel file LMF, clicca su elimina ed il gioco è fatto. Il comando "Cambio di classe" è utile quando hai un componente già posizionato ed ancorato sulla form e vuoi cambiarlo.


...comunque sto andando in confusione (screenshot). Tra l'altro... "...stessa cosa per l'assegnazione, utilizzi sempre la proprietà Value...": Dove trovo la proprietà Value?
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: quack - Novembre 16, 2022, 09:22:57 am
Screenshot, prosegui cliccando su elimina tutte le proprietà non valide.

Quando ti serve il valore inserito dall'utente  invece di usale la proprietà Text

Edit1.Text

usa

Edit1.Value

Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: SB - Novembre 16, 2022, 03:59:32 pm
Per gestire il separatore decimale prova a vedere DefaultFormatSettings.DecimalSeparator
Potresti semplicemente sostituire il punto e la virgola con il DecimalSeparator e poi procedere con la conversione, che così non dovrebbe dare problemi qualunque sia la convenzione usata.
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 16, 2022, 05:35:53 pm
Approfitto della tua tradizionale(!) cortesia(!!) per chieder un'info "al volo": (cfr. Form del primo post) come devo fare per passare il contenuto dell'Edit1 - quando premo invio - ..............

...uhmm... ho scaricato e ho cercato(!) di capire, ma credo che non mi sia spiegato bene.

1) Anzitutto (IMHO) VK_Return dovrebbe essere una costante "riservata", ma a giudicare dal messaggio di errore non lo è (certo, il listato non è completo, ma...)
2) Il programma che mi hai mandato cambia colore all'Edit e agisce quindi solo all'interno dell'Edit stesso.
3) Il mio obiettivo (cfr. screenshot) è invece attivare automaticamente la sezione ButtonClick del programma quando si preme il pulsante invio nell'Edit, cioè come se si premesse Invio contemporaneamente nell'Edit e nel Button.

Sei comunque gentilissimo nel dedicare tanto tempo a un newbie! Conserverò gelosamente il programma ZIP per futuri sviluppi.

1) Non hai copiato bene ..... se vedi nel codice postato nelle USES c'è "LCLTYPE" .... c'è un motivo se c'è quell'unità.
2) Come descritto nel programma quel cambio colore serve solo a segnalare all'utente che il dato è stato acquisito. Commenta il codice se non ti piace.
3) Vedi in testa all'inizio del post, avevi richiesto come gestire il tasto INVIO nella TEDIT per passare i dati, quello è il codice. Dentro il codice, se vuoi anche fare premere il pulsante Button1 in automatico segui quanto scritto qui (ti posto solo un pezzo, il resto completalo tu, in pratica devi aggiungere Button1.Click anche sul secondo "CASE"):

Codice: [Seleziona]
          //Distinguiamo il controllo tramite la proprietà TAG del controllo stesso
          Case tempObj.tag of
            1: // Perimetro
              begin
                //!!!!! PREMI ESC PER USCIRE DALLA SHOWMESSAGE .... NON E' CORRETTO FARE UNA SHOWMESSAGE QUI, E' SOLO PER ESEMPIO
                ShowMessage('Il valore immesso del perimetro è: '+ FloatToStr(ValueFloat, Locale));
                //Qui puoi fare quello che vuoi con il valore ValueFloat che corrisponde al PERIMETRO
                //Ad esempio assegnarlo ad una variabile globale.
                ......................
                ......................
                //Qui chiami l'evento "click" come se avvessi premuto il BUTTON1, ovviamente devi avere gestito l'evento OnCLick di Button1.
                Button1.Click;
                //Cambiamo il colore di fondo per segnalare all'utente che abbiamo ricevuto l'INPUT
                tempObj.Color := clAqua;
              end;

Ciao
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 17, 2022, 08:42:43 am
1) Non hai copiato bene ..... se vedi nel codice postato nelle USES c'è "LCLTYPE" .... c'è un motivo se c'è quell'unità.
[... eccetera ...]

Ah... ecco perché! 👍

Ora tutto funziona. Per semplificare, riporto qui di seguito l'intero codice. Negli screenshot i dettagli più interessanti. C'è quel solo parametro Shift (non usato). Avrei voluto eliminarlo per rendere il listato ancora più "pulito" e ho provato a rimuovere "shift" un po' a casaccio ("così, di botto, senza motivo" cit.). Però Lazarus si arrabbiava e non me lo ha fatto togliere. Poco male: finalmente ORA HO LE IDEE PIU' CHIARE.

Codice: [Seleziona]
unit A_2022_11_14_Prog_240_Funzioni_A_pas;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,LCLTYPE;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
Procedure circonferenza(Raggio:ValReal);
Var Pi:ValReal;
Var PiGreco: Double;
 begin
    Pi:= 3.141592653589793238462643383279502884197169399;
    PiGreco:= 3.141592653589793238462643383279502884197169399;
    Begin
      Form1.Label1.Caption:=('Circonferenza di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * PiGreco*2));
      Form1.Label2.Caption:=('Diametro di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * 2));
      Form1.Label3.Caption:=('Cerchio di raggio ' + Form1.Edit1.text + ' = ' + FloatToStr(Raggio * Raggio * PiGreco));
      Form1.Label6.Caption:=('Pigreco /ValReal): ' + FloatToStr(Pi));
      Form1.Label5.Caption:=('Pigreco / (Double): ' + FloatToStr(PiGreco));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
Var Trovato:Boolean;
Var Carattere:String;
  begin
     Begin
       Trovato:=False;
           For Posizione:= 1 to Length(Edit1.Text) Do
                 Begin
                   Carattere:= Copy(Edit1.Text,Posizione,1);
                   If Carattere = '.' then
                   Begin
                     ShowMessage('Attenzione! Punto invece di Virgola!');
                     Trovato := True;
                   end;
                 End;
     end;
     If Trovato = True then exit;
     Raggio:= StrToFloat(Edit1.Text);
      Circonferenza (Raggio);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if key = VK_RETURN then Button1.Click;
 end;

end.


Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 17, 2022, 09:29:06 am
Invece di ciclare per tutta la stringa, esiste una funzione standard già presente in Pascal: "Pos(".

Codice: [Seleziona]
var i: integer;
i := Pos('.', Edit1.Text, 1);
if i > 0 then
 trovato := true;

Ciao
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 17, 2022, 10:56:32 am
Invece di ciclare per tutta la stringa, esiste una funzione standard già presente in Pascal: "Pos(".

Codice: [Seleziona]
var i: integer;
i := Pos('.', Edit1.Text, 1);
if i > 0 then
 trovato := true;

Ciao

Buono a sapersi!
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: AlexLazarus - Novembre 17, 2022, 04:27:40 pm
Invece di ciclare per tutta la stringa, esiste una funzione standard già presente in Pascal: "Pos(".
Fatto! Ho aggiunto qualche riga di codice per evitare che l'utente rimanga basito in assenza di elaborazione o di messaggi di errore.
Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
// Elementi di una circonferenza
Var Raggio: ValReal;
Var Posizione: Integer;
  begin
     If Edit1.text <> '' then
         Begin
         Posizione:= Pos('.',Edit1.Text,1);
         If Posizione > 0 then
         Begin
            ShowMessage('Attenzione!' + chr(13) +'Hai digitato punto (.) invece di virgola (,)');
            Edit1.text:='';
            exit;
         end;
         Raggio:= StrToFloat(Edit1.Text);
         Circonferenza (Raggio);
         end
     Else ShowMessage('Nessun carattere in Edit1!');
end;

Rimane da spiegare la presenza di Hint: Parameter "Shift" not used e come eliminarla.
Titolo: Re:[RISOLTO] 3,1415 To String: quale type assegnare?
Inserito da: DragoRosso - Novembre 17, 2022, 04:53:07 pm
Rimane da spiegare la presenza di Hint: Parameter "Shift" not used e come eliminarla.

Come ti ho già spiegato alcuni Hint o Warning ti rimarranno. In questo caso viene dichiarato un parametro che il tuo evento non usa. Il parametro non si può togliere e quindi l'HINT te lo tieni  :)

Ciao