Blokowanie cyfr

0

Bardzo porszę o pomoc !!!!!!!!!
Potrzebuje czegoś takiego że, mam sobie taką baze dnaych i mam do niej coś wpisywać np. Imię ale podczas wpisywania moge pisac równierz cyferki, a ja nie chcę , chcę żeby były tylko same literki. Może mi ktoś pomóc ??

fragment wygląda tak.....

write(imie: );
... i tu musi byc to cos co by ograniczalo te cyferki i inne znaki oprócz literek
readl(imie);

z góry thx

0

Z tego co widze to chodzi ci jek to zrobic pod pascalem (nastepnym razem napisz pod jakim programem)
W Pascalu jest sprawa bardziej skomplikowana poniewarz gdy odczytujesz cos (np string) poleceniem

Readln

, to "sterownie" i obsluga tego co wpisujesz jest w tej procedurce wiec nic z tym nie da rady zrobic :(
Mozesz jedynie napisac wlasna procedurke przyjmujaca to co uzytkownik bedzie pisal.
Jak nie umiesz napisac tego sam to mozesz poszukac w necie jakiegos gotowca, albo....
Jak piszesz baze danych to raczej sie znasz wiec mozesz przerobic ten kod:
Jest to zywcem wyciagniete z mojego programiku wiec do woli mozesz sobie przerabiac, jak zakapujesz o co chodzi. Nie mam niestety czasu zeby ci po kolei wyjasniac co jest co :(
Dodam tyklo ze Sets to mozliwe do przyjecia klawisze, czyli ty podasz same literki (pamietej duze i male)

procedure EditString(var S:string;Sets:SetChar;x,y,w,color,bgcolor:integer;CanSame:bool);
 function ZInSets(Z:char;S:string):bool;
 var set0:SetChar;
  begin
  StrToSet(S,set0);
  ZInSets := Z in (Sets-set0);
  end;

var S0:String;
    z:Char;
    i,xm,ym:integer;
    Ins:boolean;
 begin
 xm:=WhereX; ym:=WhereY;
 ScrFull(x,y,x+w-1,y,color+16*bgcolor);
 ScrFill(x,y,x+w-1,y,' ');
 S0:=S; i:=0; Ins:=True;
  repeat
  {jesli Ins to _ , jesli nie to Ű}
  gotoxy(x+i,y);
  TextXY(x,y,S0);
  z:=readkey;
   if ((CanSame)and(z in Sets))or((not CanSame)and(ZInSets(z,S0))) then
    begin
    inc(i);
     if (Ins)or(i>Length(S0)) then      {Insert czyli dodaje, nie zamienia}
      if Length(s0)<w-1 then
       Insert(z,S0,i)
      else begin Beep; dec(i); end
     else
      S0[i]:=z;
    end
   else
    if z=#0 then            {Dodatkowe klawisze (strzalki)}
     begin
     z:=readkey;
      case z of
       KeyArrowLeft,KeyArrowUp   : if i>0 then dec(i) else Beep;
       KeyArrowRight,KeyArrowDown: if i<Length(S0) then inc(i) else Beep;
       KeyDelete                 : if i<Length(S0) then
                begin delete(S0,i+1,1); PutScr(x+Length(S0),y,' '); end
               else Beep;
       KeyInsert                 : Ins:=not Ins;
       KeyHome                   : i:=0;
       KeyEnd                    : i:=Length(S0);
      else
       Beep;
      end;
     z:=#0;
     end
    else
     case z of
      KeyBkSpace: if i>0 then begin delete(S0,i,1); dec(i); PutScr(x+Length(S0),y,' '); end
                  else Beep;
     else
      if not (z in [KeyEnter,KeyESC]) then Beep;
     end;
  until z in [KeyEnter,KeyESC];
  if z in [KeyEnter] then
   S:=S0
  else
   begin TextXY(x,y,S); ScrFill(x+Length(S),y,x+w-1,y,' '); end;
 gotoxy(xm,ym);
 end;

Pozdrawiam
(PS do administratorow forum: NIE BLOKUJCIE MOICH POSTOW I ODPOWIEDZI!!!)
// to pisz posty na poziomie - ŁF

0

Albo po wczytaniu sprawdzaj każdy znak i usuwaj złe znaki lub poproś o ponowne wpisanie albo użyj zamiast readln zrób pętle do wczytywania znaków i tam ograniczaj, np:
uses crt;
var ch: char, imie: string;
...
s := '';
while true do
if keypressed then //sprawdzanie czy został naciśnięty klawisz
begin
ch := readkey; //wczytywanie klawisza
if ((ch >= 'A') and (ch <= 'Z')) or ((ch >= 'a') and (ch <= 'z')) then // sprawdzanie czy to jest litera
imie := imie + ch; // wpisywanie
if ord(ch) = #13 then break; // przerwanie pętli (mam nadzieje ze to zadziala :) )
end;

ale o ile dobrze pamiętam to chyba nie będzie się to wyświetlało na ekranie, musisz sam to wypisać, najlepiej przez gotoxy(x, y) i write(imie); gdzie x - kolumna, a y - wiersz ekranu trybu tekstowego
np: gotoxy(1, 10); - polecam, aby zawsze w tym samym miejscu wypisywało
Troche namieszałem, ale mam nadzieję że pomogłem.
Powodzenia.

0

<font size="12">JEZUS MARYJA I WSZYSCY ŚWIĘCI Anonim BÓJ SIĘ BOGA!</span>

Co to za kod ? Chłopakowi w głowie mieszasz..

a co do pytania:

Tekst pobieraj z klawiatury po jednym znaku (readKey), jeżeli znak <> ['0'..'9'] to dodaj do zmiennej "imie". I tyle!

// Bogi mnie ubiegł..

0

A gdzie cala obsloga klawiszy??
Jak nacisnie strzalki to se moze przechodzic miedzy literkami, prawie jak w obiektowych polach Edit!! A nawet jak to nie potrzebne to kazdemu sie zdazy pomylic i sco w tedy?? Backspace, w takim wydaniu nie zadziala, a gdy nacisne strzalke to jakies bzdury sie wyswietla

Pisalem przeciez ze jak chce moze sobie przerobic ten kod jak nie umie niech poszuka, to jest gotowiec ktorego mozna wykozystac w wielu programach wiec nie narzekaj bo sporo nad nim przesiedzialem zeby dzialal poprawnie!!!

(PS: Posty daje sensowne, jak nie wiesz jakie to przyczytaj ostatnio wyrzucone na pewno sa tam tez moje, np o przywroceniu zminimalizowanego okna, a jak na razie szukam przez caly czas i nie moge znaleŹĆ w archiwum konkretnej odpowiedzi na to zagadnienie)

0

tak czy inaczej da się znacznie krócej. normalnie nie piszę kodów tego typu, ale jak zobaczyłem pierwsze "rozwiązanie", to aż mnie odrzuciło.

[dopisane]
przecież to jest proste, mogłeś sobie to sam zrobić. a GotoXY działa tak, jak powinno, pewnie podajesz nieprawidłowe wartości parametrów.

[poprawione]

function ReadlnNoNumbers(const napis : string) : string;
var
  ch : char;
  s   : string[79];
begin
  s := '';
  while true do
  begin
    write(#13+napis+s+#32#8);
    ch := readkey;
    case ch of
      #0 : begin readkey; continue end;
      #13: break;
      #8 : if s[0] > #0 then dec(s[0]);
      #32..#47,#58..#255 : s := s + ch;
    end;
  end;
ReadlnNoNumbers := s;
end;

btw - słyszeliście o kodach sterujących - znaczki #7 - #13 itp?

0

Dzięki za dotychczasową pomoc, ale mam jeszcze jedno pytanie , ten ostatni kod z funkcą działa, drugi coś nie dokońca a tego długiego jeszcze nie sprawdzałem. W każdym razie w tej funkcji owszem nie wypisują się cyfry ale mam jedno pytanie czy da sie zrobic aby kursor nie wskakiwał na początek linii ?? Bo gdy zaczynam pisac to przeskakuje mi na początek i zamazuj mi napisy np.
Imie :
to on mi tak przeskuje na początek i zaczynam pisać po imieniu

z góry thx

0

A i jeszcze dodam że z gotoxy i tak mi idzie na początek

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