domingo, 5 de maio de 2013

Rolador de dados. Free de Livre e Free de Grátis...

Para os aficionados por RPG, para os que gostam, para os que são apenas curiosos e gostariam de ter seu próprio rolador de dados...

Criei um programa para rolar dados, qualquer tipo de dados, em object pascal (Lazarus) basta dizer o número de lados, quantas vezes jogar e ele dá a relação de todas as jogadas e o resultado final somado.

Simples, prático... Mas tem um porém...

Apesar de distribuir o programa em binário e os seus fontes, só compilei para Linux, quem usa o Windows, desculpe... Compre o Delphi, aprenda a programar, estude o código faça e compile o seu rolador, mas cuidado... Sabe lá se o Windows acha que "seu" rolador de dados é pirataria ou quem sabe tem um vírus dentro do código...

Ah para os Linuxusers... Divirtam-se...

 link removido.


A propósito, não incluí a licença, mas... É livre tipo GNU/GPL, ok.

Seja Livre... Use Linux

sexta-feira, 3 de maio de 2013

Lazarus - Criando relatórios com FortesReport

Para a criação de relatórios, o Lazarus já trás o componente LazReport, no entanto ele precisa ser instalado no IDE. Para fazer a instalação do pacote, acesse o menu Package -> Open package file (.lpk). Localize o diretório de instalação do Lazarus e na pasta components abra lazreport e depois source. Abra o pacote lazreport.lpk, clique em Compile e depois em Install. Como já sabemos isso irá recompilar o IDE. Depois de inicializado novamente estará disponível a aba LazReport. Leia aqui um tutorial básico sobre o LazReport.
No entanto queremos mostrar uma alternativa ao LazReport. Por essa razão, vamos apresentar neste artigo o FortesReport. Para quem conhece o QuickReport, que fazia parte do Delphi, não terá dificuldade de desenvolver com esse componente. Baixe o pacote aqui e instale. Os procedimentos são semelhantes aos que mostramos acima. Você terá uma nova aba chamada Fortes Report.


Conectando o banco de dados

O primeiro passo para criar a aplicação é fazer a conexão com o banco de dados. Vamos usar o SQLite e o ZeosLib. O banco de dados será o mesmo já usado em exemplos anteriores. Selecione a aba Zeos Access e coloque um TZConnection no Data Module. Defina a propriedade Database com o caminho e o nome do arquivo do banco de dados. Na propriedade Protocol escolha sqlite-3.
Agora coloque um TZReadOnlyQuery da mesma aba. Na propriedade Connection escola o TZConnection anterior. Na propriedade SQL digite SELECT * FROM CIDADE ORDER BY NOME. Localize a aba Data Access e coloque um TDataSource no Data Module. Na propriedade DataSet selecione o TZReadOnlyQuery. Para que possamos visualizar uma prévia do relatório deixe o banco conectado e a Query aberta. Queremos criar um relatório com a seguinte aparência:


Ou seja, mostraremos as cidades em ordem alfabética e a cada letra inicial nova ela será impressa destacando um novo grupo de cidades.
A aplicação deverá ter dois forms. Um onde será criado o relatório, e outro que chamará o primeiro. Assim, se a aplicação já possui um form, adicione o segundo. Nosso trabalho será todo efetuado em cima do segundo form.
Selecione a aba Fortes Report e coloque um TRLReport no form. Esse componente é como se fosse a folha de papel e possui um quadriculado para facilitar o desenho. No Inspetor de Objetos expanda a propriedade AllowedBands e coloque em True as opções btColumnHeader, btDetail e btHeader. O componente trabalha com bandas e isso define quais as bandas que são permitidas no relatório. Definimos que nosso relatório terá um cabeçalho de página (btHeader), um cabeçalho de coluna (btColumnHeader) e uma banda de detalhe (btDetail). Na propriedade DataSource selecione o TDataSource colocado no Data Module anteriormente.
Agora coloque um TRLBand. Defina a propriedade BandType como btHeader. Aumente a altura da banda e coloque um TRLLabel sobre a TRLBand. Defina a propriedade Caption como Relatório de Cidades. Na propriedade Align selecione faCenter, para centralizar o rótulo na banda. Expanda a propriedade Font e defina Size como 14, por exemplo. Coloque um TRLSystemInfo no lado esquerdo da banda. Na propriedade Info selecione itDate. Isso mostrará a data atual na banda. Coloque outro TRLSystemInfo, este no lado direito da banda e defina a propriedade Info como itPageNumber. Isso mostra o número da página
Coloque outro TRLBand e defina BandType como btColumnHeader. Coloque dois TRLLabel sobre esta e defina as propriedades Caption como ID e Nome respectivamente.
Como desejamos agrupar as cidades precisamos de um TRLGroup. Coloque um componente desses. Expanda AllowedBands e defina btDetail e btHeader como True. As propriedades DataField ou DataFormula são responsáveis por definir como se dará a quebra de grupos. Como queremos que a quebra ocorra pela primeira letra do nome da cidade, então informamos em DataFormula, copy(nome, 1, 1).  Se a quebra fosse por um campo, este seria informado em DataField. Coloque um TRLBand sobre TRLGroup. Defina BandType como btHeader. Coloque um TRLDBText sobre o btHeader. Defina a propriedade DataSource com o TDataSource que foi inserido no DataModule. Podemos aqui imprimir um campo ou uma fórmula. Usaremos DataFormula para imprimir apenas a letra inicial do nome da cidade informando copy(nome, 1, 1). Coloque outro TRLBand sobre TRLGroup e dessa vez defina BandType como btDetail. Na banda detalhe é que são mostradas as linhas da tabela. Coloque dois TRLDBText sobre o btDetail de forma que fiquem abaixo dos rótulos ID e Nome inseridos no btColumnHeader. Defina a propriedade DataSource de ambos com o mesmo TDataSource usado desde o início do artigo. Na propriedade DataField do primeiro TRLDBText, informe ID_CIDADE. E no segundo informe NOME.
Podemos obter uma prévia do relatório clicando com o botão em TRLReport e selecionando Preview.
Para finalizar o exemplo coloque um botão no form que irá chamar o relatório. Abaixo de implementation acrescente no uses o nome da unit referente ao form do relatório. E no evento OnClick do botão escreva o código para chamar o método Preview() de RLReport.

como criar um relatório mestre detalhe usando o FortesReport. Para implementar o exemplo usei um banco de dados Firebird e ZeosLib. Use o seguinte script para criar as tabelas. Neste caso o relacionamento mestre detalhe é formado pelas tabelas VENDA e ITEM.

O Data Module

Inicie uma aplicação no Lazarus e insira um Data Module. Selecione a aba Zeos Access e coloque um TZConnection no Data Module. Defina as propriedades da seguinte forma:

Database - informe o banco de dados Firebird que foi criado.
Name - dê um nome ao componente. Por exemplo: dbVendas.
Password - masterkey.
Protocol - firebird-2.0 ou a versão que está sendo usada.
User - sysdba.

Mude Connected para true, para verificar se a conexão está configurada corretamente.
Coloque um TZReadOnlyQuery e defina:

Connection - selecione o TZConnection.
Name - defina um nome para o componente. Por exemplo: queVenda.
SQL - select a.id_venda, a.data_venda, b.nome from venda a, cliente b where a.id_cliente = b.id_cliente.

Selecione a aba Data Access e coloque um TDataSource, onde DataSet deve estar associado à Query anterior. Defina Name como dsVenda.

Coloque um segundo TZReadOnlyQuery, defina Connection da mesma maneira e em Name digite queItem, por exemplo. Na propriedade SQL informe select a.id_produto, b.nome, a.quantidade, b.preco_venda, a.quantidade * b.preco_venda total from item a, produto b where a.id_produto = b.id_produto and id_venda = :id_venda.

Defina a propriedade DataSource desta Query com dsVenda. Isto, juntamente com o parâmetro :id_venda definem o relacionamento mestre detalhe entre as duas Queries. O parâmetro :id_venda é definido por queVenda através de dsVenda.

Coloque mais um TDataSource e defina a propriedade DataSet com a Query queItem. Defina Name como dsItem. Leia mais para conexão com Firebird em Lazarus - Conectando Firebird com SQLdb ou ZeosLib.

O relatório

Esse é o aspecto do relatório que iremos construir:




Agora adicione um novo form à aplicação. Localize a aba Fortes Report e coloque um TRLReport. No Inspetor de Objetos expanda a propriedade AllowedBands e coloque em True as opções btColumnHeader, btDetail e btHeader. Na propriedade DataSource selecione dsVenda, a tabela mestre.
Agora coloque um TRLBand. Defina a propriedade BandType como btHeader. Aumente a altura da banda e coloque um TRLLabel sobre a TRLBand. Defina a propriedade Caption como Relatório de Vendas. Na propriedade Align selecione faCenter, para centralizar o rótulo na banda. Expanda a propriedade Font e defina Size como 14, por exemplo. Coloque um TRLSystemInfo no lado esquerdo da banda. Na propriedade Info selecione itDate. Isso mostrará a data atual na banda. Coloque outro TRLSystemInfo, este no lado direito da banda e defina a propriedade Info como itPageNumber. Isso mostra o número da página.
Coloque outro TRLBand e defina a propriedade BandType como btDetail. Sobre essa banda, que deve mostrar os dados da tabela mestre, coloque TRLLabels definindo seus Caption como Venda, Data, Cliente, CÓDIGO, NOME, QTDE, PREÇO e TOTAL. Coloque também três TRLDBTexts. Defina seus DataSource como dsVenda e DataField como ID_VENDA, DATA_VENDA e NOME.


A banda deve ser dimensionada adequadamente de acordo com a figura acima. Coloque um TRLSubDetail e defina a propriedade DataSource como dsItem. Esta banda irá mostrar os dados da tabela detalhe. Expanda a propriedade AllowedBands e coloque em True as opções btDetail e btSummary. Sobre essa banda coloque um TRLBand. Defina BandType como btDetail. Coloque cinco TRLDBTexts e defina DataSource como dsItem. Em DataField informe ID_PRODUTO, NOME, QUANTIDADE, PRECO_VENDA e TOTAL. Coloque outro TRLBand sobre TRLSubDetail e defina BandType como btSummary. Esta banda é usada para imprimir totais de relatórios ou grupos. Sobre esta banda coloque um TRLLable e defina seu Caption como Total da Venda:. Ao lado dele coloque um TRLDBResult. Este componente é usado para totalizar uma coluna, por exemplo. Defina DataSource como dsItem. Em DataField informe TOTAL. A propriedade Info define a operação que será realizada. Defina como riSum. que indica que a coluna TOTAL será somada. Na propriedade DisplayMask escreva #,###,##0.00. Isso irá formatar o valor mostrado. Pode-se definir DisplayMask para os TRLDBTexts referentes a PRECO_VENDA e TOTAL.

No form que irá chamar o relatório coloque um botão e no evento OnClick escreva o código que mostrar uma prévia do relatório:

frmMestreDetalhe.rlVendas.Preview();

É necessário informar na cláusula uses o nome da unit do relatório. Abrir a conexão e as Queries também é necessário para que o relatório seja visualizado.

20 Coisas que a INTERNET está destruindo.

20 COISAS QUE A INTERNET ESTÁ DESTRUINDO

Esta é uma das pérolas que de vez em quando a gente se depara e resolve compartilhar.

(Fonte:
http://www.acidezmental.xpg.com.br/20_coisas_que_a_internet_esta_destruindo.html

Desde que o uso da internet se generalizou, há cerca de 10 anos, provocou grandes mudanças nas nossas vidas, algumas positivas, outras negativas.
Tarefas que precisavam de dias para serem feitas, hoje são realizadas em minutos, enquanto tradições e habilidades que surgiram e cresceram ao longo dos séculos, hoje não passam de redundâncias.
Confira abaixo uma lista com 20 coisas, entre habitos e posturas sociais, que a internet está destruindo:

A arte de discordar educadamente
A internet rebaixou o tom dos debates ao nível de 3º subsolo. A intolerância e falta de educação reinam absolutas principalmente no Facebook, Twitter e nos comentários dos blogs. Hoje em dia é normal discordar de qualquer coisa não com argumentos, crítica construtiva e raciocínio inteligente, mas com: "Vai tomar no %$!", "Você é um filho da @%$#." ou "O teu blog é uma *#$#@!"

20 COISAS QUE A INTERNET ESTÁ DESTRUINDO 
Adolescentes ansiosos pela sua primeira Playboy
Na minha época, um garoto de 13, 14 anos que possuia uma revista playboy era considerado pelos amigos quase um deus. Hoje a onipresença de pornografia gratuita e pesada na internet acabou com um dos mais importantes ritos de passagem para os meninos adolescentes: a compra da primeira revista de sacanagem. Por que tremer na banca para comprar a Playboy se você pode baixar montanhas de obscenidades direto no seu quarto?


O respeito pelos mortos
O Twitter se tornou uma tribuna aberta para piadas sobre a morte de pessoas famosas. 99,9% de muito mau gosto.


Lojas de discos
Em um mundo onde as pessoas não estão dispostas a pagarem por música, cobrar delas R$ 30 por 12 músicas dentro de uma frágil caixa de plástico, definitivamente, não é um bom modelo de negócio. Mas também perdeu-se a oportunidade de vasculhar com os dedos, pilhas de CDs e discos e encontrar as vezes, verdadeiras preciosidades e tambem a oportunidade de paquerar e fazer novos amigos.


Ouvir um disco do início ao fim
Os mp3 são um dos benefícios da internet. Por um lado, não é mais preciso aguentar oito músicas chatas para poder ouvir uma ou duas que valem a pena. Mas, por outro lado, álbuns que realmente valem a pena não terão a audiência que merecem.


Escrever cartas
E-mail é mais rápido, barato e conveniente. Receber uma carta escrita à mão de um amigo se tornou um prazer raro, e até nostálgico. Como consequencia, frases de despedida como “Com as melhores saudações” ou “Um grande abraço” foram substituídas por um simples e imbecil “Valeu”.


Pontualidade
Na era pré-internet e pré-celular, as pessoas precisavam manter seus compromissos e chegar ao local combinado na hora certa. Enviar mensagens de texto cinco minutos depois do compromisso para avisar os amigos do atraso se tornou uma das grosserias comuns da era da conectividade.


Listas de telefone
Você pode encontrar tudo que quiser na internet, com dados muito mais completos do que as antigas e mofadas Páginas Amarelas. Mas o que você faz quando fica sem conexão?


Memória
Quando quase todo fato, não importa quão obscuro e misterioso, pode ser esmiuçado em segundos através do Google ou do Wikipedia, o “mero” armazenamento e recuperação de conhecimentos em sua mente se tornou menos valorizado.


Concentração
Quem, entre o Gmail, o Twitter, o Facebook e o Google News, consegue trabalhar? Uma nova tendência de distúrbio de concentração que se desenvolve.


Decorar números de telefone
Depois de digitar os números na agenda do seu celular, você nunca mais vai olhar para eles de novo. Você se lembra de cabeça os telefones de sua família?


Teorias conspiratórias
A internet é constantemente repudiada como dominada por pessoas excêntricas, mas, ao longo dos anos, se mostrou muito mais propensa para desacreditar teorias conspiratórias em vez de perpetuá-las.


Preencher formulários na última página dos livros
O mais próximo disso hoje são os serviços das livrarias virtuais como “Clientes que compraram este livro também compraram…”


Álbuns de fotos e projeções de slides
Facebook, Flickr e sites de impressão de fotos como Snapfish são a nova maneira pela qual compartilhamos nossas fotos. No início deste ano, a Kodak anunciou estar descontinuando a produção do seu clássico filme Kodachrome por falta de demanda.


Depender de agentes de viagens para marcar férias
Para embarcar em uma viagem de férias, não precisamos mais passar obrigatoriamente pelo agente de viagens, que tenta insistentemente vender aquele pacote “imperdível”. Sites especializados montam a viagem dos sonhos dentro do orçamento possível.


Relógios de pulso
Ficar mexendo no bolso para pegar seu celular pode não ser tão elegante quanto olhar para um relógio de pulso, mas é mais econômico e prático do que andar por aí com dois equipamentos.


Artistas ainda não descobertos
Colocar suas pinturas ou poemas online é tão fácil, que os artistas desconhecidos não têm mais desculpas.


Matar tempo
Quando foi a última vez que você passou uma hora inteira olhando o mundo pela janela, "pensando na morte da bezerra"? Ou simplesmente sentado fazendo nada? A atração da internet sobre a nossa atenção é implacável e, cada vez mais, difícil de resistir.


Assistir televisão acompanhado
A internet permite que parentes e amigos assistam os mesmos programas em diferentes horários e em diferentes lugares, acabando com o significado daquele que foi um dos mais atrativos apelos culturais da classe média, a experiência compartilhada. Programas para assistir televisão juntos, se ainda existem, se limitam a eventos esportivos e reality shows.


O intervalo de almoço
Você deixa o seu computador para almoçar? Ou come um sanduba enquanto responde e-mails pessoais e bate papo no MSN?