Jump to content

... cores em modo texto em PASCAL


passarito
 Share

Recommended Posts

No seguimento do tópico, "Quantas cores tem o modo gráfico em Pascal?" venho apresentar algo mais acessivel.

Quando estamos em modo texto também podemos alterar o RGB das cores tal como no modo gráfico.

O único senão é que temos de usar uma função de 7 linhas. É escrita em Pascal mas está mais perto do Assembly do que do Pascal. e Esta função MUDA TUDO!

Para dar as cores verdadeiras terão de correr o programa maximizado.

@Thoga31, aí está o fogo de artificio do tópico do modo gráfico só que em modo de texto 🙂

(*
Autor: Passarito
Data.: 27/6/2012
*)

Program Text_RGB;

Uses CRT,DOS;

Const maxcor=64;

Var
 R,G,B:integer;
 Reg:registers;
 s:string;

Procedure MudaRGB(cor:word;verm,verd,azul:byte);
(* Muda a cor em VGA *)
begin
 reg.ah:=$10;
 reg.al:=$10;
 reg.bx:=cor;
 reg.dh:=verm;
 reg.ch:=verd;
 reg.cl:=azul;
 intr($10,reg);
end;


procedure excrevexyc(x,y,cor:integer; texto:string);
begin
 if not((x=0) and (y=0)) then gotoxy(x,y);
 textcolor(cor);
 write(texto);
end;

Begin
 clrscr;
 textbackground(0);
 mudargb(0,0,0,0);
 ExcreveXYC(0,0,1,'Ola ');
 ExcreveXYC(0,0,2,'mundo ');
 ExcreveXYC(0,0,3,'das ');
 ExcreveXYC(0,0,4,'cores!');
 ExcreveXYC(10,10,1,'ÛÛÛÛÛ - Mistura 1');
 ExcreveXYC(10,12,2,'ÛÛÛÛÛ - Vermelho - ');
 ExcreveXYC(10,14,3,'ÛÛÛÛÛ - Verde - ');
 ExcreveXYC(10,16,4,'ÛÛÛÛÛ - Azul - ');
 for b:=0 to maxcor div 4 do
   for g:=0 to maxcor div 2 do
     for r:=0 to maxcor do begin
       delay(5);
       mudargb(1,r ,g*2 ,b*4);
       mudargb(2,r ,0 ,0);
       mudargb(3,0 ,g*2 ,0);
       mudargb(4,0 ,0 ,b*4);
       str(r,s);
       s:=s+' ';
       ExcreveXYC(30,12,2,s);
       str(g*2,s);
       s:=s+' ';
       ExcreveXYC(27,14,3,s);
       str(b*4,s);
       s:=s+' ';
       ExcreveXYC(26,16,4,s);
       if keypressed then halt;
     end;
end.

Keep pushing & Have fun!

Link to comment
Share on other sites

Windows 7 e programas de texto em ecrã total não se dá muito bem... Aí o problema é do 7 e não do FPC.

De qualquer maneira, o FPC não gosta muito é do Regs, por causa da tal situação dos programas a 32 bits não conseguirem manipular convenientemente o hardware sem passar pela virualização do S.O. 🙂

A esse nível, o Borland está muito acima, desde que, é claro, seja usado num sistema operativo que o permita (Max WinXP).

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

thoga31,

O FreePascal tem muita coisa na unit 'dos' que está lá simplesmente por motivos de retrocompatibilidade com TurboPascal. No entanto, e por exemplo neste caso, tanto o tipo de dados 'registers' como a função 'intr' são traduzidas para essencialmente nada na compilação, porque não são suportadas... (essencialmente porque essas funções dirigem-se ao DOS (interrupts da BIOS, lol!) e não ao Windows, sistema no qual estás a correr o programa e para o qual estás a compilá-lo. Os programas do passarito é que estão a ser compilados para DOS e a correr num modo de compatibilidade para programas antigos, provavelmente).

Mas olha, experimenta dar uma olhadela na unit 'go32', função 'RealIntr' e no tipo de dados TRealRegs... Pode ser que saia daí algo bom, não sei (fiz apenas uma pesquisa no Google).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.