web-archive-net.com » NET » C » CLUBTILT.NET

Total: 177

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • club TILT
    AreaMouseDown Sender TObject Button TMouseButton Shift TShiftState X Y Integer begin Kx X Ky Y Lk 1 end A seguir bastou monitorar o movimento do mouse pelo evento OnMouseMove procedure TForm1 AreaMouseMove Sender TObject Shift TShiftState X Y Integer begin if Lk 1 then begin if X Kx then Area Left Area Left X Kx else Area Left Area Left Kx X if Y Ky then Area Top Area Top Y Ky else Area Top Area Top Ky Y end end A coisa é bem simples conhecendo o tamanho do deslocamento e seu sinal mais ou menos podemos transportar essa diferença para as propriedade Left e Top da TImage Assim o cursor do mouse estará sempre sobre o mesmo ponto da TImage enquanto ela muda de lugar Fica parecendo que ela grudou no cursor Não corremos o risco de perder o evento OnMouseMove pois o cursor nunca sai de dentro da figura não importa quão grande seja o deslocamento Para desligar o arrastão basta zerar a variável Lk no evento OnMouseUp procedure TForm1 AreaMouseUp Sender TObject Button TMouseButton Shift TShiftState X Y Integer begin Lk 0 end Viu só como é fácil Mas eu queria mais criar uma alça para redimensionar a figura A solução foi aplicar essa mesma técnica num objeto que serviria como alça Usei um TShape ao qual dei o nome de Alca É claro que dimensionei o de tal forma a se parecer um uma alça padrão do Windows No final ele foi colocado no canto inferior direito da TImage Lembrando que o TShape precisa estar sobre a TImage para que tudo funcione direitinho Pa ra ligar e desligar o redimensionamento basta usar os mesmo eventos OnMouseDown e OnMouseUp da TImage Com isso economizamos digitação O evento OnMouseMove do TShape Alca ficou assim procedure TForm1 AlcaMouseMove

    Original URL path: http://www.clubtilt.net/club/tecs/tec04.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    original Com isso a figura adquire um contorno preto que lhe confere muito mais profundidade visual O passo seguinte é juntar tudo num único bloco de programação Delphi Definido o formulário e um botão para ativar a impressão das imagens o corpo principal da função será o responsável por carregar as figuras shapes e preparar a impressão das mesmas Cria os shapes e carrega os Shape1 TBitmap Create Shape2 TBitmap Create Shape3 TBitmap Create Shape1 LoadFromFile MOTO 0 BMP Shape2 LoadFromFile MOTO 1 BMP Shape3 LoadFromFile ARV 0 BMP Agora que as figuras foram carregadas para a memória do programa definimos os respectivos Handles de manipulação e imprimimos as árvores Cria os Handles Hvid Form1 Canvas Handle Hshp Shape3 Canvas Handle Imprime as árvores na posição 0 0 do formulário BitBlt Hvid 0 0 190 91 Hshp 0 0 SRCCOPY Hshp Shape2 Canvas Handle Note o parâmetro SRCCOPY no final da instrução BitBlt Ele define uma cópia sobreposta normal A seguir definimos o Handle da máscara Veja ao lado como ficará a imagem após a impressão da máscara Usa a máscara para limpar a área de impressão BitBlt Hvid 10 45 175 45 Hshp 0 0 SRCAND O destaque aqui fica por conta do parâmetro SRCAND Ele indica para a função BitBlt que a cópia da figura deve ser feita usando a instrução lógica AND Numa operação AND entre dois bits basta que um deles seja zero para que o resultado seja também zero O padrão de bits gerado pela cor preta corresponde em binário a 000000000000000000000000b e o branco a 111111111111111111111111b Logo tudo o que for preto na máscara será apagado na transferência e tudo que for branco será mantido intacto O passo seguinte é usar a figura do motoqueiro preparada com um fundo preto Aqui o parâmetro de

    Original URL path: http://www.clubtilt.net/club/tecs/tec05.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    esquerdo do mouse sobre a barra de título BarCor O evento usado é BarCorMouseDown begin Lx X Ly Y Lk 1 e nd Lk sendo igual a 1 indicará para a rotina que criaremos no evento BarCorMouseMove que o mouse está sendo movido com o botão pressionado arrastamento Veja como fica esse evento begin if Lk 1 then begin if X Lx then PanCor Left PanCor Left X Lx if X Lx then PanCor Left PanCor Left Lx X if Y Ly then PanCor Top PanCor Top Y Ly if Y Ly then PanCor Top PanCor Top Ly Y end end Assim PanCor é deslocada na mesma proporção que o movimento do mouse Como todos os objetos de PanCor se movem também o cursor estará sempre dentro da área da barra de título e portanto monitorará o movimento não importando para onde levemos o rato Para desligar o deslocamento ao soltar o botão do mouse basta desligar a variável Lk evento BarCorMouseUp begin Lk 0 end Moleza não é mesmo Então vamos ver agora um outro detalhe como lidar com cores Sabemos que as cores no Windows são tratadas em seu formato True Color ou seja com todas as componente RGB convertidas para um único valor do tipo longint A faixa válida para esse tipo de variável vai de 2 147 483 648 a 2 147 483 647 Bonito de se ver mas totalmente impraticável para lidarmos com cores Senão vejamos a cor branca possui o valor 16 777 215 e o preto possui o valor 0 Todas as outras 16 milhões de tonalidades então nesta faixa Como identificar cada uma delas Simples cada cor é composta por três valores que variam de 0 a 255 A variável longint possui quatro bytes de tamanho Os três primeiros bytes indicam contém

    Original URL path: http://www.clubtilt.net/club/tecs/tec06.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    mais simples possível sobreposição total de elementos A cada movimento da mensagem um caracter à esquerda é descartado e um apontador reinicia a impressão A velocidade de impressão é determinada pelo intervalo de ocorrência do evento OnTimer Gastamos um pouco mais de processamento para a correta identificação dos caracteres acentuados afinal a língua mãe precisa ser respeitada e como não fomos nós os inventores do computador A seguir mostro apenas a procedure principal do evento OnTimer que é a responsável pela animação do display procedure TForm1 Timer1Timer Sender TObject var HTelao HLetras HGaba HBitmap Loc byte Carac byte begin if Status 0 then begin HTelao Telao Canvas Handle HLetras Letras Canvas Handle HGaba Gaba Canvas Handle Define os Handles das imagens for Loc 0 to 18 do begin São 19 caracteres na área de display BitBlt HTelao Loc 32 2 2 32 48 HGaba 0 0 SRCCOPY Primeiro apaga a área de um caracter Carac 0 if Msg Pos Loc then Carac 1 if Msg Pos Loc then Carac 2 if Msg Pos Loc then Carac 3 if Msg Pos Loc then Carac 4 if Msg Pos Loc then Carac 5 if Msg Pos Loc then Carac 6 if Msg Pos Loc then Carac 7 if Msg Pos Loc then Carac 8 if Msg Pos Loc then Carac 9 if Msg Pos Loc then Carac 10 if Msg Pos Loc then Carac 11 if Msg Pos Loc then Carac 12 if Msg Pos Loc then Carac 23 if Msg Pos Loc then Carac 24 if Msg Pos Loc then Carac 25 if Msg Pos Loc A and Msg Pos Loc Z then Carac ord Msg Pos Loc 39 if Msg Pos Loc 0 and Msg Pos Loc 9 then Carac ord Msg Pos Loc 35 if Msg Pos Loc Ç

    Original URL path: http://www.clubtilt.net/club/tecs/tec07.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    feito Na verdade tudo não passava de uma tela sobreposta a outra Nas versões para Windows e principalmente no projeto da TILT disquete a coisa se complicou um pouco Foi preciso lançar mão de uns truquezinhos que mostraremos agora Preste atenção como as coisas se resolvem de uma maneira prá lá de original A idéia ainda é a mesma apresentar uma mão segurando um disquete e ao clicar sobre o mesmo abrir a portinhola e executar o programa Toda a nossa solução se baseia na função BitBlt que já foi vista aqui na TILT online inúmeras vezes e na correta criação das imagens Partimos da figura acabada como por exemplo a que se segue O primeiro passo é criar uma máscara para ela A seguir criamos a imagem da portinhola aberta não esquecendo neste caso nem do arranhão que a unha irá provocar Essas figuras são gravadas como BMP e depois carregadas num formulário como TImages com os respectivos nomes de Mao Masc e Porta Somente a porta deve estar com o atributo Visible setado como False O truque aqui é colocar a TImage da Mão nas coordenadas 0 0 do Form1 Isso é fundamental pois a portinhola apesar de invisível deverá estar exatamente na sua posição final e sobre a TImage Mão No evento OnCreate do Form1 escrevemos o seguinte código var Tela Fig1 Fig2 HBitmap begin Fazemos o Form1 do tamanho da figura da mão Form1 Width Mao Width Form1 Height Mao Height Na lateral esquerda da tela Form1 Left 0 Na metade da altura Form1 Top Screen Height Mao Height div 2 Criamos um handle para a tela Tela CreateDc Display nil nil nil Criamos um handle para a mão Fig1 Mao Canvas Handle Criamos um handle para a máscara Fig2 Masc Canvas Handle Montamos na máscara

    Original URL path: http://www.clubtilt.net/club/tecs/tec08.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    as frases em tempo de execução O problema é ter acesso ao desenho da letra à sua posição na frase e ao espaçamento proporcional que cada uma possui Resolvendo de forma rápida esta questão decidi fazer o seguinte crio um TLabel com a propriedade AutoSize em True e uso a propriedade Caption para definir letra a letra a ser impressa da frase estabelecida em Edit1 Text Ao passar cada letra de Edit1 Text para Label1 Caption as propriedades Width e Height do TLabel irão me fornecer a largura e altura da letra considerando que Label1 já esteja com as propriedades Font devidamente ajustadas para letra desejada for Tmh 1 to length Edit1 Text do begin Label1 Caption Edit1 Text Tmh BMPdaletra Showletra end Para gerar o exemplo usei uma fonte Ariston e corpo 48 Cada um seleciona a fonte que desejar ou então crie uma caixa de diálogo para escolher entre as fontes instaladas durante a execução do programa Resolvido o problema do tamanho da letra precisamos agora obter o desenho dela bit a bit A rotina só irá acionar o laser se o ponto da letra for impresso Na parte em branco da imagem o raio fica desligado Novamente usei o que já existe Criei uma TImage que é ajustada para as mesmas dimensão da TLabel e que recebe o desenho da letra com uma impressão direta via função Canvas TextOut procedure BMPdaletra begin with Form1 do begin Image1 Canvas Font Label1 Font Image1 Width Label1 Width Image1 Height Label1 Height Image1 Canvas TextOut 0 0 Label1 Caption end end Tendo então a matriz de impressão da letra agora basta varrer linha a linha ponto a ponto a TImage da letra e decidir de o raio é acionado ou não procedure Showletra var Orig Dest HBitmap Tmx Tmy integer begin Orig Tela Canvas Handle Dest Form1 Alvo Canvas Handle Form1 Alvo Canvas Pen Color clRed for Tmy 0 to Form1 Image1 Height 1 do begin for Tmx 0 to Form1 Image1 Width 1 do begin if Form1 Image1 Canvas Pixels Tmx Tmy clBlack then begin Tela Canvas Pixels Px Tmx Py Tmy clLime BitBlt Dest 0 0 500 200 Orig 0 0 SRCCOPY Form1 Alvo Canvas MoveTo 250 200 Form1 Alvo Canvas LineTo Px Tmx Py Tmy Form1 Alvo Repaint end end end BitBlt Dest 0 0 500 200 Orig 0 0 SRCCOPY Px Px Form1 Image1 width end As variáveis globais Px e Py irão conter a posição de impressão das letras na TImage final ou seja aquela que será mostrada ao usuário Como a impressão envolve uma grande quantidade de operações como uma transferência completa da TImage final para o vídeo e outros tantos processamentos internos não houve necessidade de criar nenhuma rotina de retardamento da impressão Mas como cada computador é um computador diferente pode ser que para você a rotina esteja muito rápida ou muito lenta Daí é só inserir o conjunto todo dentro de uma estrutura controlada por um evento OnTimer e ajustar o

    Original URL path: http://www.clubtilt.net/club/tecs/tec09.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    aberto são raras as situações onde o jogador não vê determinadas partes deste universo por estarem encobertas por outros objetos Muitos jogadores chamam a este estilo de jogo de chão inclinado Listar aqui os jogos atuais que se valem desta estrutura iria consumir todo o nosso espaço só com os nomes Apenas como registro lembro que os mais famosos além é claro do tradicional SimCity temos atualmente o Warcraft Diablo Ages of Empire um dos mais recentes etc O que talvez você não saiba é que esse tipo de estrutura é extremamente simples de ser construída O maior trabalho fica mesmo por conta da criação gráfica e da arte dos elementos O que vou mostrar nesta matéria é um dos métodos que pode ser usado para a montagem do mundo definido para um jogo qualquer Classificamos como mundo um cenário estruturado por completo em um dado momento por exemplo numa fase A base de todo esse mecanismo é definir uma matriz de elementos ou objetos que irá determinar o que tem e o que não tem em cada metro quadrado do mundo É claro que não precisa ser necessariamente metro Isso é apenas uma referência Então lápis e papel na mão digo Delphi carregado vamos montar a parte dos objetos tomando como ponto de partida um mundo baseado numa matriz de 10 por 10 células Cada célula pode conter um objeto No caso usarei apenas cubos que formarão uma espécie de lego digital ei outra idéia muito interessante para este tipo de construção um programa educativo para a criançada construir coisas como o pequeno arquiteto feito com blocos de madeira implementation R DFM var Blocos array 0 9 0 9 of byte Aqui está a matriz principal onde definiremos a existência ou não dos cubos objetos Nosso mundo é visualizado através de uma TImage que já possui um diagrama das células procedure MontaMundo var Lin Col PosL PosC integer begin ApagaCursor HTel Form1 Image1 Canvas Handle for Lin 0 to 9 do begin for Col 0 to 9 do begin if Blocos Lin Col 0 then begin case Blocos Lin Col of 1 HFig Form1 Cubo1 Canvas Handle 2 HFig Form1 Cubo2 Canvas Handle 3 HFig Form1 Cubo3 Canvas Handle 4 HFig Form1 Cubo4 Canvas Handle 5 HFig Form1 Cubo5 Canvas Handle end PosL Lin 10 31 30 Col 10 PosC Col 20 181 Lin 20 BitBlt HTel PosC PosL 40 41 HFig 40 0 SRCAND BitBlt HTel PosC PosL 40 41 HFig 00 0 SRCPAINT end end end Form1 Image1 Repaint end A montagem do mundo ocorre dentro de dois loopings colunas linhas onde cada byte é testado em relação a seu conteúdo Se o valor encontrado for zero então na célula correspondente não existe nada Se o valor estiver entre 1 e 5 inclusive então naquela célula existe um cubo Os cubos são definidos cada um em uma TImage distinta que servirá de matriz para a impressão na TImage principal Cada TImage de cubo já carrega consigo a

    Original URL path: http://www.clubtilt.net/club/tecs/tec10.htm (2016-04-30)
    Open archived version from archive

  • club TILT
    ainda se manterem dentro da estrutura retangular mostrou se alí que poderíamos ter botões displays controles deslizantes etc etc etc e que esses controles não perdiam em eficiência para os componentes normais do Windows Ao contrário tornavam os programas mais bonitos mais funcionais e com um estilo gráfico marcante Um dos destaques dessa fase inicial e que pode ser encontrado até hoje é o Kay Krause que produziu o primeiro software de uso gráfico que literalmente mudou o conceito de janela quadrada do Windows Foi é claro considerado louco esquisito e um monte de outras coisas e seus programas da série KPT Kay s Power Tools passaram a sofrer de uma relação amor ódio por parte dos usuários Mas o tempo passou novas experiências foram surgindo e hoje já podemos encontrar aqui e alí programas que escapam da camisa de forma que o padrão visual do Windows tenta impor O próprio Key Krause vez por outra ensaia vôos mais arriscados Podemos então dividir em dois tipos esses programas aqueles que apesar de se mostrarem diferentes ainda se mantém dentro da estrutura retangular das janelas e aqueles de extrapolam até mesmo esses limites Dos primeiros apresento imagens de players um de música e outro de vídeo mpeg Do segundo tipo tenho dois exemplos fantásticos um do Key 7 uma ferramenta de aplicação de efeitos sob imagens que extrapola tudo o que é mais sagrado na programação Windows e um incrível player de arquivos VQF que por sí só já constitui uma nova tendência em termos de arquivo de sons músicas digitalizadas Só esses poucos exemplos já dariam cada um uma matéria extensa mas por hora ficaremos apenas nas imagens pois o propósito aqui é outro Na verdade esta matéria nasceu de uma questão levantada na lista de discussão da TILT onde um leitor perguntou exatamente da possibilidade de sair das janelas na confecção de um jogo Aqui no club TILT foi apresentado há algum tempo uma matéria onde se mostrava como no projeto editorial da TILT disquete tínhamos feito uma figura de abertura muito especial Tratava se de uma mão segurando um disquete e ao clicar sobre o mesmo o programa principal era acionado Antes porém o disquete abria a sua capa protetora numa animação feita com duas imagens O mais interessante é que a cada nova edição uma mão diferente era usada para segurar o disquete Embora a solução que criamos para o caso dos disquetes envolva apenas BitBlt e máscaras não é uma solução perfeita Tivemos que pesquisar um pouco até encontrar uma resposta mais adequada E ela surgiu de um recurso especial do Windows e por tabela do ambiente gráfico chamado de região Uma região nada mais é do que uma ára onde o sistema operacional permite que os aplicativos e ele mesmo escrevam plotem gráficos pixels É em essência o retângulo característico das janelas porém não precisa se necessariamente Exprimente num form novo criar um botão e nele escrever o seguinte processamento var hR THandle begin cria

    Original URL path: http://www.clubtilt.net/club/tecs/tec11.htm (2016-04-30)
    Open archived version from archive