passarito Posted June 27, 2012 Report Share Posted June 27, 2012 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 More sharing options...
thoga31 Posted June 27, 2012 Report Share Posted June 27, 2012 Definitivamente não tenho sorte. As cores não mudam, o programa utiliza os valores predefinidos do 1, 2, 3 e 4 e parece não considerar as mudanças efectuadas no código tipo-asm :/ Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted June 27, 2012 Author Report Share Posted June 27, 2012 Tens de colocar isso em ecrã total. Link to comment Share on other sites More sharing options...
thoga31 Posted June 27, 2012 Report Share Posted June 27, 2012 Tens de colocar isso em ecrã total. 1) não é permitido porque não é suportado o modo de ecrã inteiro; 2) em que é que isso iria ajudar? 😛 Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted June 27, 2012 Author Report Share Posted June 27, 2012 é que o meu só funciona em ecra inteiro... faz assim, compila e corre o exe à parte em ecra inteiro! Pode ser que dê Link to comment Share on other sites More sharing options...
thoga31 Posted June 27, 2012 Report Share Posted June 27, 2012 Let me guess, como é com o FPC, não está a funcionar bem... Knowledge is free! Link to comment Share on other sites More sharing options...
nunopicado Posted June 27, 2012 Report Share Posted June 27, 2012 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 More sharing options...
pwseo Posted June 27, 2012 Report Share Posted June 27, 2012 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 More sharing options...
passarito Posted June 28, 2012 Author Report Share Posted June 28, 2012 No DOSBox funcionam todos! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now