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);
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...
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ć.
to była informacja dla musio, a w miejscu tej buźki powinno być : (
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);
tak ale gdy nacisne backspace (czy jak sie to nazywa) to i tak narysuje sie gwiazdka.
W trybie graficznym jest to troche łatwiejsze.