Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    delphi - campi numerici

    Ciao a tutti,
    vorrei sapere se esiste oggetto come lo SpinEdit che mi consenta però di inserire anche valori con la virgola, oppure un edit a cui possa eliminare l'inserimento di valori alfabetici?
    In due parole mi serve un campo di input dove possa inserire solo valori numerici.

    Fatemi sapere. Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Implementare un semplice filtro di tasti è cosa semplice: basta analizzare il tasto premuto intercettando l'evento OnKeyPress del controllo TEdit e impostare il parametro Key a #0 quando si vuole "assorbire" il tasto, quando questo è un carattere alfabetico e non può entrare nella casella di testo.

    Lo SpinEdit, per sua natura, può solamente effettuare incrementi interi del valore visualizzato.

    Se vuoi trovare qualche Edit particolare, scarica la Jedi VCL dal sito ufficiale. Vi sono componenti Edit per tutti i gusti...e molto di più.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    scusate, non ho capito......

    ho inserito in form1 un campo edit nel quale vorrei inserire un valore che per mie esigenze deve essere composto solo da valori numerici e di lunghezza 5.
    ho impostato tra le proprieta del edit, MaxLenght=5, ma non riesco a fare in modo che vengano accettati solo valori numerici.

    sto provando sull'evento OnKeyPress, ma non riesco a capire dove "impostare il parametro Key a #0"

    grazie

  4. #4
    if Key = 'A' then
    begin
    Key := #0;
    end;

    Prova ad inserire questo comando sull'evento OnKeyPress dell'oggetto Edit.
    Questo ti bloccherà l'inserimento del carattere 'A'.
    Non sò se ci siamo metodi migliori,può darsi di si, ma se per ogni lettera che non ti interessa immettere usassi questo comando, risolveresti il tuo problema.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Il suggerimento di pegaso22 è corretto, anche se tieni bene a mente che non è (quasi) possibile validare un numero durante l'inserimento, poichè potresti dover sostituire parte del contenuto con altri elementi o numeri generando temporaneamente un valore numerico non valido.

    Secondo me, l'evento OnKeyPress ti permette di gestire egregiamente ogni situazione che richieda un filtro dei tasti e una validazione dell'input. Prendi questo esempio:
    codice:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
      begin
        FValue := StrToIntDef(Edit1.Text, FValue);
        Edit1.Text := IntToStr(FValue);
        Key := #0;
      end;
      if Key in ['.', ','] then
        Key := DecimalSeparator;
      if not(Key in ['0'..'9', DecimalSeparator]) then
        Key := #0;
    end;
    Generalmente, io memorizzo il valore che figura nell'Edit all'interno di una variabile, chiamata FValue in questo caso, che fa parte della classe del form in cui sto inserendo il codice.

    Nell'esempio sopra, se viene premuto il tasto INVIO, provvedo a memorizzare in tale variabile il valore inserito nell'Edit utilizzando il valore precedente di FValue nel caso in cui la conversione non vada a buon fine (il testo inserito non può essere ricondotto ad un numero). Impostando Key a #0, "assorbiamo" il tasto impedendo che venga recepito da altri controlli.

    Il codice che segue verifica se il tasto è un punto (.) o un punto e virgola (, sostituendolo con DecimalSeparator che è la variabile disponibile in un'applicazione Delphi che contiene il separatore decimale valido nel sistema operativo, definito attraverso il Pannello di Controllo; in questo modo, indipendentemente dalle abitudini dell'utente, lo forziamo ad utilizzare il separatore decimale valido sostituendo il carattere con quello corretto, se necessario.

    Nel passo finale, azzeriamo il tasto premuto se questo non rientra nell'insieme delle cifre consentite, incluso il separatore decimale.

    In poche parole, abbiamo fatto validazione e filtro assieme.

    La memorizzazione del valore intero digitato si potrebbe fare anche nell'evento OnExit, in modo da validarlo e acquisirlo quando l'utente si sposta verso un'altra casella di testo o un altro controllo visuale.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.