passarito Posted June 27, 2012 at 11:25 AM Report Share #465906 Posted June 27, 2012 at 11:25 AM 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 at 04:47 PM Report Share #466010 Posted June 27, 2012 at 04:47 PM 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 at 05:56 PM Author Report Share #466029 Posted June 27, 2012 at 05:56 PM Tens de colocar isso em ecrã total. Link to comment Share on other sites More sharing options...
thoga31 Posted June 27, 2012 at 06:28 PM Report Share #466034 Posted June 27, 2012 at 06:28 PM 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 at 06:33 PM Author Report Share #466037 Posted June 27, 2012 at 06:33 PM é 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 at 06:42 PM Report Share #466040 Posted June 27, 2012 at 06:42 PM 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 at 10:35 PM Report Share #466055 Posted June 27, 2012 at 10:35 PM 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 at 11:14 PM Report Share #466063 Posted June 27, 2012 at 11:14 PM 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 at 07:27 AM Author Report Share #466076 Posted June 28, 2012 at 07:27 AM 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