Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
-PacMan- - messages.pas

messages.pas

Caricato da:
Scarica il programma completo

  1. (*Nome unit:    messages*)
  2. (*Versione:             o.7-beta*)
  3. (*Licenza:              GNU GPL*)
  4. (*Rilascio:             03/09/2010*)
  5. (*Autore:               Francesco Marrone (alias Giarados)*)
  6. (*Descrizione:  questo modulo contiene una sola procedura che si occupa di visualizzare messaggi a video*)
  7.  
  8. unit messages;
  9.  
  10. interface
  11.  
  12.         {la procedura display stampa messaggi a video.
  13.         se autoexit è true allora si attende per pause millisecondi
  14.         se cover_bk è true allora il resto dello schermo viene offuscato}
  15.         procedure display(astring:string; autoexit:boolean; pause:smallint; cover_bk:boolean);
  16.        
  17. implementation
  18.  
  19. uses wingraph,wincrt;
  20.  
  21. {la procedura display stampa messaggi a video.}
  22.         procedure display(astring:string; autoexit:boolean; pause:smallint; cover_bk:boolean);
  23.         var
  24.                 bitmap:pointer;
  25.                 a,b:smallint;
  26.                 key:char;
  27.         begin
  28.                 {se la stringa non è eccessivamente lunga allora...}
  29.                 if not (length(astring)*11>getmaxx) then
  30.                 begin
  31.                         {fa uno screenshot di tutto lo schermo}
  32.                         getmem(bitmap,imagesize(0,0,getmaxx,getmaxy));
  33.                         getimage(0,0,getmaxx,getmaxy,bitmap^);
  34.                        
  35.                         {se cover_bk è vero allora lo schermo viene offuscato.
  36.                         i cicli for sottostanti sono di facile comprensione. eviterò di commentarli}
  37.                         if cover_bk then
  38.                                 for a:=0 to getmaxx do
  39.                                         for b:=0 to getmaxy do
  40.                                                 if (a mod 2 = 0) then
  41.                                                 begin
  42.                                                         if (b mod 2 <> 0) then
  43.                                                         begin
  44.                                                                 if getpixel(a,b)<>black then
  45.                                                                 putpixel(a,b,black);
  46.                                                         end;
  47.                                                 end
  48.                                                 else    begin
  49.                                                                         if (b mod 2 = 0) then
  50.                                                                         begin
  51.                                                                                 if getpixel(a,b)<>black then    putpixel(a,b,black);
  52.                                                                         end;
  53.                                                                 end;
  54.        
  55.                         {viene pulito lo schermo nell'area in cui deve comparire il messaggio}
  56.                         setviewport((getmaxx div 2)-((length(astring) div 2)+1)*11,(getmaxy div 2) - 10,(getmaxx div 2)+((length(astring) div 2)+2)*7,(getmaxy div 2) + 10,true);
  57.                         clearviewport;
  58.                         setviewport(0,0,getmaxx,getmaxy,false);
  59.                        
  60.                        
  61.                         {vengono disegnati 3 rettangoli che fanno da bordo al messaggio}
  62.                         setcolor(white);
  63.                         rectangle(-1+(getmaxx div 2)-((length(astring) div 2)+1)*11,(getmaxy div 2) - 11,1+(getmaxx div 2)+((length(astring) div 2)+2)*7,(getmaxy div 2) + 11);
  64.                         setcolor(red);
  65.                         rectangle(-2+(getmaxx div 2)-((length(astring) div 2)+1)*11,(getmaxy div 2) - 12,2+(getmaxx div 2)+((length(astring) div 2)+2)*7,(getmaxy div 2) + 12);
  66.                         setcolor(white);
  67.                         rectangle(-3+(getmaxx div 2)-((length(astring) div 2)+1)*11,(getmaxy div 2) - 13,3+(getmaxx div 2)+((length(astring) div 2)+2)*7,(getmaxy div 2) + 13);
  68.                        
  69.                         setcolor(white);
  70.                        
  71.                         {viene stampato a video il messaggio contenuto in astring}
  72.                         outtextxy(5+(getmaxx div 2)-(length(astring) div 2)*11,(getmaxy div 2) - 7,astring);
  73.                        
  74.                        
  75.                         key:=chr(32);
  76.                         if autoexit then delay(pause)   {se autoexit è true allora si attende per pause millisecondi}
  77.                                 else                                            {altrimenti si legge l'input da tastiera sino a quando assume un valore 32 (<>barra_spaziatrice)}
  78.                                         repeat
  79.                                                 if keypressed then key:=readkey;
  80.                                         until key<>chr(32);
  81.                        
  82.                         setcolor(getbkcolor);
  83.                         putimage(0,0,bitmap^,normalput);        {viene ripristinato lo schermo sottostante}
  84.                         freemem(bitmap);       
  85.                 end
  86.                 else writeln('Too long string!');               {se la stringa è troppo lunga allora viene restituito questo messaggio}
  87.        
  88.         end;
  89.  
  90. end.