Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Então, coloque a parte do código que tem este if "problemático". Abraços
  2. é eu esqueci de mencionar que a formatação não está muito boa, mas o conteúdo é bem abrangente (acha-se pouquíssima coisa sobre o quick). A idéia é a de que você conheça os componentes que compõe o quick e suas funcionalidades. Não dá para existir uma coisa definitiva, porque as possibilidades são muitas e cada caso é um caso. Se você souber o potencial de cada coisa, com um pouco de imaginação e paciência, você monta um quebra-cabeças que resultará no seu relatório (voce vai perceber isto mais abaixo). ;) bom, você não deu detalhes sobre as tabelas e relacionamentos envolvidos (este é o primeiro ponto a ser avaliado para montar seu quebra-cabeças).Voce falou inicialmente sobre ser um relatório de vendas, então a grosso modo, há uma tabela para registrá-la e vou considerá-la VENDAS. Cada venda, tem uma lista de itens que fazem parte da mesma (como os que você usou no exemplo) - vou considerá-la ITEM_VENDA e, por fim, parece-me que você tem uma outra lista de itens que se refere às condições de pagamento, onde você tem a data de vencimento e valor para cada data - vou considerá-la PARCELAS_VENDA. Olhando uma estrutura como esta, a nossa tabela mestre seria VENDAS e as tabelas ITEM_VENDA e PARCELAS_VENDA seriam tabelas filhas (relacionadas a VENDAS por algum campo - COD_VENDA por ex.) Traduzindo isto em QuickRep, a tabela mestre é o dataset de origem de dados do QuickRep (propriedade DataSet), logo os dados desta tabela serão os apresentados utilizando uma TQRBand do tipo rbDetail (ou seja, uma banda detalhe). As tabelas ITEM_VENDA e PARCELAS_VENDA são tabelas "filha" da tabela mestre, ou seja, se relacionam a esta através de COD_VENDA e contém várias linhas cada uma. Então, a impressão dos itens destas tabelas se faz através de bandas TQRSubDetail (ou se, são bandas sub-detail). Voce usará uma subdetail para cada um destes datasets e atribuirá cada um deles a respectiva banda através da propriedade DataSet da banda subdetail. Para os cabeçalhos das subdetail, você utilizar um TQRGroup e associa ele a sua propriedade HeaderBand resultado final, seria algo como: +- Detail ----------------------------------------------------+ | Cliente: Francisco Almeida | CNPJ: 999999 | Endereço: xccvcvcv cvvxv x |------------------------------------------------------------- | Qrd. Und Descrição Valor +- SubDetail - Itens -----------------------------------------+ | 50,00 Bolacha R$ 65,00 | 20,00 Suco daFruta R$ 60,00 | 15,00 Cx Bombom R$ 100,00 +- SubDetail - HeaderBand ------------------------------------+ | Vencimento Valor +- SubDetail - Parcela ---------------------------------------+ | 20/10/2008 R$ 75,00 | 20/11/2008 R$ 75,00 | 20/12/2008 R$ 75,00 +-------------------------------------------------------------+ Veja que nesta estrutura, você não precisa de uma banda Summary. Abraços
  3. DiabloX3, para começar a entender um pouco, acesse este link (ref. Ramos da Informática) e baixe o arquivo do item 4 (Manual do Quick Report) - estudar é preciso! ;) Se manjar bem inglês: Quick Reports Tutorial (ref. Aboult.com) isto porque provavelmente, você tem vários registros referentes a prestação e está usando uma banda que, como o nome diz, serve para apresentar um "resumo final" (é processado apenas no fim do relatório). Voce provavelmente precisará fazer uso de uma banda sub-detail para listar estas parcelas. Use a propriedade Mask do componente. Abraços
  4. Access, esta é a palavrinha chave!!! DVMarinho, sempre que postar dúvidas relacionadas a banco de dados, informe o banco de dados e componentes de acesso que está utilizanado. ;) Na dica do colega paulobergo, substitua o caraceter "%" pelo "*" (só o Access tem destas coisas...): SQL.Add('where nome like "'+disciplina.nome+'*" '); Abraços
  5. cerberus, supondo que esta scrollbar seja a do próprio componente, basta que você defina a linha atual com o índice da linha que você deseja receber o foco. Você citou a última, então, após preencher o stringgrid, você pode usar a seguinte instrução para movimentar o foco para a última linha: StringGrid1.Row := StringGrid1.RowCount -1; Abraços
  6. Nahim, esta parte que você tem, retornará apenas os dados que você quer imprimir.Para a impressão efetiva destas informações utilizando o VDO será necessário que você faça um loop sua varredura e use os comandos do componente para gerar a saída. Neste post (ref. Forum DevMedia) tem um exemplo da impressão de cheques a qual contém a estrutura básica que você precisará ter no seu relatório: - inicialização - loop para impressão dos dados - finalização Abraços
  7. Recife, para ficar correto, você deverá fazer isto com os outros componentes (TQRLabel, TQRExpr, TQRMemo, ... - todos os que você possa vir a colocar na banda).Todos eles tem esta propriedade em comum, logo, a declaração dela deve estar em uma classe ancestral comum. Verifique se não estaria no arquivo QrCtrls.pas a classe TQRCustomLabel (segundo o help, é a ancestral destas que citei). Encontrando a declaração da propriedade, normalmente será algo como: property Transparent: boolean; read ... write SetTransparent default False Mude o valor default para True e dê uma procurado pelo método create da classe onde você encontrou esta definição, pois lá a propriedade deverá estar sendo inicializada - altere-a também para False. aqui, ocorre o mesmo princípio. Pesquise pela classe antecessora das bandas - TQRCustomBand - que deve estar declarada na unit QuickRpt.pas, onde também deve estar a declaração da classe TCustomQuickRep que é a ancestral do TQuickRep. Lembro-lhe que não há uma "banda detalhe" mas sim, um componente TQRBand que se comportará como tal se sua propriedade BandType estiver configurada com rbDetail - em qualquer outra opção, supostamente você não deveria interferir nos eventos citados. não estou certo de que funcionará esta parte (por o chekbox no preview), se a idéia é a de que ao marcar/desmarcar o preview seja "automaticamente" regerado - o método preview do QuickpRep teria que ser chamado novamente (é o que me parece - testar e descobrir) e, se for o caso, aquele esquema que lhe passei pode ficar furado. Inclusive, dando uma conferida no que tenho sobre o quick, achei uma solução melhor para manipular a variável zebrar (veja este post naquele seu tópico). Abraços
  8. Recife, achei uma maneira mais segura e simples de saber quando estamos "imprimindo" o relatório para a tela (preview) ou para a impressora (print): usar a propriedade Destination do objeto QRPrinter do QuickRep: qrdMetafile ==> gerando visualização qrdPrinter ==> imprimindo Infelizmente, não tenho referências de em qual unit encontramos a declaração destas constantes mas, como voce tem os código fonte, voce poderá encontrá-la facilmente. A variável Zebrar nem seria necessária, podendo ser retirada sua declaração/manipulação e o BeforePrint da banda rbDetail passaria a ser: procedure TForm1.QRBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin if Sender.ParentReport.QRPrinter.Destination = qrdMetafile then // gerando visualização begin if Zebra then Sender.Color := clRed else Sender.Color := clWhite; Zebra := not Zebra; end; end;Por gentileza teste e, funcionando, poste aqui o nome da unit onde as constantes estão declaradas. Abraços
  9. Micheus

    QuickReport

    descartada a possibilidade de uma instalação incorreta ou algo parecido... ...voltemos ao problema: Paulo Feitosa, você não fez qualquer referência aos comentários dos colegas Nahim e Manoel Zancheta. Então, vamos seguir questionando.Voce diz: "...estou tentando utilizar o componentes ... e me surge a seguinte mensagem..."; Por acaso a mensagem de erro está aparecendo quando você está adicionando algum componente ao seu relatório sendo desenhado? Se a resposta é não, em que momento está ocorrendo? Antes de aparecer a tela de Preview ou quando ela é apresentada? Como está o código na parte em que você prepara o relatório para a visualização? Abraços
  10. Micheus

    QuickReport

    O D7 também já traz o componente QuickReport.Até é meio estranho que você tenha instalado o da versão D6 no D7. Por acaso você teria os fontes, é isto? Se não for, dê uma olhada neste post. Abraços
  11. maneju, você está querendo mudar o conceito que existe por detrás deste "efeito". A idéia é a de que quando célula não está em edição (a tal célula tracejada), significa que você usa as setas para se deslocar entre elas. Já quando você está editando a célula, você (ou o usuário) poderiam estar querendo usar as setas para se deslocar dentro do texto, de modo a alterar algo em uma posição específica. Se você "disser" que as setas vão servir apenas para o deslocamento entre as células, então, se o usuário quiser mexer em alguma coisa no meio do texto terá que usar o mouse para posicionar no lugar correto ou, no teclado, usar o backspace e/ou delete, apagando os caracteres até a posição desejada e depois digitando novamente. Abraços
  12. em todo if <condição> then, condição deve ser uma expressão booleana. Se não é, então você está fazendo algo errado - verifique. Abraços
  13. biakeffer, deve ser algum detalhe. Observe que são poucas as propriedades deste componente. Tenho um exemplo aqui, que não tem icone setado, não tem popup - tudo no default - e ao clicar no minimizar na barra de título, a janela "some" e o ícone dela vai parar na tray. Ao dar duplo click no ícone que ficou na tray, ela é reapresentada. Lembrando apenas, que este componente não mantém o ícone na tray, quando a janela está restaurada - voce só o vê lá quando apenas quando a janela é minimizada. Abraços
  14. Rodrigao, esse lance de sumir a formatação está meio estranho. Mas como fica difícil envestigar, vamos incrementar o procedimento de pintura acima e resolver logo este problema. ;) É interessante, mas a função CurToStr não formata adequadamente este tipo de dados (currency) - pelo menos, no meu entender. Quando você passa uma variável currency para ela, o retorna é basicamente o mesmo que usar StrToFloat. Veja o Ex.: 1568.52 => 1568,52 Mas no meu enteder, deveria pelo menos, incluir os separadores de milhar, ou seja, retornar: 1.568,52 Mas temos ainda, uma segunda variação desta função, que em teoria deveria resolver este "problema": function CurrToStr(Value: Currency; const FormatSettings: TFormatSettings): string; Com esta, passamos uma variável que é preenchido com todos os parâmetros de formatação do sistema (configurações de localidade), onde usamos a procedure: procedure GetLocaleFormatSettings(LCID: Integer; var FormatSettings: TFormatSettings); para preenchê-la. Mas ainda assim, nada de mudanças. Então, se for para mostrar da forma como citei ser a esperada, é melhor usar a função FormatFloat('#.##0,00', <valor>) Entretanto, se quiser mesmo que ela aparece no formato monetário (R$ 1.568,52), use esta outra função para currency: function CurrToStrF(Value: Currency; Format: TFloatFormat; Digits: Integer): string; (detalhes no help) Eu usarei esta última no código que postei anteriormente - altere-o na posição especificada: ... // desenhando o texto na célula Canvas.Brush.Style := bsClear; // caso seja um campo currency, forçamos sua formatação if Column.Field.FieldType = ftCurrency then Text := CurrToStrF(Column.Field.AsCurrency, ffCurrency, 2); // com 2 dígitos de precisão // na linha abaixo, é testado se o campo é um um campo tipo memorando, para o qual // usamos outro método de desenho que viabiliza o desenho com quebra de linha if Column.Field.FieldType = ftMemo then begin TxtRect := Rect; DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, TxtAlign or DT_WORDBREAK); end else ... Abraços
  15. esse povo... quanto mais tem, mais quer... :D biakeffer, tem jeito sim. Voce pode desabilitar na propriedade Options a opção msnAllowScroll, só que daí a janelinha vai aparecer de uma vez só. Para que ela apareça "suavemente" mas não desapareça, o jeito será manter esta propriedade ativa e alterar a procedure abaixo, no código fonte do componente (MSNPopUp.pas). Depois eu vou dar uma avaliada melhor e ver se não podemos usar alguma propriedade para isto e passar ao criador do componente. Procedure TfrmMSNPopUp.tmrExitTimer(Sender: TObject); Begin // after several seconds, the popup window will disappear // add by Ahmed Hamed 20-3-2002 tmrExit.Enabled := False; tmrScrollDown.Enabled := False; // <<==== AQUI troque o True por este False // End; Abraços e divirta-se. ;)
  16. biakeffer, tem certeza que não vai preferir usar o componente que já faz tudo isto (e muito bem feitinho)?Fica aqui um pequeno exemplo: TSTMSNPopup.zip Abraços
  17. thiago, com relação a tela de login, você pode dar uma olhada nestes links - devem lhe ajudar a sair do zero: - Sistema com Login e Senha (Tópico em Tutoriais & Dicas) - Criar login e senha (post do colega Jhonas) Abraços
  18. pgregoreki, não sei se você notou mas eu dei duas opções e fiquei sem saber sobre qual das duas você está falando. :blink: Mas, qualquer que venha a ser a resposta, tem a questão que você põe lá no início: "...estou tentando fazer uma tabela..." Este fazer uma tabela está meio vago. Voce poderia utilizar o aplicativo DataBase Desktop que acompanha o Delphi para criar a tabela. se você fechar a janela principal do seu programa, automaticamente o aplicativo será encerrado.O método a ser chamado no form principal é Close. Também há a opção de você invocar o método Terminate do objeto Application (Application.Terminate). Sugiro que leia algum material básico sobre Delphi - há muitos tutoriais e apostilas na net (e aqui no forum - veja lá em cima no link Apostilas Gratuitas). É bastante complicado tentar explicar tudo mastigadinho aqui. Falta espaço e tempo. ;) Abraços
  19. Luis Ricardo, a observação é válida e eventualmente incompleta. Explico: considerando que possa ser digitado valores na casa de milhares (como 8.550,00 - se assim estiver formatado), haverá algum tipo de erro visto que existe uma outra variável, chamada ThousandSeparator, que define o separador de milhar e que na configuração de localidade retornada pelo Windows (pt-br) também será o '.' - logo, imagino que esta variável também devesse ser manipulada na situação que você propõe. Olhando melhor a questão, e verificando a observação constante da função StrToFloat no help podemos chegar a conclusão que errei ao propor no post#3 a substituição/troca dos delimitadores. A observação é a seguinte: The DecimalSeparator global variable defines the character that must be used as a decimal point. Thousand separators and currency symbols are not allowed in the string. que traduzindo... A variável global DecimalSeparator define o caracter que deve ser usado como ponto decimal. Separador de milhares e símbolos monetários não são permitidos na string. ou seja, a única coisa a fazer com o texto antes da conversão é: remover os separadores de milhares. Vamos repetir aqui retirando o '.' que está fixo como separador de milhar e usar a variável (vai que você resolve exportar seu programa - rsrs): Edit1.text := StringReplace(Edit1.text, ThousandSeparator,'', [rfReplaceAll]); Valor := StrToFloat(Edit1.Text); flavioavilela, também vi outro erro no código abaixo - observe a máscara de formatação. Deveria ser '#,##0.00' - entre o separador de milhar e decimal, de qualquer número tem sempre 3 caracteres (algarismos): Abraços
  20. Recife, bem estranho isso. Eu notei que você está utilizando um HTMLFiter. Por acaso você está testando este tipo saída ou impressora mesmo? Veja este exemplo que preparei, testado e aprovado ;)Rel Zebrado so no preview.zip (também usa IB - já vai com banco e gds32.dll para o teste - é só descompactar) Como você observará é muito similar ao seu, já que está de acordo com o exemplo que postei anteriormente. Assim, veja se você consegue identificar alguma diferença em relação ao seu (fora o questionamento que lhe fiz antes) Abraços
  21. Micheus

    Estados da tabela

    Jesc, por acaso quando você abre novamente o form, o dataset está ativo? Onde você está abrindo/ativando seu dataset? Voce fala "quando abro o cadastro de clientes...", mas o nome do form lembra cadastro de fonecedore (frCadForn) :unsure: Este evento OnStateChange é de um TDataSource colocado no form em questão (frCadForm)? Se sim, omita o nome da variável do form - não é necessário já que todos os botões referenciados estão nele e caso você viesse a criar um form base (modelo ou template), onde esta parte do código serviria a qualquer classe posterior, você estaria cometendo um erro. Lembre-se que para generalizar, você não deve utilizar a variável global - se for mesmo necessário referenciar a si proprio, utilize o Self que fará referência a instância atualmente alocada e isto é válido para os parâmetros dos eventos (por isso usamos o type cast como em Sender as TDatSource. Assim, se a resposta acima foi sim, mude o código para: btNovo.Enabled := (Sender as TDataSource).State in [dsBrowse]; btGrava.Enabled := (Sender as TDataSource).State in [dsEdit, dsInsert]; btCance.Enabled := btGrava.Enabled; btExclu.Enabled := btNovo.Enabled; btConsu.Enabled := btNovo.Enabled; btSair.Enabled := btNovo.Enabled;
  22. Usando a busca aqui do forum, colocando no texto de busca "gráfico" e nome de membro "Jhonas", aparecem vários tópicos e o primeiro da lista é justamente o seu: Geração de gráficos Outra coisa que você pode fazer, quando quiser pesquisar algo que você postou, é clicar no seu nome ali em cima, após o "Bem-vindo(a), ...". Seu perfil será mostrado e você poderá ter acesso aos seus Tópicos e Posts. Abraços
  23. Micheus

    Estados da tabela

    Jesc, se eu compreendi direito sua necessidade, talvez um dos itens que abordo no tutorial Consulta E Cadastro De Dados - [1] Tela "combo" lhe seja util - dê atenção na parte em que aparece "O evento OnStateChange do TDataSource ...". Sugiro que você leia os comentários e baixe o exemplo para testar como funciona esta questão da manipulação dos estados da tabela. Abraços
  24. Se alguém quiser acompanhar a movimentação da proposição, segue o link sobre a tramitação.
  25. Silva_henry, o site oficial do FireBird é www.FirebirdSQL.org. Especificamente para o FreeBSD, há um link de download apenas da versão 1.5.2; Quanto as versões mais recentes, talvez seja necessário baixar os fontes e compilá-los. Sobre o tutorial para istação, nas notas de versão do FB 2.0.4, consta: FreeBSD Not currently available. Please refer to older releasenotes as a reference to 2.0 installations. Conferindo na versão 1.5.5, consta: FreeBSD Not currently available. Please refer to v.1 releasenotes as a reference to 1.5 installations. Então, dê uma olhada no que está explicado no arquivo Firebird 1.0 Release notes.pdf (português) - pag. 30. Estes links podem vir a serem uteis:- Firebird Instalacao (1) - Firebird Instalacao (2) - Installing Firebird on FreeBSD - FreeBSD 6.1 & Firebird Boa sorte.
×
×
  • Criar Novo...