[program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

[program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby DarkByte » 19 Jan 2010, 09:28

Program exemplu


Lectia 3 (din tutorialele de Pascal)


Acesta este un exemplu de program (mic) care arata o parte din potentialul primelor trei tutoriale de Pascal postate pana in acest moment.

Creat si testat doar pe Borland Pascal 7.0, deci sa nu va aud ;))

Aici e codul:
  1. uses crt;
  2. const spaced = '    ';
  3.       select = '  * ';
  4. var c: char;
  5.     sel: integer;
  6. begin
  7.   clrscr;
  8.   c := #0;
  9.   sel := 1;
  10.   {afisam meniul initial}
  11.   TextColor(Yellow);
  12.   TextBackground(Blue); {galben pe albastru pentru optiunea selectata}
  13.   WriteLn(select, '1. BitCell.info');
  14.  
  15.   TextColor(LightGray);
  16.   TextBackground(Black);
  17.   WriteLn(spaced, '2. a doua optiune'); {gri deschis pe negru pentru restul}
  18.   WriteLn(spaced, '3. a treia optiune');
  19.   WriteLn(spaced, '4. a patra optiune');
  20.   WriteLn(spaced, '5. a cincea optiune');
  21.   WriteLn(spaced, '6. a sasea optiune');
  22.   WriteLn(spaced, '7. a saptea optiune');
  23.   WriteLn(#13#10, 'Press Esc to Exit ...');
  24.  
  25.   repeat
  26.     c := ReadKey; {asteptam o tasta}
  27.     case c of
  28.       #0:          {daca e tasta cu cod extins}
  29.         begin
  30.           c := ReadKey; {citim codul extins al tastei}
  31.           case c of
  32.             #72:  {0 - 72 = codul tastei sageata sus}
  33.               begin
  34.                 if sel > 1 then {nu putem selecta 0 sau mai mic}
  35.                   sel := sel - 1;
  36.               end;
  37.             #80:  {0 - 80 = codul tastei sageata jos}
  38.               begin
  39.                 if sel < 7 then {nu putem selecta mai mult de 7}
  40.                   sel := sel + 1;
  41.               end;
  42.             else writeln('0 - ', ord(c));
  43.           end;
  44.           clrscr;
  45.  
  46.           WriteLn(spaced, '1. BitCell.info');
  47.           WriteLn(spaced, '2. a doua optiune');
  48.           WriteLn(spaced, '3. a treia optiune');
  49.           WriteLn(spaced, '4. a patra optiune');
  50.           WriteLn(spaced, '5. a cincea optiune');
  51.           WriteLn(spaced, '6. a sasea optiune');
  52.           WriteLn(spaced, '7. a saptea optiune');
  53.           WriteLn(#13#10, 'Press Esc to Exit ...');
  54.           GotoXY(1, sel);
  55.  
  56.           TextColor(Yellow);
  57.           TextBackground(Blue);
  58.           case sel of
  59.             1: WriteLn(select, '1. BitCell.info');
  60.             2: WriteLn(select, '2. a doua optiune');
  61.             3: WriteLn(select, '3. a treia optiune');
  62.             4: WriteLn(select, '4. a patra optiune');
  63.             5: WriteLn(select, '5. a cincea optiune');
  64.             6: WriteLn(select, '6. a sasea optiune');
  65.             7: WriteLn(select, '7. a saptea optiune');
  66.           end;
  67.           TextColor(LightGray);
  68.           TextBackground(Black);
  69.         end;
  70. {      else WriteLn(ord(c));} {comentat pentru a nu afisa codul tastei apasate}
  71.     end;
  72.  
  73.   until (c = #27); {caracterul cu codul ASCII 27 corespunde tastei Esc}
  74.                    {deci folosim tasta Esc pentru a iesi din program}
  75. end.


Niste explicatii:
  • uses crt; - este vorba de biblioteca (unit) de functii si proceduri care faciliteaza lucrul in modul text in Pascal. Daca linia asta lipseste nu veti putea folosi o parte din functiile si procedurile de prin program.
  • ClrScr - (clear screen) sterge orice text de pe ecran si readuce culorile de afisare la valorile predefinite.
  • TextColor - seteaza culoarea textului (in modul text). Definita in unitul CRT.
  • TextBackGround - seteaza culoarea fondului (in modul text). Definita in unitul CRT.
  • ReadKey - asteapta apasarea unei taste si returneaza caracterul apasat (nu "prinde" taste gen Ctrl, Shift, CapsLock, etc). Daca tasta are cod extins (tastele functionale, sagetile, etc), atunci va returna 0 si va trebui ca functia ReadKey sa fie apelata din nou pentru a primi codul extins al tastei.
  • GotoXY - seteaza pozitia cursorului de text. Determina locul de pornire pentru urmatoarea afisare.

Screenshot-uri din timpul rularii programului:
meniu pascal

meniu text


Surse si executabil -

Sper sa va placa :)

Daca aveti intrebari sau nelamuriri, puteti intreba aici.
7p / 1 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby andreiandreiq » 05 Oct 2010, 14:48

Am o intrebare :D, cum faci ca atunci cand selectezi o optiune din meniu sa fac ceva.

Ex: merg pe optiunea 1. Bitcell.info, apas Enter, si sa imi apara de ex: "Bun venit pe Bitcell.info" ?

:-?

Mersi anticipat.
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby DarkByte » 05 Oct 2010, 14:55

Vezi acolo, in cod, unde apar " #0 ", " #72 " si " #80 " ? Case-ul ala ?

Adaugi acolo o "ramura" pentru " #13 " (pe acelasi nivel cu " #0 " ... atentie mare) si scrii ce cod vrei. Daca nu cunosti instructiunea case, arunca un ochi pe la instructiunile conditionale.

Evident, dupa ce ai prins un Enter, trebuie sa verifici pe ce optiune esti - in codul meu, variabila sel contine aceasta informatie.

Bafta

P.S. Enter are, de fapt, doua coduri : #13#10. E de ajuns, totusi, primul cod, pentru ce ai nevoie aici. Al doilea, in acest caz, va fi ignorat.
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby bogdana » 28 Nov 2010, 14:50

Am incercat sa modific programul tau pentru a reusi sa fac programul meu, dar nu am reusit...
Nu reusesc sa selectez o optiune din meniu.

Ma poti ajuta, te rog?
0,0p / 0 votes
Niciodata nu e prea tarziu sa devi ceea ce ai fi putut sa devi!
User avatar
bogdana
 
Joined: 28 Nov 2010
Status: 0

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby DarkByte » 28 Nov 2010, 14:50

Te-as ajuta, dar nu stiu cu ce. Arata-mi ce-ai facut si te ajutam cu tot ce putem :)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby bogdana » 28 Nov 2010, 20:28

Image
Incerc sa apelez funtile aduna si scad din meniu
0,0p / 0 votes
Niciodata nu e prea tarziu sa devi ceea ce ai fi putut sa devi!
User avatar
bogdana
 
Joined: 28 Nov 2010
Status: 0

Re: [program]Tutorial Pascal - Lectia 3 - Meniu interactiv text

Postby DarkByte » 28 Nov 2010, 20:50

Eh, sa le luam in ordine:

1. Cand ziceam sa ne arati ce-ai facut, nu ma refeream la un screen-shot cu o bucata din program. Ma refeream la codul programului - ca text - si complet. Cu o imagine a unei bucati de cod (in care totul pare bine) nu te pot ajuta.

2. Aparent, e ok codul in ceea ce priveste apasarea lui Enter si apelarea functiilor "Aduna" si "Scad". Cu toate astea, nu am ce sfaturi sa-ti dau pentru ca, desi ai deja doua posturi, nu ai specificat care este problema. Si eu am niste probleme cu Titan Quest (serios !), ma poti ajuta ?

3. Am o banuiala ca indexul optiunii selectate nu ajunge la valorile care le vrei tu ... rezulta ca atunci cand apesi Enter programul nu stie ca trebuie sa adune /scade - dar e doar o banuiala.

Bafta
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136


Return to Tutoriale Pascal

Who is online

Users browsing this forum: No registered users and 0 guests