Kezdőoldal » Számítástechnika » Programozás » Free Pascal CRT és WinCRT...

Free Pascal CRT és WinCRT unit probléma, mindkét unit kellene hogy a program helyesen működjön. Megoldás? (bővebben lent forráskóddal)

Figyelt kérdés

A WinCRT unit szükséges ahhoz, hogy a sound eljárás normális hangot adjon, ne csak pittyegjen, mint a CRT unit esetén.

Ha a programban a WinCRT unit-ot használom, akkor konzolban nem mennek a readkey és hasonló függvények, legalábbis nekem nem reagál.

Mit lehet tenni, hogy normál hangot adjon és még a billentyűk is működjenek?


A program működése:

felnyíl: 100 HZ csökkentés, lenyíl: 100 HZ növelés, bal nyíl: 10 HZ csökkentés, jobb nyíl: 10 HZ növelés, pagedown: 1000 HZ novelés, pageup: 1000 HZ csökkentés, szóközre elnémul a hang, esc: kilépés

Elismerem, hogy szebb lett volna definiálni konstansként a billetyűket, de most nekem az lenne a célom, hogy működjön a program.

Megoldás a problémára?


program Hang;

uses crt;

var

ch : char;

mennyi : longint;

begin

mennyi := 20;

repeat

ch := readkey;

if ch = #0 then

begin

ch := readkey;

case ch of

#72: begin

if mennyi-100 >20 then dec(mennyi,100) else mennyi:=20;

end;

#80: begin

if mennyi+100<8000 then inc(mennyi,100) else mennyi:=8000;

end;

#75: begin

if mennyi-10>20 then dec(mennyi,10) else mennyi:=20;

end;

#77: begin

if mennyi+10<8000 then inc(mennyi,10) else mennyi:=8000;

end;

#73: begin

if mennyi-1000<20 then mennyi:=20 else dec(mennyi,1000);

end;

#81: begin

if mennyi+1000>8000 then mennyi:=8000 else inc(mennyi,1000);

end;

' ': nosound;

end;

end;

sound(mennyi);

write(#13#10,mennyi,'HZ');

until ch=#27;

end.



2015. ápr. 29. 23:44
 1/5 ejbenjaro ***** válasza:

Tedd ki a soundot egy külön unitba és onnan hívd meg. Pl:

Unit msound;


Uses wincrt;


Interface


Procedure mysound(aHz: word);


Implementation


Procedure mysound(aHz: word);

Begin

Sound(aHz);

End;

End.


A saját programodba pedig meghívod:


Program zene;


Uses msound;


Begin

Mysound(500);

End.


De lehet, úgy is működik, ha mind a két unitot (crt, wincrt) felveszed a programodban és pl a soundra így hivatkozol: Wincrt.sound(500);

2015. ápr. 30. 05:58
Hasznos számodra ez a válasz?
 2/5 ejbenjaro ***** válasza:

Közben ki is próbáltam. Nem kell saját unittal trükközni. Nálam így működik:

program Hang;

uses crt, wincrt;

var

ch : char;

mennyi : longint;

begin

mennyi := 20;

writeln('Nyomj egy nyilat, vagy PgUp, PgDown. Kilepes ESC');

repeat

ch := crt.readkey;

if ch = #0 then

begin

ch := crt.readkey;

case ch of

#72: begin

if mennyi-100 >20 then dec(mennyi,100) else mennyi:=20;

end;

#80: begin

if mennyi+100<8000 then inc(mennyi,100) else mennyi:=8000;

end;

#75: begin

if mennyi-10>20 then dec(mennyi,10) else mennyi:=20;

end;

#77: begin

if mennyi+10<8000 then inc(mennyi,10) else mennyi:=8000;

end;

#73: begin

if mennyi-1000<20 then mennyi:=20 else dec(mennyi,1000);

end;

#81: begin

if mennyi+1000>8000 then mennyi:=8000 else inc(mennyi,1000);

end;

' ': wincrt.nosound;

end;

end;

wincrt.sound(mennyi);

write(#13#10,mennyi,'HZ');

until ch=#27;

end.

2015. ápr. 30. 07:48
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
Nagyon köszönöm, így működik a program. :-)
2015. ápr. 30. 09:10
 4/5 anonim ***** válasza:
Azokkal az elágazásokkal kezdjél már valamit, mert szörnyen ocsmány.
2015. ápr. 30. 09:34
Hasznos számodra ez a válasz?
 5/5 SimkoL ***** válasza:
100%

#72: begin

if mennyi-100 >20 then dec(mennyi,100) else mennyi:=20;

end;


helyett elég:

#72: if mennyi - 100 > 20 then Dec(mennyi, 100) else mennyi := 20;

mivel csak egy 'utasítás' van még ha az if-nek van else ága akkor is.

2015. ápr. 30. 09:51
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!