Ogon. [ półtoraken fechten ]
Turbo Pascal - jak oznaczyc kursor?
Pisze programik i musze zrobic cos w stylu 'jesli wcisniety klawisz to kursor w prawo to przejdz do dalszej czesci programu'.
If znak= ... than cośtam;
Co wstawic w miejsce kropek?
Didier z Rivii [ life 4 sound ]
Funkcja ReadKey
Składnia: znak:=ReadKey;
Jest to funkcja, która znajduje się w bibliotece CRT i zwraca znak odczytany z klawiatury ( nie cały ciąg znaków STRING a tylko jeden typu CHAR ). np.
USES CRT;
Var
znak:char;
Begin
WriteLn( 'Wcisnij jakis klawisz...');
znak:=ReadKey;
WriteLn( 'Wcisniety zostal klawisz: ',znak );
End.
Program czeka na wciśnięcie jakiegokolwiek klawisza i wyświetla go ( oczywiście nie mowię tu o klawiszach SHIFT, ALT czy CRTL bo one działają tylko w połączeniu z innymi znakami :)
-----------------
przetestuj takim programem i będziesz wiedział :)
M'q [ Schattenjäger ]
KeyPressed (funkcja) - unit Crt i WinCrt
Sprawdza czy został naciśnięty jakiś klawisz.
Deklaracja:
KeyPressed: Boolean
Uwagi:
To jaki klawisz został naciśnięty można sprawdzić przy użyciu funkcji ReadKey.
Zwracana wartość:
TRUE (prawda) jeśli klawisz został naciśnięty, FALSE (fałsz) jeśli nie.
Ogon. [ półtoraken fechten ]
okok, ale ja bym chciał żeby to był konkretnie znak "kursor w prawo"... a te programy (które sam znalazłem w necie) nie piszą jak to zrobić.
edit: chyba zostane przy zwyklym readln; i bede wciskal enter.
Didier z Rivii [ life 4 sound ]
jednak to co wkleilem nie wyświetla kodów klawiszy innych niz znakowe ale wejdz w linka z mojego postu i tam w sekcji "Obsługa Klawiszy Rozszerzonych" masz przyklad jak zrobic obsluge kursorów
Ogon. [ półtoraken fechten ]
dzięki :)
Ok, to jeszcze jedno pytanie - jak zapętlić komendę case of?
Tzn np mam
writeln('Wybierz 1 aby cośtam, wybierz 2 aby cośtam i wybierz 3 aby zakończyć program');
case liczba of
1: ...
2: ...
3: zakończ program
else ...
I chciałbym aby po wybraniu 1 lub 2 i wykonaniu zawartych tam instrukcji
program powracał do początku writeln.
Myślałem żeby wstawić przed writeln REPEAT
i na koncu until liczba=3;
ale nie działa ;/
Didier z Rivii [ life 4 sound ]
repeat
...
until liczba = 3;
działa w taki sposób, ze będzie to powtarzal jesli będzie spełniony warunek, czyli pętla zajdzie tylko wtedy gdy w momencie testowania warunku zmienna liczba będzie równa 3, wiec troche na odwrót ;)
jak chcesz zrobic skutecznie chociaz niezbyt elegancko to zrob:
repeat
...
until true
a w case gdzie masz zakonczenie programu wymuś koniec jakims tam exitem czy jak to sie robi w pascalu
qaq [ Kaka Demona ]
Jsli chodzi o kursor:
zrob tak - napisz program ktory ma ci wypisywac liczby oznaczające poszczególne znaki - np.
program kursor;
uses crt;
var znak:char;
begin
repeat
if keypressed then
begin
znak:=readkey;
writeln (ord(znak));
end;
until znak='a';
readln;
end.
ten ord ktory zastosowalem wypisuje ci wartość liczbową każdego znaku. sam program wypisuje ci symol liczbowy kazdego znaku, dopoki nie nacisniesz litery 'a'.
75 - w lewo
77 - w prawo
72 - gore
80 - w dol
natomiast chr zamienia ci wartosc liczbowa na znak (przeciwienstwo ord):
a wiec jesli chodzi o przyklad z [1] to bedzie tak
If znak= chr(77) than cośtam;
a tak przy okazji - co piszesz?
Likfidator [ Konsul ]
program test;
uses crt;
var ch: char;
begin
clrscr;
ch:=readkey;
WriteLn('Nacisnij kursor w prawo');
while(ch<>#27) do
begin
ch:=readkey;
if(ch=#0) then
begin
ch:=readkey;
if (ch='M') then WriteLn('Zrobiles to!');
end;
end;
end.
Proszę bardzo:)
Mała uwaga, klawisze kursora mają podwójne kody ascii, kursor 'w prawo' ma ten sam kod co literka 'M', ale jest poprzedzony znakiem zera. Mówiąc wprost, czytamy znaki z klawiatury i jeśli odczytamy 0 to znaczy, że jest to klawisz specjalny i odczytując kolejny znak możemy się dowiedzieć, który to klawisz.
Ogon. [ półtoraken fechten ]
qaq -> miałem zrobić program który można wykorzystać w matematyce i który używa modułu graficznego.
No więc program w case of ma dwie opcje do wyboru:
1: wybierz "1" jesli chcesz liczyć wyznacznik macierz 3x3
2: wybierz "2" jesli chcesz ratować świat.
No i w opcji drugiej wykonujemy samobójczą misję w celu zabicia kosmicznego budyniu z planety Skyron z galaktyki Andromedy. Planowałem włączyć tutaj jeszcze muzyczkę z pc spekeara z mission impossible, ale chyba zostanie mi odpalenie pliku wav, bo komponować to ja za cholerę nie umiem ;)
...mam nadzieję, że się wybije z tłumu robiących zadanie liczące pole kwadratu z kolorowymi literkami ;)