Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Micheus

    StringGrid

    vagner, este ocorre quando você está fazendo a conversão com a função StrToFloat, não é mesmo?! E ela é bem bem exclarecedora: '' não é um valor de ponto flutuante válido. É verdade que naquele exemplo no post mencionado, eu não fiz o tratamento, porém deve ficar sabido que nenhuma string numérica deve ser convertida sem que seu conteúdo seja testando antes, caso contrário, você obterá este erro. Há, ainda, um erro similar no caso de o valor no string não for válido, como no caso de conter letras (por exemplo). Ou seja, tem que testar, pelo menos, se o valor da célula não está vazio (motivo deste erro) - use algo como: ... if Trim(StringGrid1.Cells[1,2]) <> '' then valor := StrToFloatTrim(StringGrid1.Cells[1,2])) else valor := 0.0; // caso o nulo seja aceito como 0; do contrário gere msg. de erro. Total := Total +valor; ... Abraços
  2. Micheus

    StringGrid

    vagner, a resposta está neste outro post. Qualquer dúvida extra, poste aqui. Abraços
  3. Micheus

    DBGRID por grupo

    rodrigosil, esta imagem não poderia ser um pouquinho maior? :unsure: Acho que entendi melhor o que você quiz dizer e, neste caso, é um grid até mais simples que aquele do outro tópico que citei. De qualquer modo, não lembro de ver algum componente com esta característica - é certo que deve haver, mas dificilmente free e com os fontes. O componente InforPower ou o ExpressVerticalGrid fazem mais ou menos isto que você disse querer, só que são pagos. Abraços
  4. Januário mendes, vejo que você já sabre trabalhar com parâmetros e o que você quer fazer passa justamente por ai. Voce precisará usar mais parâmetros na cláusula WHERE. Deverá incluir um que filtre a cidade. Atualmente você está testando um campo CODIGO (código do quê?) e alí deverá incluir os outros filtros que você queira usar. No caso da Idade, como você tem gravada a data de nascimento, se a idade for baseada apenas na diferença entre a parte referente ao ano, você pode passar como parâmetro esta informação e comparar com a diferença do ano atual e o ano da data. Em geral para tirar parte de uma informação de um campo date ou time, você usa a função EXTRACT. Mas, você ainda não mencionou qual o banco de dados você está usando. Percebe agora a importância de postar estas informações básicas, quando se trata de acesso a banco de dados? Já poderíamos ter chego até aqui na primeira resposta que você recebeu. ;) Abraços OBS: quando postar código, utilize a tag CODE (selecione o código e use o último botãozinho - aquele depois do balãozinho), assim a visualização ficará mais fácil.
  5. Henrique Neto, sugiro que você tecle F1 na propriedade EditMask na janela Object Inspector para ver todas a opções possíveis. Mas basicamente, toda a posição onde obrigatoriamente deva ter um número, você usa o "0" (zero) na máscara, como no exemplo: "990,00;1;_" Abraços
  6. Januário mendes, parece que você mesmo já lhe deu a resposta. Mas, se você quer auxílio para montar a consulta SQL, precisa colocar aqui as tabelas envolvidas, seus campos e qual banco de dados está usando. Assim, fica mais fácil o pessoal lhe dar opiniões. ;) Abraços
  7. warlockplus, ainda que eu não possa lhe ajudar muito, convém que você informe qual versão do banco Firebird você está usando, porque o uso de cursores da forma como abaixo, está disponível a partir da versão 2.0. No caso de ser a versão 1.5, terá que ser usado outro recurso (FOR SELECT ...) Outra coisa, não entendi direito qual o resultado (não os valores) que você obtém com este código, porque não tinha visto o uso de "envio" de mensagens ao usuário (PRINT) em um laço, ou ocorrendo mais que uma vez em um único procedimento. Normalmente, vemos algum tipo de teste e conforme o resultado se enviava um RAISEERROR (que me parece executar tarefa semelhante - gerar mensagens de erro, segundo a documentação: Using PRINT). Para o caso de gerar uma mensagem de erro para o usuário, no Firebird isto é feito através do comando EXCEPTION Firebird 2.0 Language Reference Firebird 1.5 Language Reference Abraços
  8. pois então, este último "esqueminha" era apenas para utilizar o ENTER de modo a executar o post. A questão da marcação dos botões, pensei já ter explicado que houve falha no Delphi 3, mas não com o Delphi 7 e como ocorre com a sua versão (Delphi 4), parece que esse problema foi corrigido bem depois. :( muito boa solução. Parabéns! :D Abraços
  9. Micheus

    DBGRID por grupo

    rodrigo, acho que é o mesmo assunto deste outro tópico: Grid Que Expande Como Uma Tree View? - veja este post Abraços
  10. DeMoNiAkO, você poderá fazer uso de caminhamento recursivo para fazer este somatório. Dê uma olhada no exemplo que "linkei" neste post. Dentro dele tem uma função para o caminhamento recursivo - veja se você consegue adaptar a sua situação. Para cada pai na árvore você precisará caminhar até o nó mais interno (quando não há mais filhos), neste ponto, você soma os nós que são irmãos (Sibling) Abraços
  11. Vivendo&Aprendendo, uma curiosidade: que negócio é esse de armazenado em um servidor ftp? Por acaso este servidor é destinado a downloads frequentes, algo que possa dificultar o atendimento das solicitações ao gerenciador do banco de dados MySQL? Abraços
  12. Jhony, isso não vai lhe trazer problemas futuros? Tipo quando comparar horas ou ordená-las? Que componente você está usando para acessar seu banco Access?
  13. Foi por isso que mencionei que não sabia se funcionaria no seu D5 (na verdade D4. rsrs)Eu tinha testado no D3 e D7, sendo que no D7 fica corretamente um retângulo pontilhado em torno da imagem no centro do botão. Já no D3, isto só ocorre nos botões desabilitados. Experimente, após sair do último campo, quando o foco estará no DBNavigator e use as setas para o lado em direção a algum botão que esteja desabilitado (se não houver algum, apenas para teste, ative a visualização de todos os botões do DBNavigator - propriedade VisibleButtons). Confirmado isto, parece que o "problema" persiste na sua versão também. Por acaso, você teria os fontes do componente (é a unit DBCtrls.pas)? como disse, é uma condição que já existe, mas contornável.Como o componente TDBNavigator não tem evento para tratamento do teclado, coce pode habilitar a propriedade KeyPreview do form onde ele está e colocar o seguinte código no evento OnKeyPress (do form): procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (ActiveControl = DBNavigator1) and (DBNavigator1.DataSource.State in [dsInsert, dsEdit]) then begin case Key of #13 : DBNavigator1.DataSource.DataSet.Post; #27 : DBNavigator1.DataSource.DataSet.Cancel; end; end; end;estamos verificando quem gerou o evento e se o dataset está em modo edição ou inserção. No caso da pressionado o ENTER fazemos o post e se pressionado o ESC, cancelamos a edição/inserção. Abraços
  14. Micheus

    QuickReport

    Paulo Feitosa, pelo que você narrou inicialmente e o que postou agora, não conseguir ver a relação entre o uso do quickreport e do seu erro. Pelo último post, o problema está ocorrendo na sua rotina de validação do CPF, que em teoria você não deveria estar utilizando ao gerar o relatório. Assim, parece que o foco da atenção deveria ser esta sua função. Voce a fez ou pegou pronta da net (existem várias)? Poderia postar o código dela aqui, talvez alguém possa ajudar com a verificação da mesma. Abraços
  15. Micheus

    mudar cor do painel

    Xafan, não dá para fazer isto sem reescrever o método paint, ou seja, criar um componente derivado do TPanel e processar a pintura dele. Nesta situação, parece melhor opção criar um botão customizado - ficam aqui dois links com código fonte: TColorButton - button with color properties Color Button Caso prefira usar mesmo um Panel, o jeito é seria fazer um pequena "gambiarra": deixa o Caption dele vazio e coloca um TLabel centralizado com o texto do "botão". Daí, você desabilita o Panel e o Label e terá o efeito desejado. Abraços
  16. Yelken Heckman, já que aparentemente estes controles vão ser mesmo usados via toutch-screen, por que é que você não muda esta configuração direto no Windows. Acesse as propriedades de vídeo, vá na guia Aparência e clique em Avançada. Então, selecione o item desejado e altere seu tamanho - no seu caso, seria Barra de Rolagem. Abraços
  17. Eder, não sei se irá funcionar com o seu D5, mas não custa tentar. "Hackear" componentes, como feito no link postado pelo colega Jhonas, as vezes, pode não ser tarefa simples ou não ser possível de utilizar para atingir nosso objetivo - e este é um caso. O componente TDBNavigator utiliza uma variável private (FocusedButton) para gerenciar qual botão "está com o foco" e, não sendo uma propriedade, não podemos expô-la para nossa aplicação (a menos que mudemos isto no código fonte, é claro). Os botões são derivados da classe TSpeedButton e a simulação do foco é implementada no método Paint desta classe (TNavButton). Acessar um dos botões em si, é simples já que são adicionados à propriedade Componentes do TDBNavigator. A questão fica sobre como poderemos "setar o foco" do botão. Verificando o código do componente, é possível verificar que o método BtnMouseDown, atribuido ao evento OnMouseDown de cada botão na sua criação, basicamente manipula o foco dos botões e inicializa a variável que não tínhamos acesso antes. Assim, a idéia foi a de obter o botão referente a opção desejada (nbPost) e chamar seu evento OnMouseDown. Veja como ficou o código: procedure .... (Sender :TObject); var BtnPost :TNavButton; begin BtnPost := TNavButton(DBNavigator1.Components[Ord(nbPost)]); BtnPost.OnMouseDown(BtnPost, mbLeft, [], 0, 0); end; Supondo que no seu form, a ordem de tabulação do componente TDBNavigator seja logo após a do último campo informado (seja de um DBGrid ou TDBEdt), eu acredito que você pudesse colocar este código no evento OnExit deste componente - que é quando o DBNavigator estará recebendo o foco (isso, apenas, se estiver habilita sua propriedade TabStop). OBS: Estando o DBNavigator com o foco em um botão específico, o ENTER não tem função - neste caso a barra de espaço aciona o botão (a exemplo que como funciona com com os CheckBox) Abraços
  18. jedinaru, se vier a usar esta abordagem para menus, dê uma olhada neste post que, apesar de não ser exatamente da forma que você pretende implementar, pode ser aproveitado o conceito sobre a aplicação nos menus. Abraços
  19. Micheus

    mudar cor do painel

    Xafam, a sugestão do colega Rodrigo Flores é correta. Porém, vendo seu questionamento deste modo: "desabilitar a fonte do Panel" (...) quando atribuir False a sua propriedade Enabled, que fique igual ao que ocorre com um Label. Fico com a impressão de que você estaria se referindo à forma de visualização do texto (Caption) do Panel (ou mesmo de um GroupBox). Se for isto, procure deixar mais claro o que você pretende fazer. Ainda na abordagem do colega Rodrigo Flores, deixo aqui uma função "genérica" que uso há algum tempo. Ela pode ser usada para desabilitar os itens que estão inseridos dentro de qualquer componente que possua outros componentes, como TGroupBox, TPanel, TTabSheet, TForm, ...; Pode ser adaptada a gosto para tratar componentes específicos. No meu caso, queria desabilitar os Labels e apenas marcar os DBEdits como somente leitura (para não tornar a visualização difícil dos dados): procedure EnableGroupedControls(GroupControl :TControl; Enable :Boolean); var Idx :Integer; Form :TForm; Control :TComponent; begin Control := GroupControl; // Vamos a "caça" do Form onde o componente está while not (Control is TForm) and (Control.GetParentComponent <> nil) do Control := Control.GetParentComponent; Form := Control as TForm; // Com o Form em "mãos", varremos seus componentes // procurando por componentes com a característica desejada, // ou seja, que esteja no GroupControl for Idx := 0 to Form.ComponentCount -1 do begin Control := Form.Components[Idx].GetParentComponent; if Assigned(Control) and ((Control.Owner = GroupControl) or (Control = GroupControl)) then begin if Form.Components[Idx].ClassType = TDBEdit then TDBEdit(Form.Components[Idx]).ReadOnly := not Enable else if Form.Components[Idx].ClassType = TLabel then TLabel(Form.Components[Idx]).Enabled := Enable; end; end; end; Exemplos de uso: // desabilita os componentes colocados no TabbedNotebook1, conforme os "if's" EnableGroupedControls(TabbedNotebook1, False); // habilita os componentes colocados no Panel1, conforme os "if's" EnableGroupedControls(Panel1, True); // chamado no form, desabilita os componentes colocados nele, conforme os "if's" EnableGroupedControls(Self, False); Se for manipular apenas a propriedade Enable de qualquer componente visual, então é só tirar os if's que testam ClassType e substituir por: if Form.Components[Idx] is TWinControl then TWinControl(Form.Components[Idx]).Enabled := Enable; Abraços
  20. você utilizou a última sugestão que fiz no post#10. Isto que você disse que ocorreu, parece muito com o que comentei naquele post em relação a sugestão do colega Luis Ricardo. Leia ele de novo e qualquer coisa, poste o código aqui para vermos como ele está agora. Abraços
  21. Thiago, quando tiver amadurecidas estas dúvidas, para não bagunçar este tópico, crie outro tópico para cada assunto. Abraços
  22. Micheus

    Duvida

    como o "%" vai apenas no final, caso ainda não exista, você pode criar um índice para este campo na tabela - irá agilizar bastante a busca. Abraços
  23. Outra opção usando os recursos do próprio Delphi: tblCadForn.FieldByName('FORCOD').AsString := FormatFloat('00000', StrToInt(QueryMaxForn.Fields[0].AsString)+1); Abraços
  24. paulobergo, neste assunto, vale o que o colega Denis Courcy lhe sugeriu e como ele frisou, para comparação por imagem é importante que o posicionamento da câmera não mude. Quanto ao OCR, seria a opção mais complexa, mas para ter um ponto de início, dê uma olhada neste link: Delphi DCR - Digital Character Recognition (source free) ... e neste outro, para ver o que há de projetos sobre OCR no SourgeForce. Abraços
  25. biakeffer, veja com oeste exemplo simplista se comporta ai na sua estação de trabalho: TSTSysTray.zip Se o resultado for positivo, no pacote está a versão do SysTray que eu usei. Abraços
×
×
  • Criar Novo...