Ir para conteúdo
Fórum Script Brasil

DiabloX3

Membros
  • Total de itens

    143
  • Registro em

  • Última visita

Tudo que DiabloX3 postou

  1. Em nenhum momento nos listings dele ele tá usando TStream e como diminuir a qualidade de um arquivo em stream.. será que eu vi errado? O que mais se aproxima do que to qurendo é o listing 3 mas lá so fala de quality e compress.. Até +
  2. Agora o link está ok! Encontrei aí um tópico legal que você fala sobre compressão de imagem e já adaptei pro meu caso. Só que fiquei com uma dúvida. Analisando o código que postei acima: eu tenho um IF se a imagem for .jpg ou .jpeg e um else se for outra extensão. No meu caso eu tenho a variável TJPEGImage declarada mas eu apenas utilizo-a no ELSE, ou seja, se não for .JPG. Acontece que as duas linhas que adaptei no código só funcionam (aparentemente) com esse tipo de variável ImageJPG.CompressionQuality := 75; ImageJPG.Compress; Só que eu queria deixar essa compressão habilitada também no caso da JPG ser muito grande e assim diminuí-la. 75 achei uma qualidade boa e reduziu e muito o tamanho de umas imagens BMP que eu tinha aqui. Queria fazer o mesmo com o JPG mas eu utilizo TStream e TFileStream no prmeiro IF. Como posso definir qualidade então? Abraço
  3. Jhonas, obrigado por postar. Único problema é que os 3 links que me passou redirecionam para a home page do ScriptBrasil ehehe Abraço
  4. Olá, tenho pesquisado mas por se tratar de um tópico o qual estou juntando 2 combinações de programação que encontrei seja mais difícil uma resposta exata. O caso é que tenho um form com cadastro e nele posso adicionar a foto do cidadão. Quero gravar e depois visualizá-la de volta no form ou gerar o relatório com ela e imprimi-lá. A diferença é que quando clico no botão selecionar foto eu vou fazer uma verificação da extensão da minha img. Se ela for ".jpg" eu simplesmente quero gravá-la no BD. Caso seja qualquer outra extensão eu quero convertê-la antes de gravar. Estou usando Delphi 7, Firebird 2.5, Campos Blob sub_type 0, clientdataset e dbexpress Botão Selecionar foto ----------------- var ImageJPG: TJPEGImage; BlobStream: TStream; FileStream: TFileStream; begin if OpenPictureDialog1.Execute then if (ExtractFileExt(OpenPictureDialog1.FileName) = '.jpg') or (ExtractFileExt(OpenPictureDialog1.FileName) = '.jpeg') then begin FileStream := TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead or fmShareDenyWrite); BlobStream := dmCadastro.cdsCadAlu.CreateBlobStream(dmCadastro.cdsCadAluALU_FOTO,bmWrite); ImgFoto.Picture.LoadFromFile(OpenPictureDialog1.FileName); edtCaminhoImg.Text := OpenPictureDialog1.FileName; try BlobStream.CopyFrom(FileStream,FileStream.Size); finally FileStream.Free; BlobStream.Free; end; end else begin ImageJPG := TJPEGImage.Create; try if ConvertImage(OpenPictureDialog1.FileName, ImageJPG) then begin ImgFoto.Picture.Assign(ImageJPG); dmCadastro.cdsCadAluALU_FOTO.Assign(ImageJPG); edtCaminhoImg.Text := OpenPictureDialog1.FileName; end; finally ImageJPG.Free; end; end; Função usada pra converter imagem --------------- function TfrmCadAlu.ConvertImage(SrcName: string; DstPic: TGraphic): Boolean; var Picture: TPicture; ImageBMP: TBitmap; begin Result := False; Picture := TPicture.Create; try Picture.LoadFromFile(SrcName); ImageBMP := TBitmap.Create; try ImageBMP.Width := Picture.Width; ImageBMP.Height := Picture.Height; ImageBMP.Canvas.Draw(0, 0, Picture.Graphic); DstPic.Assign(ImageBMP); Result := True; finally ImageBMP.Free; end; finally Picture.Free; end; end; Não estou muito certo sobre o funcionamento dela e por isso não estou muito confiante, por isso a dúvida. Como devo fazer pra gravar sempre JPG no banco? Resolvi assim pra tentar não deixar o banco muito grande Abraço
  5. Ah legal! Obrigado pela dica Jhonas. Abrço
  6. Certo, no segundo caso posso fazer sem o try except mas e quanto ao qual ser mais garantido?
  7. Tenho uma dúvida sobre codificação na hora de gravar estou com o seguinte código try dmCadastro.cdsCadastro1.Post; dmCadastro.cdsCadastro1.ApplyUpdates(0); dmCadastro.cdsCadastro2.Post; dmCadastro.cdsCadastro2.ApplyUpdates(0); except on E:Exception do begin raise Exception.Create('Erro ao gravar:' + E.message); dmCadastro.cdsCadastro1.CancelUpdates; dmCadastro.cdsCadastro2.CancelUpdates; end; end; Uma outra forma de fazer (que eu vinha fazendo) é try dmCadastro.cdsCadastro1.Post; if dmCadastro.cdsCadastro1.ApplyUpdates(0) <> 0 then dmCadastro.cdsCadastro1.CancelUpdates dmCadastro.cdsCadastro2.Post; if dmCadastro.cdsCadastro2.ApplyUpdates(0) <> 0 then dmCadastro.cdsCadastro2.CancelUpdates o except seria igual só que sem o cancelupdates Dúvida: Qual dos dois métodos é mais garantido? Se levar em conta que o cursor vai chegar no IF <> 0 e pular diretamente pro except então não vai entrar na linha de CancelUpdates eu teria que por o Cancel no Except, porém fazendo um teste aqui eu vi que tendo os 2 Cancel no Except, um deles não é executado... o delphi pula um dos Cancel... Qual seria o correto?
  8. OK, de acordo! Obrigado Abraços
  9. Na verdade estava acontecendo outra coisa aqui... não tenho certeza mas acho que era porque estava usando uma versão Alpha do FB e ÀS VEZES quando dava Connect ele conectava de uma forma que entendia a instrução, ÀS VEZES conectada de uma forma que não entendia... muito estranho.. agora troquei a versão e parece estar funcionando normal.
  10. aheuah vai parecer mentira, mas agora funcionou!! Ontem eu tentei essa forma + de 10x e nada. Anyway, obrigado Jhonas! edit: Walah... instalei o IBExpert 2011 e configurei o server pra Firebird 2.5 e ... Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, char 13. 1. o mesmo de antes quando postei o tópico.. como pode isso?
  11. Achei meio confusa sua explicação, Jhonas. Você acabou falando as coisas meio juntas e eu acabei por não saber qual eu deveria usar (fiquei na mesma) e o por que não estou conseguindo usar o win_ptbr com o FB 2.5 (não veio junto() e se tem alguma coisa a ver com a versão do interbase (ODS version - e talvez como atualizá-la). Esse primeiro exemplo que você deu eu tinha encontrado em um tópico seu anteriormente mas assim como cara falou não tem como prever tudo o que a pessoa vai digtar, tem que usar collate mesmo. Eu fiz um teste com o pxw_intl850 e consegui ordernar da maneira que eu quero e também consegui digitar "A" e me trouxe registros com "Á Ã" mas se isso deu certo e é isso que o win_ptbr faz, eu posso usar o pxw_intl850 sempre?
  12. Por que todos os sites, inclusive apostilas do FB falam que o banco suporta o comando First (1) ou First 1 (sem o parenteses) + nome do campo form tabela e aqui esse sql dá como First UNKNOWN ou o "1" como unknown? Eu mesmo me lembro de ter usado uma vez mas agora não ta funcionando mais, do nada ... como isso? Abraços
  13. Olá to com um probleminha aqui. tenho o ibexpert 2007 e firebird 2.5 instalados. fiz um form de consulta no delphi com edit e nele a pessoa pode digitar acentos de todos os tipos e no meu BD eu defini como charset win1252 e o collate automaticamente foi para win1252. acontece que ele está diferenciando palavras acentuadas das não acentuadas. pesquisei até agora mas não vi um tópico solucionando o meu problema. todo mundo fala pra definir o campo como collate win_ptbr. para isso eu tenho q ter essa opção disponível, o que não é meu caso... quando tento criar um campo "nome varchar(10) collate win_ptbr dá erro e fala que esse collate é desconhecido, e pra alterar sem ser via codigo, aparece 5 opções com PXW no começo e + essa Win1252. O que eu quero é saber porque isso esta acontecendo e porque SÓ EU não tenho como trocar e como resolver isso pra poder pesquisar josé = jose = JoSé Não sei se tem alguma coisa a ver com o problema mas andei vendo que para o fb2.5 o ib deveria mostrar ODS 11.2 no entando o meu esta mostrando 10.1 abraços
  14. Na imagem do Line/Fast Line do gráfico aparecem duas linhas, uma vermelha e uma azul e estou tentando implementar as duas no sistema mas o máximo que consigo é fazer aparecer uma só mudando de cor no decorrer do eixo X. Gostaria de 2 exatamente como no exemplo mas não consegui inseri-las desse modo. Alguém tem uma dica? O código que estou usando é este while not qry_mov_contas.Eof do begin valor := qry_mov_contas.FieldByName('TOTAL_MOV_C').AsFloat; data_grafico := qry_mov_contas.FieldBYName('MX_DATA_EMISSAO').AsString; if qry_mov_contas.FieldByName('TIPO').AsString = '0' then cor := clBlue else cor := clRed; BarraMov.AddY(valor, data_grafico, cor); LinhaMov.AddY(valor, data_grafico, cor); qry_mov_contas.Next; end; Agora um probleminha quanto as barras. Eu tenho uma sql que me retorna Créditos e Débitos de um período. No gráfico sai no eixo do X as datas que eu selecionei. Então no dia 01/01 por exemplo eu tenho uma barra azul com crédito e no mesmo dia uma barra vermelha com o débito e teria que ter até uma terceira com o saldo. Acontece que não consigo colocar o label "01/01" no meio dessas 3 barras sem se repetir. Do modo que fiz fica 01/01 pra cada barra. Tem como juntar tudo e centralizar a descrição do eixo X? abraço
  15. Agora funcionou, obrigado Jhonas. Só me falta 1 coisa... no Fortes eu tenho como opção de escolha a banda do tipo ColumnFooter. Qual é a opção equivalente no Quick? Só tem ColumnHeader e PageFooter não serve, precisa estar logo abaixo do summary. 2 summary também não funciona. abraço
  16. Então faça um if if (edtLogin.Text = '1') and (edtSenha.Text='1') then //acessa o sistema
  17. No fortes report não tem nada do tipo OnPrint, mas resolvi fazer no quick mesmo. Nele inseri uma banda header e uma detail. No detail coloquei alguns texts e um label que vai receber os valores e procedi assim procedure TfrmListagemMovEstoque.btn_visualizarClick(Sender: TObject); begin Application.CreateForm(TfrmRelMovEstoque, frmRelMovEstoque); . . . frmRelMovEstoque.frMovEstoque.Preview; end; OnPrint procedure TfrmRelMovEstoque.lbl_saldo_diaPrint(sender: TObject; var Value: String); var i : byte; estoque_inicial : real; begin estoque_inicial := 510; qry_mov_estoque.First; i := 1; while not qry_mov_estoque.Eof do begin if i = 1 then begin if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then lbl_saldo_dia.Caption := FloatToStr(estoque_inicial - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat) else lbl_saldo_dia.Caption := FloatToStr(estoque_inicial + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat); end else begin if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat) else lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat); end; Value := lbl_saldo_dia.Caption; qry_mov_estoque.Next; i := i+1; end; end; Não estou conseguindo controlar o avanço do DataSet nesse .Next, está mostrando só uma linha (a última, como antes) o dataset do relatório está ligado nessa qry_mov_estoque também. O que pode estar errado?
  18. E quando não existe o evento OnPrint na banda nem no label? Tentei no BeforePrint mas ele repetiu igual pra todos (não surgiu efeito nenhum). A idéia é essa mesma que você falou Jhonas, mas onde seria mais indicado sendo que não tem esse evento (Subdetail também não tem esse evento) abraço
  19. Estou montando um relatório no qual preciso ter na banda Detail um label ou um dbtext mas que receba os dados de variáveis. O DBText funciona bem quando ligado ao DataField e assim ele se duplica de acordo com o avanço do dataset, o problema é quando preciso fazer operações com valores em variáveis e então mostrar um valor diferente em cada registro do dataset. Independente de label ou dbtext (na propriedade .Text) só consigo visualizar o último registro de todas as operações que efetuei. Como faço então se quero jogar valores de variáveis na banda detail? i := 1; estoque_inicial := 510; while not frmRelMovEstoque.qry_mov_estoque.Eof do begin if i = 1 then begin if frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(estoque_inicial - frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat) else frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(estoque_inicial + frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat); end else begin if frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(StrToFloat(frmRelMovEstoque.lbl_saldo_dia.Caption) - frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat) else frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(StrToFloat(frmRelMovEstoque.lbl_saldo_dia.Caption) + frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat); end; frmRelMovEstoque.qry_mov_estoque.Next; i := i+1; end; o lbl_saldo_dia aparece igual em todas as linhas.
  20. Pelo que entendi dessa explicação você teria que fazer uma verificação para todos os componente do form -> if cont :=0 to componentcount -1 e verificar se ele é do tipo TCheckbox. Se for, seta o checkbox.checked := True;
  21. Aí você diz que não sabe como fez com um memo? Pegou da internet o código e colocou sem saber ou não soube dizer claramente o que você quis expressar? WebBrowser1.OleObject.document.all.item('txtemail_paciente',0).value:=edit1.Text; WebBrowser1.OleObject.document.all.item('txtmsgm',0).value:=Memo1.Text; Você dizia que precisa carregar os emails que vem de um memo, mas pelo código é apenas na mensagem pro amigo(paciente) que vem de um Memo. De qualquer forma o .text vai lhe trazer tudo que está contido no componente. Talvez você possa fazer um count para as linhas do memo e ir adicionando uma a uma ou usar um combo e ir adicionando os items contidos dentro dele, 1 a 1 também com um for. abraço
  22. Não é no formulário que você vai dar o Preview, é no quickrep ... frmReportCliente.QuickRep1.Preview abraço
  23. Vale lembrar que variável real já tem como retorno o tipo double -> Real: Double. Isso funcionaria ou seria melhor usar variáveis do tipo Currency em todo o sistema quando a questão é fazer comparações? Outra coisa, você intende por mais correto usar Float, Double/Precision ou Numeric 18,2 em campos monetários no Firebird? abraço
  24. Jhonas, voltei a olhar o tópico e o caso é o seguinte: o edit2 e o edit6 foram os que me retornaram o valor de 251,36. Coloquei ainda o edit1 recebendo 251,36799999999 e o valor retornado foi 251,36. Porém não dá pra confiar nesses valores. Como expliquei na abertura do tópico AS VEZES é retornado 251,36, AS VEZES 251,37 . Depende muito (de não sei o que além) dos numeros que estou trabalhando. Juntar o int com a multiplicação *100/100 como no edit6 não resolve o problema por completo pois se estiver utilizando variáveis com o valor real pode acontecer como no exemplo do tópico, ele retroagir um valor. Inexplicavelmente isso acontece mesmo se utilizar valor := preço*100 valor := Trunc(valor) valor := valor/100 até nessas circunstâncias o meu valor pode vim errado. Não entendo que tipo de operação o Delphi tem por de tras pra fazer uma multiplicação tão simples e retornar valroes incompatíveis. Se puder me ajudar a entender seria de grande ajuda. p.s: eu comentei novamente no tópico Commit x IBX, acho que passou e você acabou esquecendo de ver, se puder dá outra comentada lá também. Abraço
×
×
  • Criar Novo...