Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Acho que agora está mais de acordo com o que você precisa (ou com o que eu entendi :D) Apenas, observe que o seu indexador z deverá ser incrementado apenas quando o índice atual for utilizado, ou seja, apenas depois que você executa esta atribuição: vet_3 [z] := i, é que você deve executar esta: z:= z + 1 Da forma como está, você sempre incrementa z, independente de o seu teste (se (vet_1 = vet_2 [x]) então) ser válido. O ideal é que você faça o teste de mesa e confira que o resultado é realmente o que você espera. Abraços
  2. biakeffer, se esta foto diz respeito ao registro correntemente em inserção/edição você poderia substituir o seu TImage (FOTO) por um TDBImage. Nele, configure as propriedades DataSource e DataField de acordo com o que você tem no datamodule. Como resultado, este componente sempre mostrará a foto gravada no banco para o registro atual. Mas se for para manter com um TImage, a saída talvez seja algo assim: var MS :TMemoryStream; begin ... if OpenPictureDialog1.Execute then begin FOTO.Picture.LoadFromFile(OpenPictureDialog1.FileName); MS := TMemoryStream.Create; try FOTO.Picture.Graphic.SaveToStream(MS); (DataModule1.Table1.FieldByName('foto') as TBlobField).LoadFromStream(MS); finally MS.Free; end; end; end;note que seu campo de imagem deverá ser do tipo BLOB (TBlobField). Conforme o tamanho da imagem que você pretenda armazenar, pode ser útil avaliar o tipo de campo BLOB a utilizar - post Se precisar converter as imagens para JPG (caso não sejam), tem uma função que postei há algum tempo - post.
  3. eu quiz dizer que esta formatação (via DisplayFormat) que se faz nos fields em qualquer tipo de dataset (via o duplo-click), funciona direitinho para edits, grids e tal. Mas não é utilizado pelo quick. Para ele mostrar o campo formatado direitinho como você quer, tem que utilizar a propriedade Mask.
  4. Isto não é uma idéia totalmente correta de um TDBGrid. Aliás, acho que este é um ponto em que muitos se atrapalham. (é o que vejo por alguns posts que aparecem).Você pode navegar nas colunas de um DBGrid através da propriedade Columns, e isto pode ser útil porque o DBGrid não necessariamente apresenta todas as colunas retornadas pelo dataset (caso você adicione apenas algumas). Já na questão movimentação linha, não há como indexá-lo, não do modo como é feito com um TStringGrid, onde você acessa Linhas, Colunas e Células. A movimentação das linhas se dá pela leitura sequencial dos registros (linhas) do dataset. Quando do uso de multi-seleção, a propriedade SelectedRows, não guarda um índice para a linha, mas sim um ponteiro para a posição do registro no dataset (o tal TBookMark). E se nenhuma das opções do colega Denis Courcy, lhe atender, dê uma olhada neste tópico: Adicionando Função Copiar Dados De Um Dbgrid Em Sua Aplicação Acredito que você consiga facilmente adaptá-la a sua necessidade. Abraços
  5. Na verdade este procedimento acaba não tendo validade para o QuickReport - em seus componentes (QRDBText e QRExpr) você deverá utilizar a propriedade Mask para formatar a saída. pode estar ocorrendo de que o tipo do campo inicializado seja outro, tipo TBCDField ou TFMTBCDField. Você poderia neste caso tentar fazer o type-cast para a classe ancestral à ambos: TNumericField.De qualquer modo, quanto ao quick, vale o que eu disse acima. é uma ótima prática! Quanto ao problema em si, é bem estranho. Não sei de uma situação em que o componente TQRDBText mostre o nome do campo ao invés de seu valor. Já experimentou excluir o componente e incluí-lo denovo? (vai saber, as vezes isso funciona :blink:) Verificou se só está ocorrendo com este relatório, ou se ocorre em outros? Abraços
  6. É me desculpe: Mas então as variaveis ficaram assim: Entrada, Saida, Total : Real; no lugar de Valor1, Valor2, Valor3 : Real; Então mas como ficaria ? Pois não entendi de como ficaria essa linha que está dando o erro: Entrada.Caption := FloatToStr (Entrada); Não explicar.Mas vou dar uma sugestão: renomeie o seu componente QRText - Entrada - para QTEntrada.
  7. K!ko, bom que resolveu o problema. Mas, acho estranho este tipo de erro, porque não existe esta diferenciação entre maiúsculas e minúsculas para qualquer comando ou nome de campo que você coloque na instrução SQL. (pelo menos da versão >1.5) Penso que pudesse ser apenas alguma "sugeirinha" perdida, que foi elimina quando você editou a consulta. Já tentou colocar o nome da tabela em maiúscula de novo? Quando você migrou do Interbase para o Firebird, a DLL client (GDS32.DLL) foi substituída pela do Firebird? Abraços
  8. Felipe, abri um novo tópico para este seu assunto. Seguimos daqui: Problema com uso de Mask no quickreport
  9. Robinhocne, porque é que você não deixa para mudar as coisas depois que resolver o problema? <_< Agora o tal Total virou Entrada? e Valor1 também? :blink: A mensagem de erro, sugere que você não mudou o nome da variável Valor1, mas sim, que está passando o parâmetro errado (um TQRText) para a função FloatToStr que está "programada" para receber um "float" - por isso ela menciona que não existe uma redefinição para esta função (o tal overload). Outra coisa, eu havia mostrado no exemplo que o tal Total recebia a conversão do tal valor1 antes de chamar Preview. E não foi por acaso. Ocorre que antes de você visualizar o seu relatório, ele já deve ter o label com seu texto inicializado. De que vai servir para você inicializar o label, depois de seu preview ser fechado (é quando a linha de atribuição será executada)?
  10. Correto. Na verdade as linhas terão o mesmo tamanho sim, pelo menos em número de caracteres. Vai do uso efetivo que você fará disso. Mas a questão visual, depende apenas da fonte que você estará utilizando. Por exemplo, se você abrir no Word ou qualquer outro editor que lhe permita modificar o tipo da fonte, basta optar por COURIER em que cada caracter tem largura fixa em número de pixels. Já se você abrir em um editor no modo caracter (tipo, editores do tempo do DOS, como o Edit.com), provavelmente não haverá problemas. Quanto a este tópico, posso considerá-lo resolvido? Abraços
  11. tenha calma. :DAqui todos podem ajudar, não apenas o moderador. ;) Mas é o seguinte, você está falando de qual componente TQRText ou TQRExpr? Se for um TQRText, como estão configuradas suas propriedades DataSet e DataField? Se for um TQRExpr, como está configurada a propriedade Expression? E como está, exatamente, definida a sua máscara (Mask)? Abraços
  12. Sem dúvida, serve de alerta aos menos avisados. Essas diretivas de compilação estão disponíveis via menu Project->Options. A omissão ("desabilitação") delas tem apenas o objetivo de otimização do código final. Significaria dizer que você tem certeza que esta condição não ocorrerá no seu programa ou que você não quer saber se elas ocorrerão. Evidentemente você deveria estar consciente disto. ;) E, na verdade, não trata-se de um BUG, mas apenas de algumas coisas não são conferidas e "mostradas" a você na forma de erro. É como você fazer um: try aux := 10/0; except end; eu sei que haverá erro, mas não quero saber desta mensagem. é um exemplo extremo, apenas para ilustrar; na época do pascal, era comum para verificar a existência de um arquivo você desabilita os erros de I/O antes de abrir o arquivo (reset) e testar a variável IOResult, para conforme o caso dar uma mensagem amigável ao usuário ou, simplesmente, por não existir, criá-lo (rewrite). Logo após este tratamento, a diretiva era novamente ligada. Abraços
  13. Acredito que você deveria, neste caso, criar um template. Mas, não é complicado apenas alterar a propriedade Size da propriedade Font do seu form a cada vez que adiciona um. Apenas que todos os componentes que forem colocados nele, irão, por padrão (ParentFont=True), assumir o mesmo estilo. Sim, e com isso todo o evento de teclado primeiro será enviado ao form principal, para depois passar para os respectivos componentes. Só altere isto se for fazer uso deste recurso, do contrário, deixe que cada componente receba seu evento.
  14. Aleksander, até pode ficar legal visualmente, mas lembro que ao final, se for utilizar o conteúdo digitado apenas, terá que remover todos estes pontos. Será que vale à pena? Abraços
  15. Você está correto Denis Courcy. Eu mesmo já havia feito menção a isto ano passado. É força do mau hábito. ;) Valeu.
  16. ah! não gostaria de colocar no componente dbclient. gostaria de utilizar esta propriedade mask mesmo felipe, mas não é o que é sugerido no post#4?
  17. Removi o codigo do BeforePrint e fiz do jeito que você passou e dá esse erro, coloquei antes e depois dessa linha de codigo, mas deu a mesma coisa e faltou acrescentar que é no Formulário (FrmRelChequePre.Total.Caption := FloatToStr (Valor1);) Não faltou não! <_< quando você usa with.. do, como está: With TFrmRelChequePre.Create(Application) Do Try Total.Caption := FloatToStr (Valor1); // <<<<<<<<< já está dizendo que Total se refere a algo que está no object ou record usado no WITH, neste caso TFrmRelChequePre ;) E este access violation VOCE introduziu quando resolver colocar: FrmRelChequePre.Total.Caption := FloatToStr (Valor1); Sabe por que? Porque utilizando o WITH, você não está utilizando a variável FrmRelChequePre, e a menos que o form esteja habilitado no auto-create, esta variável realmente não aponta para uma área de memória válida. Observe que escrever: FrmRelChequePre := TFrmRelChequePre.Create(Application); try FrmRelChequePre.Preview; finally FrmRelChequePre.Free; end; é diferente de: with TFrmRelChequePre.Create(Application) do try Preview; finally Free; end; Na primeira a variável FrmRelChequePre é válida, na segunda, você nem se referiu a éla. Abraços
  18. Robinhocne, já que você cria o relatório no mesmo procedimento que faz o cálculo e que o seu QRLabel irá mostrar o valor calculado ali, então experimente fazer a atribuição neste procedimento também: ... valor1 := QryTotais.FieldByName('Soma').AsFloat; With TFrmRelChequePre.Create(Application) Do Try Total.Caption := FloatToStr (Valor1); // <<<<<<<<< QuickRep1.Preview; Finally Free; end; close; e remova este código do seu relatório: procedure TFrmRelChequePre.QRBand4BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin Total.Caption := FloatToStr (FrmLisRelCheques.Valor1); end; Boa sorte!
  19. nego drama, nesta parte: enquanto conta <=10 faca se(vet_2 [cont_2])= (vet_1 [cont])então vet_3 [cont_3] := vet_1 [cont] fimse cont_2 := cont_2 cont:= cont + 1 conta := conta + 1 cont_3 := cont_3 + 1 fimenquanto você teria que estar, verficando: "...procure por cada elemento do vetor 1 no vetor 2 ..." então você tem que variar o indexador de vet_1 de 1 até 10 (para avaliar cada elemento do vetor 1) e, para cada um que você estiver avaliando, você deverá compara com os valores existentes no vetor 2, ou seja, para cada item do vetor 1 avaliado, você deverá comparar com cada item do vetor 2 (de 1 a 10) até que encontre um ou que tenha avaliado todos. Ao menos parece que é isto que o problema pede. Se você observar, no seu enquanto, você não está variando o indexador cont_2, porque ele está recebendo ele mesmo. Logo, você está apenas comparando o elemento 1 de vet_2 com todos os elementos de vet_1. Abraços
  20. não é tão difícil não. E exemplificando já estaria fazendo o programa para você.Mas tudo bem... Eu não tenho como baixar seu projeto porque aqui é bloqueado este tipo de site. Mas, segue um exemplo que funciona. Abra o projeto e, antes de executá-lo, leia com atenção, do início ao fim, os comentários que eu coloquei. Qualquer dúvida... para quem quizer saber: Shoutbox (ref. Wikipédia) para quem quizer testar: Shoutbox Pro (utilize a caixa Comments Please) Abraços WebBrowser.zip
  21. Micheus

    Thread + Projeto

    Jhonas, confira este link porque ele não aponta para o suposto tópico. Acho que seria mais conveniente você colocar o código que implementou para as Threads e, do seu form, todos o resto que dizer respeito a elas. Do contrário, vai ser difícil alguém lhe ajudar. e só para comentar, isto não multi-thread, mas sim uma única thread sendo inciada (Start) 101 vezes.Lembre-se do que o Jhonas citou sobre instâncias. Abraços
  22. cheech, foi bobeira minha - Esqueci do "+". :blush: Seguinte, se você utiliza Delphi7 ou superior, usa a função StringReplace: procedure TForm1.Form1KeyPress... var Frase :String; begin if Trim(edFrase.Text) = '' then Exit; Frase := StringReplace(edFrase.Text, ' ', '+', [rfReplaceAll]); // substitui todos os espaços por "+" if Key = <tecla> then WebBrowser1.Navigate('www.XXXX.com/shoutbox.php?shbox_text=:'+Frase+':&sent=yes'); end; se precisar codificar também caracteres acentuados, você vai ter que obter o código hexa deles. Lembre-se que ser na linha da url tiver que ser colocado um texto assim: cachaça ele muito provavelmente deverá ter que ser convertido para cacha%E7a. Mas teste antes para ver se realmente é necessário ou se o navegador, vai fazer a conversão sozinho. Abraços
  23. página inicial no seu componente WebBrowse? Se sim:WebBrowser1.Navigate('www.XXXX.com/shoutbox.php'); no evento OnKeyDown você testa a tecla e monta sua nova url: if (Key = <tecla>) and (Trim(edFrase.Text) <> '') then WebBrowser1.Navigate('www.XXXX.com/shoutbox.php?shbox_text=:'+edFrase.Text+':&sent=yes'); e por que apareceria no Edit? Abraços
  24. É isto mesmo que está ocorrendo. Experimente colocar um caracter que não seja numérico (já que este é o tipo que a função tratará) e veja que funciona. Tem um pequeno "bug" em não diferenciar o conteúdo da mascara e o caracter efetivamente digitado e que realmente fará parte do texto final. Quanto ao posicionamento, olhando meio por cima no código em jquery.maskedinput.js, tem uma das funções (caret) que faz com que o posicionamento do cursor vá para o final do texto, quando há algum. Isto está no código, logo abaixo do comentário "//Helper Function for Caret positioning" Talvez seja questão de alterar/corrigir o código. Abraços
×
×
  • Criar Novo...