
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
continuo achando que o que ele quer está lá no código que postei o link ou no uso do componente, mas...
-
Isso é meio relativo.Sempre que utilizei, em edição no grid, Append sempre incluiu um novo item no final do dataset (movendo para o final do grid também) - é o help também diz que para dataset indexado, a inserção ocorre na posição do cursor. Mas tem componentes em que isso realmente não ocorre, ou seja, a inclusão vai para o final do grid. O help sobre Append diz o seguinte: Adds a new, empty record to the end of the dataset. Sobre a outra parte, como disse, não estava certo então, vale o que você diz.
-
Já que o erro é na compilação, e diz não estar declarada, veja se você tem a unit DB declarada na cláusula uses do form ou datamodule onde você a está utilizando.
-
Jonas, não sei ao certo se você tem algum motivo para o uso deste método, mas a questão é que no caso do uso do Append, um registro em branco será adicionado ao final da tabela, bem como ela estará automaticamente no modo Inserção. Então, é desnecessário o uso de Last e após do Edit, ficando assim: ... if flag = 1 then begin Table1.append; // adiciona um registro vazio logradouro.Items.add(aux); Table1.post; // grava o item adicionado no dbcombo end; outra coisa, que não estou certo, mas não deveria ser atribuído o valor em AUX para o campo da tabela que acabou de ter um registro em branco criado? Abraços
-
Se estiver bem no no inglês... Q. Why doesn't the printersetup button work from the preview when I load a saved (.QRP) report? A. This is actually a design feature. When the orientation or paper size was changed, the result was poor output from the saved repots so this functionality was removed from the default preview. If you build a custom preview, you can use the printersetup on saved reports. Example projects with a custom preview with this functionality can be downloaded from our download page under the filename custprev.zip (QuickReport 2) and QR3CSTD3.ZIP (QuickReport 3) Esta nota é parte do Q&A do QuickReport. Resumindo, eles "removem" a opção do Preview porque a alteração de formatação de uma relatório gravado deixa ele com uma aparência ruim (eles dizem porca). A sugestão dada é que você crie seu próprio visualizador (Custom Preview) e citam exemplos que estão disponíveis no site deles (http://www.qusoft.com). Vale salientar que a impressora (objeto ou classe) utilizada pelo QuickReport é uma TQRPrinter. A propriedade QRPrinter do relatório é quem definem as características a serem utilizadas na impressão. Q. What is the difference between the global QRPrinter, the preview's qrprinter, and the report's, qrprinter? A. Each report has it's own QRPrinter object. There is a global QRPrinter object that can be used outside of the QuickRep object. Each QRPrinter is a distinct object. The Preview's QRPrinter object is just a pointer to the QRPrinter of the report using that preview. When you reference the preview's qrprinter, you actually referencing the qrprinter object of the report currently being previewed.
-
ficará legal sim. Posso verificar isso com aquele componente apenas amanhã (estou sem tempo hoje) esta é a opção mais simples (mas visualmente não é aquilo tudo).se você tem realmente o campo da tabela formatado do jeito que mostrou, não tem erro: - faze uma consulta na tabela (via query), ordenando pelo campo em questão. Deve ficar algo assim: 1 (diretor) 1.1 (gerente 1) 1.1.1 (supervisor 1) 1.1.1.1 (encarregado de produção 1) 1.1.1.2 (encarregado de produção 2) ... 1.1.1.5 (encarregado de produção 2) 1.1.2 (supervisor 2) 1.1.3 (supervisor 3) 1.2 (gerente 2) 1.2.1 (supervisor 1) 1.2.2 (supervisor 2) 1.2.3 (supervisor 3) Percebeu, vai ficar direto na seqüência, daí é só implementar um loop para inserir no nível correto. Vai pensando aí. Se optar por utilizar o componente de diagrama, então não gaste tempo com isso que coloquei. Não esqueça de informar o nome das tabelas e campos envolvidos - facilita a exemplificação. Abraços
-
[resolvido] Salvar Atalho Num Banco E Abrir O Arquivo Correspondente A
uma questão respondeu Micheus em Delphi, Kylix
Marcos, acho que agora vai... Seguinte: quando "parou aqui", você deve ter observado que na janela de mensagem da compilação deve ter aparecido algo como "... : Undeclared identifier 'ShellExecute'." Isto ocorreu porque faltou declarar a unit em que a função está implementada: ShellAPI Adicione ela na cláusula uses do seu form. Outra coisa, eu fiz uma correção erradamente no post#11: no lugar de: if not (DataModule1.TartigosAtalho.AsString <> '') then você deverá utilizar: if not (DataModule1.TartigosAtalho.AsString = '') then ou if DataModule1.TartigosAtalho.AsString <> '' then já que queremos que o teste no if passe se houver um atalho digitado. Desculpe minha desatenção. Apenas mais um comentário... quando você utiliza o comando: Datamodule1.Tartigos.Active:= True; você estará abrindo a tabela e a mesma será posicionada no 1º registro. Então, tenha em mente que esta sua rotina SEMPRE vai executar o atalho definido no 1º registro da tabela. Isto até não é problema, se por acaso você está utilizando algum tipo de filtro sobre esta tabela a partir de outra. Abraços -
é eu até estava esperando por um questionamento como este. Na verdade estava achando que não seria impresso o último, mas foi o contrário....Apesar de saber que funciona, as vezes não lembro de alguns detalhes que acabo ajustando durante durante os testes. Parece, que ao contrário do que mencionei ontem, OnNeedData ocorre antes da impressão do registro e não depois - captou?! Então, altere para: procedure TFormRanking.QuickRep1OnNeedData(sender :TObject; var MoreData :boolean); begin ... MoreData := (ContaHanking < 20) and (not Qry1.EOF); // vai listar os 20 primeiros registros end; e acrescente no AfterPrint da GroupFooter (se não existir, coloque uma com altura mínima):procedure TFormRanking. ... AfterPrint(sender ....); begin if not Qry1.EOF then begin Qry1.Next; // avançamos na mão para o próximo registro Inc(ContaHanking); // incrementamos item impresso end; end; o objetivo desta banda é garantir o avanço da Qry1, apenas, após que todos os registros da Qry2 (que está vinculada a Qry1) tenham sido impressos. Acho que agora vai. :)
-
[resolvido] Trazer Form Para Frente
pergunta respondeu ao Vivendo&Aprendendo de Micheus em Delphi, Kylix
já experimentou utilizar o método BringToFront do form em questão? -
R.: Bingo....tu é o cara....deu certo....na pinta. :D Viu, não tinha nada de complicado ;) Bom, vamos ver se consigo explicar isto descentemente... Declarar dentro da cláusula private de uma classe, resulta em que esta variável será acessível (visível) apenas na unit (ou módulo) onde a classe está declarada. Por ex., supondo que a unit que você colocou seu form em questão chame-se uFormHanking, esta seria a unit na qual as variáveis private da(s) classe(s) estarão visíveis. Qualquer código que você coloque nesta unit, até mesmo de uma outra classe, poderá referenciar a variável (devidamente precedida pela classe) sem problemas. Assim, se você tivesse qualquer outro código, nesta unit, que fizesse a seguinte referencia: if FormRanking.ContaHanking then não haveria qualquer problema na compilação. Mas se, por exemplo, no form principal (outra unit) onde você cria seu relatório, você tentar fazer a mesma referência terá como resultado um erro de compilação, pois a variável neste ponto não "existirá". Com relação a classes, há ainda outras "diretivas" de visibilidade: Public (visíveis por todos os módulos), Protected (visíveis apenas dentro da classe), Published (aplicados a propriedades, é similar a Public, exceto que o a informação pode ser gerada em run-time) Já declarar uma variável fora de uma classe, há duas possibilidades: - se declarada antes da sessão Implementation, torna-se "global". Voce pode referenciá-la de qualquer lugar desde que faça referência à unit onde a mesma está definida. - se declarada após a sessão Implementation, torna-se "loca" à unit (modulo) onde está definida. Não sei se ficou claro, uma coisa é eu entendê-las, outra é conseguir explicar. :D Talvez algum outro colega possa corrigir ou incrementar mais alguma informação. Abraços.
-
Na verdade o que eu estou tentando fazer é montar uma árvore de hierarquia de liderança. talvés você conheça outra forma de representar o que eu estou querendo fazer. acho que a utilização do tal componente seria mesmo interessante. você quiz dizer que "não sabe como relacionar a tabela", é isso?Talvez se você explicar como a "coisa" deveria funcionar, eu ou outro colega possamos lhe ajudar. O que eu imagino ser necessário, pode não estar de acordo com as informações que você tem que que o seu usuário necessita. Tente exemplificar, desenha se for o caso... Abraços
-
se você Aborta a execução, não tem como terminar corretamente. Mas, a sua idéia é basicamente o que eu propús, apenas que da forma que não é correta. Faz o seguinte, veja se consegue implementar o lance do OnNeedData. Primeiro, retire a sua consulta principal (Qry1, se não me engano) da propriedade DataSet do QuickRep (deixe esta propriedade em branco) TFormRanking = class(TForm) ... private ContaHanking :integer; end; ... procedure TFormRanking.QuickRep1BeforePrint(sender ....); begin ... Qry1.First; // posicionamos no início antes da impressão ou visualização ContaHanking := 0; // inicializa contador end; procedure TFormRanking.QuickRep1OnNeedData(sender :TObject; var MoreData :boolean); begin ... MoreData := (ContaHanking < 20) and (not Qry1.EOF); // vai listar os 20 primeiros registros // MoreData indica se há dados a serem impressos, é chamado após a impressão de cada "linha" if MoreData then begin Qry1.Next; // avançamos na mão para o próximo registro Inc(ContaHanking); // incrementamos item impresso end; end; Tenta aí e vê se sai...
-
acredito que não, porque ele não é um componente data-aware (e não conheço outro que seja). Voce terá que gerenciar a integração dos dados da tabela como ele. Apenas o conheço, utilizei o demo que vem com ele, mas não fiz nada de útil... Eu poderia até tentar ajudá-lo, mas precisaria entender o que você está fazendo, as estruturas de tabelas (registreos) envolvidos... Voce vai ter que avançar aos poucos, falou?!
-
Você tem que instalar ele.Após o download, digamos que você extraia os arquivos em uma pasta chamada c:\Delphi\Source\SimpleGraph. Para instalar o componente, você acessa o menu Component -> Install component..., na janela que aparece, você pode escolher instalar em um pacote já existente (guia: Into existing package) ou em um novo (guia: Into new package). Em Unit file name você selecionar o arquivo fonte do componente, seguindo o exemplo seria "c:\Delphi\Source\SimpleGraph\SimpleGraph.pas". Conforme opção (pacote existente ou novo), você deverá preencher as outras informações. Quando clicar em OK, a próxima etapa será utilizar a opção Install para instalar o componente. Pelo que está no código fonte do mesmo, será criada uma paleta chamada "Delphi Area" com o componente nela. Caso você queira colocá-la em outra paleta (uma já existente), basta que você edite o código fonte antes de instalar o componente. Procure pelo procedimento Register e troque o texto "Delphi Area" na chamada: RegisterComponents('Delphi Area', [TSimpleGraph]); para o nome da paleta desejada. Abraços
-
mas, se compilador em questão for C++ e não C, acho que não vai dar - parece que não existe a função no C++ -> Ref. post em DaniWeb
-
Até que enfim.... :D depende de que banco você utiliza:- Se for Paradox, não há suporte a este tipo de "seleção"; - Se for Interbase ou SQLServer (se não me engano, este também), então você teria a opção de TOP no SELECT; - Se for FireBird, então não existe TOP, mas sim FIRST; Resumindo, se não for Paradox é fácil. Caso contrário, o único jeito que conheço é você controlar na mão. Teria duas maneiras: - Controlar o evento OnNeedData do relatório; - Evitar a impressão da banda após impressos os "n" itens, através do parâmetro PrintBand recebido no evento BeforePrint da banda Detail, SubDetail ou Group (o que você estiver imprindo). A vantagem da 1ª opção é que seu relatório só vai processar os "n" itens, enquanto a 2ª processará todos, mas imprimirá apenas os itens limitados. Dúvidas sobre OnNeedData? Se tiver, veja se você lembra deste post ;)
-
André, faz um tempinho tinha passado o olho num componente destes na net. Dei uma procurada e não achei ele, mas um outro que vai fazer a mesma coisa. Só tem que ver se ele vai compilar direitinho na sua versão do Delphi. Acesse este link e baixe o FormShaper; (não se preocupe com o fato de ele mencionar apenas D4 e D5, normalmente é possível compilá-lo em outras versões quando não utiliza recursos específicos) Se preferir não instalar o componente, há o código (praticamente o mesmo utilizado no componente) que você poderá colocar no seu form de Splash, veja o código "shape a form to a bitmap?" (ref. SwissDelphiCenter.ch) Abraços
-
Justamente aquela que indiquei no post (voce leu o comentário que fiz no início do tópico, não o que eu indiquei a você <_<). Mas, vou colocar aqui denovo: Este outro comentário, também está lá no mesmo post: Abraços
-
Eder, a questão do parâmetro pode ter sido viagem minha. É que as coisas já ficaram confusas. Voce começou sem parâmetros na query principal, depois colocou parâmetros para filtrar período, daí no último post você retirou esta cláusula where com os parâmetros da data e eu ainda estava com elas na cabeça e não percebi que você as tinha retirado. Repassando: - Qry1 é a principal (resumo), conterá como resultado uma lista de nomes de pagadores, em ordem decrescente de vl total de frete; - Qry2 é a secundária (detalhe), conterá os detalhes que resultaram no agrupamento total feito na Qry1; - Seu quickreport tem uma banda Detail, onde estão os campos da Qry1 ou eles estão em um GroupHeader - certo?! - Seu quickreport tem uma banda Sub-detail, onde estão os campos da Qry2 - certo?! - Qry1 está vinculada a propriedade Dataset do seu QuickReport - certo?! - Qry2 está vinculada a propriedade Dataset da sua banda SubDetail - certo?! - Qry1 está vinculada a um DataSource; - Qry2 está vinculada ao Datasource da Qry1, via sua propriedade Datasource. Este procedimento tem por objetivo, direcionar a obtenção do parâmetro pag_cnpj a partir da linha atual de Qry1. Assim, não deve ser colocado no código a linha: Query2.ParamByName('pag_cnpj').asString := QUERY1pag_cnpj.AsString; Por favor repasse o check-list e dê um retorno.
-
[resolvido] Salvar Atalho Num Banco E Abrir O Arquivo Correspondente A
uma questão respondeu Micheus em Delphi, Kylix
é apenas uma variação do que se tentou fazer. O relevante é a utilização de ShellExecute ao invés de WinExec.Vendo o caminho no atalho (seu exemplo), lembro de que certa oportunidade o procedimento não funcionava com WinExec e cheguei a conclusão (fazendo testes) de que este só funcionar com nomes curtos (ex. ao invés de C:\Arquivos de programas\Mozilla Firefox\firefox.exe, teria que usar C:\Arquiv~1\Mozill~1\firefox.exe). Então, utilizando ShellExecute este "problema" não ocorre, ele usa os nomes longos. Vamos tirar a dúvida. Altere o seu código para: procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject); var ProgLink :string; begin Datamodule1.Tartigos.Active:= True; if not (DataModule1.TartigosAtalho.AsString <> '') then begin ProgLink := DataModule1.TartigosAtalho.AsString; ShellExecute(0, nil, ProgLink, nil, nil, SW_SHOWNORMAL); { WinExec(PChar(ProgLink), SW_SHOWNORMAL); } end else ShowMessage('Atalho não foi definido'); end; se houver algum erro de compilação com relação ao tipo da variável ProgLink, então faça um type-cast da mesma: ShellExecute (0, nil, PChar(ProgLink), nil, nil, SW_SHOWNORMAL); se não for permitido (não sei se no Delphi 6, string e Pchar já eram equivalentes), então tem que utilizar a abordagem do exemplo que você encontrou na net: procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject); var ProgLink :Array[0..1024] of Char; begin Datamodule1.Tartigos.Active:= True; if not (DataModule1.TartigosAtalho.AsString <> '') then begin StrPCopy(ProgLink, DataModule1.TartigosAtalho.AsString); ShellExecute (0, nil, ProgLink, nil, nil, SW_SHOWNORMAL); { WinExec(PChar(ProgLink), SW_SHOWNORMAL); } end else ShowMessage('Atalho não foi definido'); end; Abraços -
[resolvido] Salvar Atalho Num Banco E Abrir O Arquivo Correspondente A
uma questão respondeu Micheus em Delphi, Kylix
Altere para: if not (DataModule1.TartigosAtalho.AsString <> '') then você deve fazer a negação do resultado do teste => DataModule1.TartigosAtalho.AsString <> '' e não a negação da string => not DataModule1.TartigosAtalho.AsString - isto não é possível mesmo. bobeira minha não ter percebido antes. outra coisa, o teste é com '' sem o espaço no meio das aspas, ok?! porque você está comparando o campo com uma string vazia. Abraços -
[resolvido] Salvar Atalho Num Banco E Abrir O Arquivo Correspondente A
uma questão respondeu Micheus em Delphi, Kylix
Marcos, a segunda linha é redundância - retire-a. esta prática pode até funcionar, mas não é o ideal. A melhor opção é sempre utilizar o Field do dataset. Se você adicionou os campos ao seu dataset TArtigos, você deve ter um componente TArtigosAtalho (do tipo TStringField) lá no seu DataModule1. É ele que você deveria utilizar (ficaria assim: if DataModule1.TArtigosAtalho.AsString <> '' then ...). Já pensou na encrenca que você vai arrumar quando estiver trabalhando com números formatados? Um campo destes, utilizando o método AsFloat do Field resultará em um valor numérico que pode ser diretamente manipulado (ex. ... := TabProdutoVlPreco.AsFloat *10), mas se você utiliza o componente TDBEdit, você teria que converter Text para um número antes da operação, sujeito a problemas pela presença de pontuação de milhar. não será pelo fato de você não estar atribuindo valor a ProgLink? Veja o teste que você está fazendo: Será que este NOT não estaria sobrando?Se DBEdit5.Text <> '' for verdadeiro (DBEdit5.Text tiver alguma coisa), você está negando ele, ou seja seu IF não é validado. Logo, ProgLink não recebe nada; Já se DBEdit5.Text estivesse vazio, DBEdit5.Text <> '' seria falso e sua negação tornaria válido o IF, fazendo com que o ProgLink receba "algo". O que é que tem em DBEdit5? Que campo está vinculado a ele? (mais uma razão para utilizar Fields - fica mais claro o código) Abraços -
se era o seu caso, esta parte é justamente a que não lhe interessa.
-
Eder, está deste jeito mesmo? Onde está a inicialização dos parâmetros?
-
acho que o exemplo constante deste link pode lhe ajudar.