delphi 2005 textbox1

0

mam maly problemik. moze ktos cos poradzi:
przypuscmy, ze mam na formularzu komponent textbox1 (czyli ten kaj sie wpisuje cos) i zmienna x (integer) przyporzadkowywuje do textbox1.text
czyli:
x:=inttostr(textbox1.text);

zapodaje program: jak wpisuje liczbe to wszystko dziala a jak wpisze przypadkiem litere to program sie wysypuje.
co zrobic zeby byly ignorowane wszystkie inne znaki niz cyfry?

0

Mozna to zrobic w ten sposob:

procedure TForm1.Button1Click(Sender: TObject);
var
i,x:integer;
s:string;
begin
s:='';
for i:=1 to length(textbox1.text) do
    if textbox1.text[i] in ['0'..'9'] then
       s:=s+textbox1.text[i];
if length(s)>0 then
   x:=strtoint(s)
else
   x:=0;
end;

Jezeli w polu oprocz cyfr beda litery to zostana one pominiete, a jezeli nie bedzie zadnych cyfr to zmienna x przyjmie wartosc 0.

0

dziala ;] dzieki :)

0

A może po prostu:

X := StrToIntDef(Edit1.Text, 0);

Chyba szybszy sposób.

0
Nex napisał(a)

A może po prostu:

X := StrToIntDef(Edit1.Text, 0);

Chyba szybszy sposób.

Pytanie brzmialo:

co zrobic zeby byly ignorowane wszystkie inne znaki niz cyfry?

Funkcja ktora podales dziala troche inaczej :)

0

Pardon. Mea culpa.

Masz rację, nie doczytałem... :P

StrToIntDef, odpada w takim przypadku.

0

Wystarczy obsłużyć zdarzenie naciśnięcia klawisza. Jeśli nie będzie to cyfra to
Key := #0

0

chodzilo mi o to ze jak w textboxie naciskam litere to sie nic nie dzieje. a jak cyfre to jest ona wyswielana. posluchalem waszych rad i obsluzylem zdarzenie KeyDown textboxa. W listingu nizej jesli wcisniemy klawisz inny nic "6" to kursor nic nie wyswetli. Z tym ze jest maly problem ;/

procedure TWinForm.TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs);
var
i: integer;
begin
for i:=1 to length(textbox1.Text) do
begin

if textbox1.Text[i]<> #54 then
// #54 to cyfra 6
textbox1.Text[i]:=#0;  //blad !

end;

end;</span>

w linijce textbox1.Text[i]:=#0; jest blad jakis. jak temu zaradzic?
ja juz sie nakombinowalem i nic poradzic nie umiem. a moze jest jakis inny sposob zeby wylaczyc w textboxie litery? zeby tylko cyfry mozna bylo wpisac?

0

Sprawdz czy cos takiego zadziala:

procedure TWinForm.TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs);
begin
    if e<>#54 then
       e:=#0;  
end;

Ja uzywam Delphi 7 i tam przy wywolaniu procedury KeyDown jako parametr (KEY) przekazywany jest kod nacisnietego znaku, wiec wydaje mi sie ze zmienna 'e' w tym przypadku moze pelnic podobna role.

0

< KeyPress >
procedure TForm_09.JvEdit17KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0','1','2','3','4','5','6','7','8','9',#08]) then Key := #0;
end;

0

J.W. twoj pomysl nie zadzialal. zostosowalem
if not (Key in ['0','1','2','3','4','5','6','7','8','9',#08]) then Key := #0;
dla obslugi zdarzenia KeyPress. Nie zadzialalo. Potem nawet tak z ciekawosci dla KeyDown i KeyUp. nic nie dalo. Za kazdym razem moge po uruchomieniu programu wypisywac w textboxie litery :| czy nie ma jakiegos prostszego sposobu niz pisanie kodu? czy moze jest jakis textbox co liter nie uwzglednia. pytam bo od niedawna w delphi klikam.
p.s.
probowalem zrobic jeszzce cos takiego:

#102:=#0;
//#102 to litera f
albo

#102:='';

czyli chcialem wyzerowac literke f a potem wszystkie inne,
ale nie przeszlo.

0

Dlaczego wy pytajacemu piszecie o zwykłym Delphi skoro chodzi o Delphi.NET? Tam żadnych #0 nie ma i to nie zadziała!

procedure TWinForm.TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs);
begin
  if e.KeyChar = 'a' then
    e.Handled := True;
end;

i jeżeli wpiszesz "a" to się nic nie stanie. I chyba o to chodzi. Teraz to tylko dla cyfr przerobić i będzie dobrze.

//dodane
A dokładnie to powinno wygladać tak w OnKeyPress:

procedure TWinForm.TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs);
begin
  if not (e.KeyChar in ['0'..'9',#08]) then
    e.Handled := True;
end;
0

dziala ;] dzieki [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1