Jump to content
Fivewin Brasil

!SOLUCIONADO! Método loadFromString() em TBitmap!


jc

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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>

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

5EventoFW.gif

Editado por - vailtom on 28/02/2008 14:32:17

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 icon_smile.gif

Vagner Wirts

VI Encontro está chegando icon_smile_big.gif, não perca icon_smile_big.gif

Link to comment
Share on other sites

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

Link to comment
Share on other sites

citação:

Com certeza estará conectado ao servidor da empresa.


id=quote>id=quote>

Olá Júlio,

Bom agora realmente não entendi icon_smile_big.gif

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 icon_smile_big.gif, 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 icon_smile_big.gif

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 icon_smile_wink.gif, aí haverá demora somente na primeira vez onde a foto ainda não exista icon_smile_big.gif

Vagner Wirts

VI Encontro está chegando icon_smile_big.gif, não perca icon_smile_big.gif

Link to comment
Share on other sites

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 icon_smile_big.gif

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 icon_smile_big.gif, 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 icon_smile_big.gif

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 icon_smile_wink.gif, aí haverá demora somente na primeira vez onde a foto ainda não exista icon_smile_big.gif

Vagner Wirts

VI Encontro está chegando icon_smile_big.gif, não perca icon_smile_big.gif


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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...