passarito Posted June 23, 2012 at 11:41 AM Report Share #465099 Posted June 23, 2012 at 11:41 AM (edited) Boas a todos, Normalmente à pergunta feita no tópico respondiam-se as normais 16. Standarizadas sim, mas isso era como um pintor comprar uma caixa com 12 aguarelas e depois pintar um quadro! Um pintor mistura as cores para obter outras, assim também nós o podemos fazer misturando as cores primárias Vermelho, Verde e Azul. Sim estas são as cores primárias da luminusidade em que o preto é ausencia de cor e o branco a mistura das tres cores primárias ao contrario das cores pigmentadas. Mas isto dava um outro tópico noutro forum que não este! Seguindo, com o setrgbpalette podemos configurar qualquer das 16 cores que temos à disposição. Melhor, imaginem que em vez de terem 16 cores têm um array de 16 posições que podem colocar lá a cor que querem... BRUTAL, não? (como diz a minha filha) A titulo de exemplo deixo-vos abaixo o código de um programita que fiz em '98 para testar estas funcionalidades. Para alterarem as cores têm de carregar em R, G ou B até aparecer um asterisco na cor pretendida e depois carregar em + ou - para dar ou tirar a cor. Poderia ser muito melhorado, mas isso deixo-o a voçês 😉 Have fun! (* Autor: Pedro Estima Data.: 18/Dez/1998 *) Program RGB; uses Graph,crt; var r,g,b,Driver, Mode: Integer; scont,sr,sg,sb:string; caminho:string; s:char; Procedure Select_Cor; var cont:real; begin cont:=5 / 2; str(cont:10:5,scont); Outtextxy(10,10,scont); SetTextJustify(Centertext,Centertext); r:=32; g:=0; b:=8; setrgbpalette(1,r,g,b); setrgbpalette(2,r,0,0); setrgbpalette(3,0,r,0); setrgbpalette(4,0,0,b); setcolor(15); cont:=r+(g*64)+(b*(64*64))+0.5; str(cont:10:2,scont); OutTextXY(150,350,scont); str(r,sr); OutTextXY(550,135,'+ '+sr+' -'); str(g,sg); OutTextXY(550,185,'+ '+sg+' -'); str(b,sb); OutTextXY(550,235,'+ '+sb+' -'); S:=#0; repeat s:=upcase(readkey); case s of 'R':BEGIN setcolor(15); OutTextXy(550,110,'*'); repeat s:=readkey; setcolor(0); OutTextXY(550,135,'+ '+sr+' -'); OutTextXY(150,350,scont); case s of '+':if r+1=64 then r:=63 else inc(r); '-':if r-1=-1 then r:=0 else dec(r); end; setrgbpalette(1,r,g,b); setrgbpalette(2,r,0,0); str(r,sr); setcolor(15); OutTextXY(550,135,'+ '+sr+' -'); cont:=r+(g*64)+(b*(64*64))+0.5; str(cont:10:2,scont); OutTextXY(150,350,scont); until s in [#27,'G','g','B','b','R','r']; if s=#27 then s:=#0; setcolor(2); OutTextXy(550,110,'*'); END; 'G':BEGIN setcolor(15); OutTextXy(550,160,'*'); repeat s:=readkey; setcolor(0); OutTextXY(550,185,'+ '+sg+' -'); OutTextXY(150,350,scont); case s of '+':if g+1=64 then g:=63 else inc(g); '-':if g-1=-1 then g:=0 else dec(g); end; setrgbpalette(1,r,g,b); setrgbpalette(3,0,g,0); str(g,sg); setcolor(15); OutTextXY(550,185,'+ '+sg+' -'); cont:=r+(g*64)+(b*(64*64))+0.5; str(cont:10:2,scont); OutTextXY(150,350,scont); until s in [#27,'G','g','B','b','R','r']; if s=#27 then s:=#0; setcolor(3); OutTextXy(550,160,'*'); END; 'B':BEGIN setcolor(15); OutTextXy(550,210,'*'); repeat s:=readkey; setcolor(0); OutTextXY(550,235,'+ '+sb+' -'); OutTextXY(150,350,scont); case s of '+':if b+1=64 then b:=63 else inc(b); '-':if b-1=-1 then b:=0 else dec(b); end; setrgbpalette(1,r,g,b); setrgbpalette(4,0,0,b); str(b,sb); setcolor(15); OutTextXY(550,235,'+ '+sb+' -'); cont:=r+(g*64)+(b*(64*64))+0.5; str(cont:10:2,scont); OutTextXY(150,350,scont); until s in [#27,'G','g','B','b','R','r']; if s=#27 then s:=#0; setcolor(4); OutTextXy(550,210,'*'); END; end; until s=#27; end; begin Writeln('Indique o caminho para os drivers graficos: (c:\bp\bgi)'); write('> '); caminho:=''; readln(caminho); if caminho='' then caminho:='c:\bp\bgi'; Driver := Detect; { Put in graphics mode } InitGraph(Driver, Mode, caminho); if GraphResult <> grOk then Halt(1); setbkcolor(0); setrgbpalette(1,0,0,0); setrgbpalette(2,0,0,0); setrgbpalette(3,0,0,0); setrgbpalette(4,0,0,0); r:=0; g:=0; b:=0; SetFillStyle(1, 1); bar(100,100,300,300); SetFillStyle(1, 2); bar(500,100,600,125); SetFillStyle(1, 3); bar(500,150,600,175); SetFillStyle(1, 4); bar(500,200,600,225); Select_Cor; CloseGraph; end. Edited June 24, 2012 at 10:42 AM by passarito Link to comment Share on other sites More sharing options...
thoga31 Posted June 23, 2012 at 08:50 PM Report Share #465155 Posted June 23, 2012 at 08:50 PM Muito interessante, mas... Estranhamente, isto não está a produzir nenhuma cor quanto altero os valores... :/ Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted June 24, 2012 at 10:46 AM Author Report Share #465199 Posted June 24, 2012 at 10:46 AM Provavelmente estás a usar o Free Pascal.... No Borland Pascal funciona perfeitamente, depois experimentei no Free Pascal e não funciona! 😞 Vou enviar-te o programa compilado em Borland Pascal Link to comment Share on other sites More sharing options...
thoga31 Posted June 24, 2012 at 04:59 PM Report Share #465233 Posted June 24, 2012 at 04:59 PM Ahh, o velhinho mas excelente Borland Pascal 😄 Sim, recorri ao FPC, é o meu compilador de eleição: open-source, cheio de opções de compilação, relativamente fácil de utilizar, e apesar do IDE para Windows não ser o melhor, já estou tão habituado que começo como que a gostar dele 😛 Knowledge is free! Link to comment Share on other sites More sharing options...
nunopicado Posted June 24, 2012 at 06:16 PM Report Share #465243 Posted June 24, 2012 at 06:16 PM O IDE não é problema... 🙂 É um clone do Borland Pascal 7. O problema é, salvo erro, nos drivers graficos (BGI), que são diferentes no FPC. "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...
passarito Posted June 25, 2012 at 07:22 AM Author Report Share #465290 Posted June 25, 2012 at 07:22 AM Também pensei nisso, mas quando o experimentei no free pascal usei o BGI's do Borland pascal e não funcionou como deve de ser. Procurei os BGI's do Free pascal e não encontrei nada. .... A não ser que o FPC tenha uma interacção com windows diferente da do BP ?!? anw, @Thoga31, recebeste o executavel compilado em BP? funcionou bem? Link to comment Share on other sites More sharing options...
nunopicado Posted June 25, 2012 at 07:42 AM Report Share #465294 Posted June 25, 2012 at 07:42 AM Sim, tem... O Borland Pascal era apenas 16 bits, enquanto o FPC é de 32 bits. Logo aí faz diferença. Os BGI do BP não funcionam noo FPC. E pelos vistos, são pouco compativeis entre eles, mesmo usando o {$MODE TP} "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...
passarito Posted June 25, 2012 at 08:00 AM Author Report Share #465296 Posted June 25, 2012 at 08:00 AM No FPC que eu tenho 2.4.4 não encontrei BGI's e usei os da Borland através do caminho do programa. Link to comment Share on other sites More sharing options...
nunopicado Posted June 25, 2012 at 10:35 AM Report Share #465325 Posted June 25, 2012 at 10:35 AM (edited) Foi como eu. Acho que no FPC, os BGI são integrados. Talvez remodelando o programa para simplesmente usar o modo grafico, sem activar os BGI, seja uma opção, mas não testei! Edited June 25, 2012 at 10:36 AM by nunopicado "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...
passarito Posted June 25, 2012 at 11:03 AM Author Report Share #465332 Posted June 25, 2012 at 11:03 AM Eu ainda desconfio do IDE, isto é, correr o programa a partir do IDE. Vou fazer um teste, criar um EXE a partir do FPC e depois executá-lo a partir de uma janela de DOS. É que há algo de estranho quando se correr o programa a partir do IDE do FPC, o programa abre uma janela do modo gráfico integrado no windows, mas só funciona se a janela do IDE estiver activa. E isto deixa-me com a pulga atrás da orelha quanto ao IDE. Link to comment Share on other sites More sharing options...
nunopicado Posted June 25, 2012 at 12:02 PM Report Share #465342 Posted June 25, 2012 at 12:02 PM (edited) Isso já testei. Só os asteriscos é que aparecem a cores, e mal (muito escuros). O que era suposto aparecer com cores? Fiz um pequeno teste para as cores, sem usar o BGI. Quem quiser experimente isto para ver se "vê a luz"! 🙂 program Project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, Graph, SysUtils; {$R *.res} var x,y:word; gd, gm: SmallInt; PathToDriver : string; begin gd:=detect; gm:=0; PathToDriver:=''; InitGraph(gd,gm,PathToDriver); if GraphResult<>grok then halt; for x:=1 to 1024 do for y:=1 to 768 do begin SetRGBPalette(20,trunc(Sin(x))+y,trunc(sin(y))+x,trunc(sin(x+y))+x+y); PutPixel(x,y,20); end; Sleep(10000); CloseGraph; end. Edited June 25, 2012 at 12:48 PM by nunopicado Adicionado exemplo de cores... "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...
passarito Posted June 25, 2012 at 01:59 PM Author Report Share #465356 Posted June 25, 2012 at 01:59 PM Se colocares a cor no máximo eles ficam mais visiveis, mas não é nada disso que se pretende. Vou colocar isso na area de downloads logo à tarde Reparei que no FPC não tem a opção "Real mode Application" em compile\target Poderá ser por aí Link to comment Share on other sites More sharing options...
thoga31 Posted June 25, 2012 at 02:53 PM Report Share #465381 Posted June 25, 2012 at 02:53 PM (edited) @passarito, experimenta ver as opções de compilação do FPC na linha de comandos, são mais de 100. fpc -h Além disso, o FPC já não necessita das drivers BGI - isso é do tempo do Borland Pascal, e o procedimento InitGraph do FPC só mantém esse parâmetro por uma questão de compatibilidade, apesar de poder não funcionar devidamente. Aconselho-te a adoptares o FPC e adaptares ligeiramente o programa de modo a que funcione no século XXI 😉 Ah, recebi o teu programa, mas precisamente devido aos problemas Borland vs FPC, os símbolos saem todos trocados - por exemplo, quando carrego na tecla "\" aparece-me um "<" e coisas assim. EDIT: @nunopicado, nem o teu código compilava no FPC por causa da porcaria do ficheiro *.res 😛 Peço que passem a adaptar os códigos para FPC já que esses funcionam igualmente bem no Delphi ou no Lazarus. Claro que no PZim (ou no Borland) não funcionam devidamente. {$mode objfpc} program Project1; uses Graph, SysUtils; // falta adaptação aos ambientes Unix var x,y:word; driver, modus: SmallInt; begin DetectGraph(driver, modus); InitGraph(diver, modus, ''); if (GraphResult <> grok) then halt; for x:=1 to 1024 do for y:=1 to 768 do begin SetRGBPalette(20, trunc(Sin(x))+y, trunc(sin(y))+x, trunc(sin(x+y))+x+y); PutPixel(x,y,20); end; Sleep(10000); CloseGraph; end. E para acabar com o mistério de 2 dias, coloco aqui o resultado do programa do @nunopicado: Edited June 25, 2012 at 03:04 PM by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
nunopicado Posted June 25, 2012 at 03:10 PM Report Share #465383 Posted June 25, 2012 at 03:10 PM (edited) Isso não é Borland vs FPC, mas sim Microsoft 16 vs Microsoft 32. 🙂 O Windows "esqueceu-se" de configurar a pagina de codigos dos programas a 16bits, tens de o fazer manualmente... Já nao me lembro é onde! O FPC tem a possibilidade de usar os BGI da borland, ou outros que sejam compativeis, mas não trás ele proprio esses drivers. Modernices do opensource. 😄 O meu programa foi feito em Lazarus... 🙂 Ando com pouca paciencia para Text IDE... Agora, mistério de dois dias? Só pus isso há umas 3 ou 4 horas, não sou assim tão rapido! hehehehe Agora experimenta trocar a formula de calculo de cor nesse programa, e põe esta: SetRGBPalette(20,x,y,(x*y) mod 255); Welcome to the 80's! 😉 PS: Codigos do FPC a correr bem no Delphi? Grande fezada que tu tens! 😉 Edited June 25, 2012 at 03:11 PM by nunopicado "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...
thoga31 Posted June 25, 2012 at 03:23 PM Report Share #465386 Posted June 25, 2012 at 03:23 PM Isso não é Borland vs FPC, mas sim Microsoft 16 vs Microsoft 32. 🙂 O Windows "esqueceu-se" de configurar a pagina de codigos dos programas a 16bits, tens de o fazer manualmente... Já nao me lembro é onde! A evolução tem destas coisas, hoje em dia a computação a 16 bits é praticamente história para museus - actualmente estamos na era dos 64 bits 😉 O FPC tem a possibilidade de usar os BGI da borland, ou outros que sejam compativeis, mas não trás ele proprio esses drivers. Modernices do opensource. 😄 o FPC já não necessita das drivers BGI - isso é do tempo do Borland Pascal, e o procedimento InitGraph do FPC só mantém esse parâmetro por uma questão de compatibilidade, apesar de poder não funcionar devidamente. Agora, mistério de dois dias? Só pus isso há umas 3 ou 4 horas, não sou assim tão rapido! hehehehe O tópico é de há 2 dias - o mistério das cores tem 2 dias. Agora experimenta trocar a formula de calculo de cor nesse programa, e põe esta: SetRGBPalette(20,x,y,(x*y) mod 255); Welcome to the 80's! 😉 PS: Codigos do FPC a correr bem no Delphi? Grande fezada que tu tens! 😉 What do you mean? Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted June 25, 2012 at 03:24 PM Author Report Share #465387 Posted June 25, 2012 at 03:24 PM @Thoga31, o facto de carregares numa tecla e aparecer outra, não é do programa mas sim da tua janela janela de DOS que deve de estar a assumir uma configuração do teclado diferente da do Português. "Zipei" o programa fonte e compilado em BP7 bem como os BGI's, assim quem quizer já o pode experimentar https://www.portugal-a-programar.pt/files/file/36-rgb/ Link to comment Share on other sites More sharing options...
thoga31 Posted June 25, 2012 at 03:25 PM Report Share #465388 Posted June 25, 2012 at 03:25 PM @Thoga31, o facto de carregares numa tecla e aparecer outra, não é do programa mas sim da tua janela janela de DOS que deve de estar a assumir uma configuração do teclado diferente da do Português. Strange, é que isto só acontece com o teu programa 🙂 Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted June 25, 2012 at 03:30 PM Author Report Share #465390 Posted June 25, 2012 at 03:30 PM Então experimenta o seguinte.... abre uma janela de DOS experimenta a tecla, se funcionar, vai através dessa janela à pasta onde tens o programa e corre-o. Se mesmo assim não funcionar... troca de computador LOL Link to comment Share on other sites More sharing options...
nunopicado Posted June 25, 2012 at 03:48 PM Report Share #465394 Posted June 25, 2012 at 03:48 PM (edited) Não vai funcionar... 🙂 Muita gente desconhece, mas o windows tem duas linhas de comandos distintas. Uma é de 32 bits, e acedes executando o ficheiro cmd e outra é de 16 bits e acedes executando o ficheiro command, ou executando um exe a 16 bits (detecção automática). Ou seja, se executares o comando Command, terás as teclas todas desconfiguradas, se executares cmd irão estar bem. Como o programa do passarito é de 16 bits, o windows vai inicia-lo na linha de comandos a 16, e daí te dá as teclas mal "só no dele" - porque só testaste o dele a 16 bits. Experimenta sacar uns jogos antigos (tipo freeoldies.com ou coisa do genero) e executá-lo para ver o resultado! 😉 Entretanto fiz outro programa de teste. Não está aperfeiçoado visualmente, mas mostra todas as cores possíveis de reproduzir em Pascal. O resto mantém-se, altera-se só a zona dos ciclos FOR, que passam a ser 3: for r:=0 to 255 do for g:=0 to 255 do for b:=0 to 255 do begin SetRGBPalette(20,r,g,b); PutPixel(r+g,g+b,20); end; Aviso já que é lento a chegar ao destino. 🙂 Edited June 25, 2012 at 03:50 PM by nunopicado "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...
passarito Posted June 25, 2012 at 03:59 PM Author Report Share #465399 Posted June 25, 2012 at 03:59 PM (edited) @nunopicado, o programa corre perfeitamente em 32 bits, pois apliquei um patch ao Borland Pascal para ele compilar programas sem problemas para 32 bits Aliás, eu corro sempre a partir do cmd Edited June 25, 2012 at 04:00 PM by passarito 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