jc Posted February 28, 2008 Report Share Posted February 28, 2008 Olá pessoal! Ainda continuo com essa situação e já postei no fivetech, mas ninguém ainda respondeu. Creio que o fivewin "ainda" não possa fazer algo desse tipo. Explicarei abaixo. Possuo o seguinte código para carregar uma imagem a partir do banco de dados: cResultado := O Resultado da query [ SELECT imagem FROM tabela ] memoWrit( "C:\IMG0001.BMP", cResultado ) oImagem:loadBMP( "C:\IMG0001.BMP" ) oImagem:refresh() id=code>id=code>Gostaria de poder executar o mesmo procedimento acima, mas sem ter a necessidade de criar o arquivo de imagem em disco com o memoWrit. Chamando algum método estilo :loadFromString(), semelhante ao existente no Delphi. Consegui explicar? Grato a todos! Abração! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Editado por - jc on 29/02/2008 11:06:03 Quote Link to comment Share on other sites More sharing options...
jc Posted February 28, 2008 Author Report Share Posted February 28, 2008 Olá pessoal! Ainda continuo com essa situação e já postei no fivetech, mas ninguém ainda respondeu. Creio que o fivewin "ainda" não possa fazer algo desse tipo. Explicarei abaixo. Possuo o seguinte código para carregar uma imagem a partir do banco de dados: cResultado := O Resultado da query [ SELECT imagem FROM tabela ] memoWrit( "C:\IMG0001.BMP", cResultado ) oImagem:loadBMP( "C:\IMG0001.BMP" ) oImagem:refresh() id=code>id=code>Gostaria de poder executar o mesmo procedimento acima, mas sem ter a necessidade de criar o arquivo de imagem em disco com o memoWrit. Chamando algum método estilo :loadFromString(), semelhante ao existente no Delphi. Consegui explicar? Grato a todos! Abração! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Editado por - jc on 29/02/2008 11:06:03 Quote Link to comment Share on other sites More sharing options...
aferra Posted February 28, 2008 Report Share Posted February 28, 2008 Olá Julio, se no da fivetech, que tem o "pai da criança", não obteve resposta é pq não tem como fazer, claro que sempre tem alguém com uma solução mas neste caso...... Alessandroid=blue> FW20d+CL53b+Blk7+@Say+CDX "Aceita o conselho dos outros, mas nunca desistas da tua própria opinião"id=red> Quote Link to comment Share on other sites More sharing options...
vagner Posted February 28, 2008 Report Share Posted February 28, 2008 Olá, Acho q daria pra se fazer com bitblt(), mas não tenho muita certeza , só têm um jeito de saber testando Vagner Wirts VI Encontro está chegando , não perca Quote Link to comment Share on other sites More sharing options...
vailtom Posted February 28, 2008 Report Share Posted February 28, 2008 Creio que daria para fazer em C criando um DIB (bitmap independente de dispositivo) e depois fazendo o passo q o Vagner citou acima... mas seria um código muito complexo. Valeria realmente todo o esforço, visto q podemos puxar de em .RES/.RC oq realmente precisamos? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 28, 2008 Report Share Posted February 28, 2008 Olá, Veja em c:\fwh..\source\winapi LOADBMP.C ICONS.C Espero ajude. Abraços. João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Breno Posted February 28, 2008 Report Share Posted February 28, 2008 Julio, Li uma vez alguém dizer que dá pra fazer assim. Transforme o arquivo em hex (deve ser bit2hex ou algo assime guarde em um campo memo ! Para mostrar a imagem, faça o inverso. Desculpe se to dando um grande fora ! Nunca testei, mas tenho certeza de ter lido que é possÃvel. Breno Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 28, 2008 Report Share Posted February 28, 2008 citação:Julio, Li uma vez alguém dizer que dá pra fazer assim. Transforme o arquivo em hex (deve ser bit2hex ou algo assime guarde em um campo memo ! Para mostrar a imagem, faça o inverso. Desculpe se to dando um grande fora ! Nunca testei, mas tenho certeza de ter lido que é possÃvel. Breno id=quote>id=quote>http://www.google.com.br/search?sourceid=navclient&ie=UTF-8&rlz=1T4SUNA_enBR259BR262&q=bit2hex Ou http://www.google.com.br/search?q=BIN2hex&btnG=Pesquisar&hl=pt-BR&rlz=1T4SUNA_enBR259BR262 João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
vailtom Posted February 28, 2008 Report Share Posted February 28, 2008 Mas isto vai gerar um arquivo muito grande que nao poderá ser gravado em campo memo. Cada campo memo nao pode ultrapassar 64kb... e em hexa isto gerará um arquivo com o dobro do tamanho!! Realmente é um problema.... mas creio que o incomodo que o JC queria destacar seria ao fato de ter que gravar no HD o arquivo antes de le-lo para a janela e, neste caso, teria que se criar o .BMP dos dados em RAM e nao do disco... e isto só é possÃvel usando-se a API do windows mesmo. Editado por - vailtom on 28/02/2008 14:32:17 Quote Link to comment Share on other sites More sharing options...
jc Posted February 28, 2008 Author Report Share Posted February 28, 2008 Galera... valeu pela ajuda. O Linares respondeu via email, dizendo que existe sim um meio de se fazer esse procedimento. Mas solicitou que a pergunta fosse feita via fórum na fivetech. Já postei a pergunta e estou no aguardo da tal resposta! O esquema do Vailton utilizando DIB foi a maneira mais coerente que eu encontrei, mas realmente é complexo demais gerar tal coisa... estou apanhando. Vailton! A necessidade é pelo fato de que o cadastro de produtos precisa ter a foto/imagem do mesmo. Ela será selecionada pelo usuário... ou seja, não tem como estar dentro do resource ou dll. Existe uma rotina em que o usuário, com um leitor de códigos de barra, irá recuperar o determinado produto e, em tela, deverá ser exibida a imagem do mesmo. Isso ocorrerá com vários produtos, várias vezes, muitas vezes por dia. Como um caixa de supermercado. Sempre criar a imagem em disco fica meio incoerente nessa situação, apesar de ser a única atual solução. -- A coisa é por aÃ... enquanto o "Pai" não responder, vou tentando contornar de alguma forma. Galera, valeu mesmo pela atenção! Abração a todos! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Editado por - jc on 28/02/2008 16:38:53 Quote Link to comment Share on other sites More sharing options...
vailtom Posted February 28, 2008 Report Share Posted February 28, 2008 Eu imaginei que seria por algum motivo deste tipo. Mesmo assim, a solução via memowrit() ajuda... porem lendo direto via stream ou string é muuuuito melhor! Vamos aguardar a resposta do Linares, qdo sair, por favor no comunique. Quote Link to comment Share on other sites More sharing options...
jc Posted February 28, 2008 Author Report Share Posted February 28, 2008 Deixa comigo Vailton! Tô no aguardo dessa resposta ansiosamente! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Quote Link to comment Share on other sites More sharing options...
vagner Posted February 28, 2008 Report Share Posted February 28, 2008 Posso dar uma sugestão ? Pq vc não grava a foto no servidor uma vez, e antes de ficar gravando direto, verifica se já existe a foto do produto, se houver, simplesmente apresenta, se não houver aà vc grava lá Vagner Wirts VI Encontro está chegando , não perca Quote Link to comment Share on other sites More sharing options...
jc Posted February 28, 2008 Author Report Share Posted February 28, 2008 Vagner, tua idéia é realmente ótima... mas já pensei nela tb e, infelizmente, é inviável... O sistema vai rodar em um terminal burro, sem HD Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Quote Link to comment Share on other sites More sharing options...
Marca Posted February 28, 2008 Report Share Posted February 28, 2008 Olá Julio Mas este terminal burro nao estara inteligado a nenhum servidor ? pos se estiver cFoto := IF(Empt(Produto->Foto),oPub:wPathBmp + "SEMFOTO.BMP",Produto->Foto),oFoto:LoadBmp(cFoto) } REDEFINE IMAGE oFoto ID 413 OF oDlg FILENAME cFoto ; ADJUST Simplismente carregando a foto sem gravar a mesma em lugar nenhum Marcelo Ferro Petrópolis - Rj Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS Quote Link to comment Share on other sites More sharing options...
vagner Posted February 28, 2008 Report Share Posted February 28, 2008 citação:Vagner, tua idéia é realmente ótima... mas já pensei nela tb e, infelizmente, é inviável... O sistema vai rodar em um terminal burro, sem HD Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 id=quote>id=quote>Tá, entendi, vc não está com o servidor na empresa Vagner Wirts VI Encontro está chegando , não perca Quote Link to comment Share on other sites More sharing options...
jc Posted February 28, 2008 Author Report Share Posted February 28, 2008 citação:Olá Julio Mas este terminal burro nao estara inteligado a nenhum servidor ? pos se estiver cFoto := IF(Empt(Produto->Foto),oPub:wPathBmp + "SEMFOTO.BMP",Produto->Foto),oFoto:LoadBmp(cFoto) } REDEFINE IMAGE oFoto ID 413 OF oDlg FILENAME cFoto ; ADJUST Simplismente carregando a foto sem gravar a mesma em lugar nenhum Marcelo Ferro Petrópolis - Rj Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS id=quote>id=quote>Com certeza estará conectado ao servidor da empresa. Não entendi duas coisas do teu exemplo Marcelo: 1º) oPub:wPathBmp <<< De onde vem esse tal oPub? 2º) Produto->Foto <<< Vc faz referência aqui ao alias "Produto", mas estou utilizando a SQLLIB e não existe alias no meu procedimento. Notei que vc grava o path da imagem dentro de Produto->Foto, estou certo? No meu caso, estou gravando a própria imagem no campo, com a função "any2Sql()". Dessa forma, o método :LoadBmp() em oFoto não funciona pois ele requer um arquivo de imagem válido com o seu path completo e no meu caso, é apenas o conteúdo da imagem em um campo do tipo BLOB. Agradeço mesmo pela ajuda Marcelo. Abração! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 4.50.113 Quote Link to comment Share on other sites More sharing options...
vagner Posted February 29, 2008 Report Share Posted February 29, 2008 citação:Com certeza estará conectado ao servidor da empresa. id=quote>id=quote>Olá Júlio, Bom agora realmente não entendi Estará conectado no servidor que está na empresa ou estará em um servidor fora da empresa (conexão via net)? Se está na empresa, então faça como eu lhe disse , do mesmo jeito que vc abre o programa que deve estar no servidor por ser um terminal burro, os arquivos e fotos podem estar lá também Basta vc redirecionar a abertura do arquivo tipo : @ 00,00 Bitmap oBmp File "\\Servidor\Diretorio\SuaFoto.Bmp" ... 1ªmente verificando se a foto existe se não existir, grava para depois abrir , aà haverá demora somente na primeira vez onde a foto ainda não exista Vagner Wirts VI Encontro está chegando , não perca Quote Link to comment Share on other sites More sharing options...
jc Posted February 29, 2008 Author Report Share Posted February 29, 2008 citação: citação:Com certeza estará conectado ao servidor da empresa. id=quote>id=quote>Olá Júlio, Bom agora realmente não entendi Estará conectado no servidor que está na empresa ou estará em um servidor fora da empresa (conexão via net)? Se está na empresa, então faça como eu lhe disse , do mesmo jeito que vc abre o programa que deve estar no servidor por ser um terminal burro, os arquivos e fotos podem estar lá também Basta vc redirecionar a abertura do arquivo tipo : @ 00,00 Bitmap oBmp File "\\Servidor\Diretorio\SuaFoto.Bmp" ... 1ªmente verificando se a foto existe se não existir, grava para depois abrir , aà haverá demora somente na primeira vez onde a foto ainda não exista Vagner Wirts VI Encontro está chegando , não perca id=quote>id=quote>Vagner... o Sistema deverá rodar independente de configuração de servidor. Não que não possamos pedir ao admin. de rede que libere tal diretório para gravação e, dessa forma, salvar as imagens em disco no servidor para serem lidas pelo sistema. Mas a situação é mais complexa... somos duas empresas atuando no mesmo cliente. Estou precisando de uma solução em que não seja necessário gravar nada em disco. Somente um departamento da empresa possui uma variedade de quase 20 mil peças para os produtos... ferragens e dobradiças, incluindo parafusos de 'n' tipos. Acho que já deve ter sido notável a inviabilidade de se gravar essas imagens em disco. Todavia, o sistema precisa rodar sem a necessidade de gravar arquivos em disco, já que a solução terminal burro foi justamente para tal situação. Existem 47 terminais burros, ligados em dois servidores... um apenas para o Banco de Dados da empresa, onde rodam 3 servidores de dados diferentes, para fins diferentes da empresa. Mais um servidor que disponibiliza os sistemas utilizados por ela... A proposta é de acesso remoto ao servidor, apenas! Grato pela atenção Vagner! Muito bem-vinda sempre! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 5.00.1 Quote Link to comment Share on other sites More sharing options...
Marca Posted February 29, 2008 Report Share Posted February 29, 2008 Mas este terminal burro nao estara inteligado a nenhum servidor ? pos se estiver cFoto := IF(Empt(Produto->Foto),oPub:wPathBmp + "SEMFOTO.BMP",Produto->Foto),oFoto:LoadBmp(cFoto) } REDEFINE IMAGE oFoto ID 413 OF oDlg FILENAME cFoto ; ADJUST Simplismente carregando a foto sem gravar a mesma em lugar nenhum Com certeza estará conectado ao servidor da empresa. Não entendi duas coisas do teu exemplo Marcelo: Ola Julio bom dia 1º) oPub:wPathBmp <<< De onde vem esse tal oPub? 2º) Produto->Foto <<< Vc faz referência aqui ao alias "Produto", mas estou utilizando a SQLLIB e não existe alias no meu procedimento. Notei que vc grava o path da imagem dentro de Produto->Foto, estou certo? Olá Julio 1º) oPub:wPathBmp é uma variavel publica q. contem o path dos arquivos bmps,jpgs, etc 2º) estou utilizando a SQLLIB Seria tbem simples SqlImagem := "SELECT FOTO_PROD FROM imagens WHERE cd_produto = " + ANY2SQL(f_Cod_Est) Use SQL SqlImagem Alias "tImagens" NEW VIA [MYSQL] INTO nConecOnL Entao seria trocado cFoto := IF(Empt(tImagens->Foto),oPub:wPathBmp + "SEMFOTO.BMP",tImagens->Foto),oFoto:LoadBmp(cFoto) } Sendo q. este método seria realmente para pegar o Path de onde estiver o arquivo.bmp ou Jpg Vc reparou q.o Linares respondeu no forum internacional ? Testou oq. ele apresentou ? Um abraço Marcelo Ferro Petrópolis - Rj Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS Quote Link to comment Share on other sites More sharing options...
jc Posted February 29, 2008 Author Report Share Posted February 29, 2008 Notei sim Marcelo... Estou trabalhando nisso nesse momento! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 5.00.1 Quote Link to comment Share on other sites More sharing options...
jc Posted February 29, 2008 Author Report Share Posted February 29, 2008 Galera do bem! Antonio Linares postou uma solução e funcionou mais que perfeitamente. Link da resposta: http://fivetechsoft.com/forums/viewtopic.php?t=10158&highlight=image+string Detalhes para implementação: 1º) É necessário alterar a classe TBitmap, adicionando este novo método: METHOD LoadFromString( cString ) CLASS TBitmap local hBmpOld := ::hBitmap local hPalOld := ::hPalette if Empty( cString ) return .F. endif ::hBitmap = CreateMemBitmap( ::GetDC(), cString ) ::ReleaseDC() if ! Empty( hBmpOld ) PalBmpFree( hBmpOld, hPalOld ) endif PalBmpNew( ::hWnd, ::hBitmap, nil ) return .T. id=code>id=code>2º) Notem que o novo método faz chamada à função CreateMemBitmap( ::GetDC(), cString ). É necessário criá-la tb. É um código em C. Simplesmente criem um fonte qualquer com, exatamente, o conteúdo abaixo: #pragma BEGINDUMP #include #include HBITMAP CreateMemBitmap( HDC hDC, BYTE far * cBitmap ); HB_FUNC( CREATEMEMBITMAP ) { hb_retnl( ( LONG ) CreateMemBitmap( ( HDC ) hb_parnl( 1 ), hb_parc( 2 ) ) ); } #pragma ENDDUMP id=code>id=code>Depois adicionem o arquivo .C criado à lista de compilação de vcs para que seja gerado o .OBJ 3º) Para chamar o método pela classe TBitmap, é simples Exemplo utilizando REDEFINE: REDEFINE BITMAP oImagem ID 4001 OF oDlg oImagem:loadFromString( "conteudo_da_imagem_no_banco_dados" ) oImagem:refresh() id=code>id=code>Agraço a todos que ajudaram! Abração! Júlio César M. Ferreira Diretor de Tecnologia RS Consultores Ltda. Fone: (81) 4009.5444 Fax: (81) 4009.5400 E-mail: julio.mferreira@gmail.com MSN: julio_mferreira@hotmail.com Recife - PE FWh 2.5, xHarbour 0.99.51, SQL LIB, Pelles 5.00.1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.