Jak wpisywane litery zastąpić symbolem *.

Freebird

Nie raz sie zdarza, że pisząc program w TP musimy skorzystać z opcji hasła, no w Delphi to żaden problem, jednak w TP to już mały problemik, spróbujmy go rozwiązać, na pewno się przyda:

Rozpoczynamy pętlę, która będzie pracować tak długo, aż nie naciśniemy Entera lub ilość znaków w haśle nie będzie większa niż sobie na początku założyliśmy:

var
           znak:char; // zmienna przechowująca dane klawisza 
           haslo: string; // zmienna przechowująca hasło
           ilosc: integer; // zmienna kontrolująca ilość znaków wpisanych
repeat
     znak:=readkey;

          if znak<>#13 then
                       begin
                           haslo:=haslo+znak;
                           write('*');                       
                         end;
          ilosc:=ilosc+1;
until (znak=#13) or (ilosc>10);
FAQ

5 komentarzy

tak ale gdy nacisne backspace (czy jak sie to nazywa) to i tak narysuje sie gwiazdka.
W trybie graficznym jest to troche łatwiejsze.

to była informacja dla musio, a w miejscu tej buźki powinno być : (

Dzięki mentor. Tak wiem że można to zrobić w trybie tekstowym. Palnąłem wtedy z tym graficznym. Dzień później zacząłem się w to bawić i wyszły mi lepsze efekty niż przedtem. Teraz mogę Ci powiedzieć, że można to jeszcze łatwiej zrobić.

A próbowałeś w trybie tekstowym wypisać #8? Cofa Cię o jeden znak i nie trzeba się bawić w GotoXY.

Tak poza tym to całą procedurę można zapisać w trzech - czterech linijkach...

Var
znak:char; // zmienna przechowująca dane klawisza
haslo: string; // zmienna przechowująca hasło
ilosc: integer; // zmienna kontrolująca ilość znaków wpisanych
repeat
znak:=readkey;

if znak<>#13 then
begin
IF ZNAK=#8 THEN BEGIN
ILOSC-1;
HASLO[0]:=CHR(ORD(HASLO[0])-1); // znak stringa o indeksie 0 odpowiada za informacje o dlugosci stringa
GOTOXY(WHEREX-1,WHEREY); // cofamy sie na miejsce poprzedniego znaku
mem[$B800:(2(wherex((wherey-1)80)-2))]:=Ord(' '); // a to żeby się dguri raz po ekranie nie przesówać
// zamieniamy pamieciowo poprzedni znak na ' ' - spacje
ELSE begin
haslo:=haslo+znak;
write('*');
end;
ilosc:=ilosc+1; END;
until (znak=#13) or (ilosc>10);