Avatar billede razmataz Nybegynder
09. november 2005 - 12:01 Der er 11 kommentarer og
1 løsning

Kun indtaste bogstaver i en edit?

Hvordan sørger man for at en bruger kun kan taste bogstaver end i en edit? Er det noget der er forholdsvis let at klare eller kræver det at man checker keyinput før man sætter det ind i edit'en?
Avatar billede snowball Novice
09. november 2005 - 12:21 #1
Tyvstjålet fra Borrisholt ;)


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TCharSet = set of Char;

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    procedure ValidateEdit(Edit: TEdit; ValidChars: TCharSet);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ValidateEdit(Edit: TEdit; ValidChars: TCharSet);
var
  s: string;
  i: Integer;
begin
  s := Edit.Text;
  for i := 1 to length(s) do
    if not (s[i] in ValidChars) then
      Delete(s, i, 1);
  Edit.text := s;
  Edit.SelStart := length(s);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  ValidateEdit(Sender as TEdit, ['a'..'å', 'A'..'Å','æ','ø']);
end;

end.
Avatar billede razmataz Nybegynder
09. november 2005 - 12:51 #2
oki, og hvis det kun må være tal?
Avatar billede razmataz Nybegynder
09. november 2005 - 12:51 #3
Positive tal vel at mærke.
Avatar billede hrc Mester
09. november 2005 - 12:58 #4
ValidateEdit(Sender as TEdit, ['0''..'9']);
Avatar billede hrc Mester
09. november 2005 - 13:00 #5
Du kunne også køre det on KeyPressed(Key : char) - det hedder den vist

Tform.Edit1OnKeyPressed(aSender : TObject; aKey : char)
begin
  if not (aKey in ['0'..'9'] then
    key := #0;
end;

... lidt samme vin på andre flasker.
Avatar billede hrc Mester
09. november 2005 - 13:01 #6
Tform.Edit1OnKeyPressed(aSender : TObject; aKey : char)
begin
  if not (aKey in ['0'..'9',chr(KEY_BACK)] then
    akey := #0;
end;

Nu sidder jeg ikke ved en Delphi så jeg improviserer lidt. KEY_BACK er koden for backspace.
Avatar billede razmataz Nybegynder
09. november 2005 - 13:07 #7
Avatar billede razmataz Nybegynder
09. november 2005 - 13:10 #8
Lige en sidste ting.... hvordan får jeg det til at virke med en maskedit med en maske som følger : __-__-___ ?
Avatar billede razmataz Nybegynder
09. november 2005 - 13:19 #9
Jeg har lavet :
procedure TForm1.ValidateMaskEdit(Edit: TMaskEdit; ValidChars: TCharSet);
var
  s: string;
  i: Integer;
begin
  s := Edit.Text;
  for i := 1 to length(s) do
    if not (s[i] in ValidChars) then
      Delete(s, i, 1);
  Edit.text := s;
  Edit.SelStart := length(s);
end;

Men det laver et stack overflow når man taster tal ind..
Avatar billede razmataz Nybegynder
09. november 2005 - 13:22 #10
løste det selv :)
Avatar billede razmataz Nybegynder
09. november 2005 - 13:25 #11
Der er så lige endnu en anden ting... hvis man gerne må taste mellemrum?
Avatar billede razmataz Nybegynder
09. november 2005 - 13:26 #12
har det... sorry.. jeg er ikke helt vågen endnu :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester