Paulo Nobre Postado Maio 9, 2004 Denunciar Share Postado Maio 9, 2004 Prezados Colaboradores,Dizem que para colocar uma imagem no DBImage, num banco de dados(é claro), isto pode ser feito em tempo de execução da seguinte maneira:Copiar uma figura e em seguida colá-la(ctrl+ V) quando o componente ganhar o foco. Tentei fazer isto mas não acontece nada, não consigo colar nenhuma figura seja, bmp ou jpg(que acho que nem pode). Em fim, nada.Alguém sabe o que está acontecendo?Está tudo configurado corretamente, eu acho. Já que as outras informações que chegam da tabela estão corretas. A tabela foi criada como paradox 7 e o campo fotografia como type G .Obrigado Paulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 10, 2004 Denunciar Share Postado Maio 10, 2004 uses ClipBoard;procedure TForm1.DBImage1KeyPress(Sender: TObject; var Key: Char);begin if (Key = #22) and Clipboard.HasFormat(CF_PICTURE) then begin DBImage1.Picture.Assign(Clipboard); DBImage1.Stretch := true; DBImage1.Refresh; end;end;Obs: O picture será um TBitmap; se quiser modificá-lo p/ Jpeg(menor espaço), também é possível. Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 10, 2004 Denunciar Share Postado Maio 10, 2004 Ops:Não é uses CliBoard, mas sim: uses ClipBrd; Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 11, 2004 Autor Denunciar Share Postado Maio 11, 2004 Valeu s3c. Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 12, 2004 Autor Denunciar Share Postado Maio 12, 2004 Infelizmente, s3c, a dica não está funcionando.Mesmo colocando uses clipbrd não funciona.A propósito #22 corresponde a qual tecla?obrigadoPaulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 12, 2004 Denunciar Share Postado Maio 12, 2004 #22 equivale Ctrl+v(paste,colar).Tente o seguinte:Aperte a tecla Print ScreenFoque o DBImage e aperte Ctrl+v Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 12, 2004 Autor Denunciar Share Postado Maio 12, 2004 Mas, printscreen não vai capturar a imagem da tela? A propósito, tenho que acionar alguma propriedade do form?Pergunto isto pois, no VB, para usar o evento keypress,no form existe a propriedade keypress que deve ser colocada como true. Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 12, 2004 Denunciar Share Postado Maio 12, 2004 Print Screen foi só um exemplo para ver se o código funciona.Qualquer imagem copiada p/ área de transferência, o clipboard fica com o formato CF_PICTURE.você não queria colar a imagem quando o DBImage ganhasse o foco?Pois bem, coloque aquele código no evento onKeyPress do DBImage.Não precisa setar o KeyPreview do Form porque é o DBImage que "verá" a tecla digitada. Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 12, 2004 Autor Denunciar Share Postado Maio 12, 2004 Não está funcionando com o print.Será que tem que acionar alguma propriedade do BDImage? Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 12, 2004 Denunciar Share Postado Maio 12, 2004 O DBImage está com o foco?Crie uma imagem pelo paintbrush, depois Edit/Select All/Copy.Depois clique no DBImage e aperte Ctrl+v.Se não funcionar, rode pelo Delphi e coloque um breakpoint no begin do evento onKeyPress e veja se ele executa as instruções. Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 13, 2004 Autor Denunciar Share Postado Maio 13, 2004 s3c, fiz de novo,os testes que você falou e ficou o seguinte:-Criando uma imagem com o paint, selecionando tudo e fazendo CTRL+C FUNCIONA.-mandando um bpm por ctrl+ c, via explorer, NÃO funciona.-Abrindo a figura no paint, mandando selecionar tudo, copiando, FUNCIONA.-fazendo print screen FUNCIONA.Ou seja, funciona da maneira que não interessa.Não estou entendendo o que está acontecendo.O programa é simplíssimo. Coloquei o código como você falou. Só tem uma UNITVeja abaixo:unit UAgenda;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, DBCtrls, Buttons, ExtCtrls, DB, DBTables,clipBrd;type TfrmAgenda = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; txtNome: TDBEdit; txtEndereco: TDBEdit; txtTelConvencional: TDBEdit; txtTelCelular: TDBEdit; txtEmail: TDBEdit; Label6: TLabel; txtComentarios: TDBMemo; cmdSair: TSpeedButton; DBNavigator1: TDBNavigator; Table1: TTable; DataSource1: TDataSource; DBImage1: TDBImage; procedure cmdSairClick(Sender: TObject); procedure DBImage1KeyPress(Sender: TObject; var Key: Char); { Private declarations } public { Public declarations } end;var frmAgenda: TfrmAgenda;implementation//Uses//clipbrd;tinha colocado aqui achando que o erro poderia ser este.{$R *.dfm}procedure TfrmAgenda.cmdSairClick(Sender: TObject);begin Close;end;procedure TfrmAgenda.DBImage1KeyPress(Sender: TObject; var Key: Char);begin If (key =#22) and clipboard.HasFormat(CF_Picture) Then begin DBImage1.Picture.Assign(Clipboard); DBImage1.Stretch := True; DBImage1.Refresh; end;end;end.De qualquer forma muito obrigadoPaulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 13, 2004 Denunciar Share Postado Maio 13, 2004 Bom, isso quer dizer que se o Clipboard está com uma imagem, você consegue colarno DBImage certo?O que não funciona é o Ctrl+c via explorer.Então me diga como você está querendo captar a imagem para colá-la no DBImage. Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 13, 2004 Autor Denunciar Share Postado Maio 13, 2004 Via explorer através de ctrl+c Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 13, 2004 Denunciar Share Postado Maio 13, 2004 Bom, neste caso vamos às utilíssimas Apis.Modifique o evento onKeyPress desse jeito:var s:String[128];begin if Key <> #22 then Exit; if Clipboard.HasFormat(CF_HDROP) then begin OpenClipboard(Handle); try DragQueryFile(GetClipboardData(CF_HDROP), 0, @s, 128); DBImage1.Picture.LoadFromFile(StrPas(@s)); finally CloseClipboard; end; end else if Clipboard.HasFormat(CF_PICTURE) then DBImage1.Picture.Assign(Clipboard); DBImage1.Stretch := true; DBImage1.Refresh;end; Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 14, 2004 Autor Denunciar Share Postado Maio 14, 2004 Obrigados3c funcionou.Essas APIs que você fala são as API internas do windows?por que não e necessário declará-las?Elas já estão em alguma USES?Esse @ significa o quê?Se em algum momento, sem querer abusar, você puder explicar um pouquinho o código, agradeceria.MUITO OBRIGADOPaulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 14, 2004 Denunciar Share Postado Maio 14, 2004 Sim, são as Apis do Windows.Não é necessário declará-las quando já estão declaradas em algum uses, ou seja, em algum .pasPor exemplo, a Api GetClipboardData é uma função da user32.dll do Windows e já está declarada no Windows.pas; logo quando você coloca Windows na cláusula uses, não precisa declarar a Api.A Api DragQueryFile está na shell32.dll do Windows e está declarada na ShellApi.pas, por isso você coloca uses ShellApi p/ ter acesso a ela, senão você teria que declará-la implicitamente na sua aplicação.Quando você marca um arquivo ou pasta e digita Ctrl+c, o clipboard fica no formato CF_HDROP. É por isso que é testado Clipboard.HasFormat(CF_HDROP).A DragQueryFile retorna o(s) caminho(s) dos arquivos ou pastas copiados para o clipboard. Seus parâmetros são:1-Handle da estrutura de dados(obtido pela Api GetClipboardData(CF_HDROP).2-Índice do arquivo ou pasta marcado - 0,1,2... Utilizei 0 presumindo que você tenha dado Ctrl+c somente em um arquivo.3-Ponteiro do buffer que conterá a informação. Utilizei @s indicando um ponteiro para um buffer de 128 bytes, mas você poderia utilizar um PChar, só que você teria que alocar memória para ele (p := AllocMem(128)) e depois liberá-la (FreeMem(p)4-Tamanho desse buffer.Com isto, você obtém o caminho do arquivo de imagem dentro do clipboard; depois o próprio Delphi se encarrega de exibí-la pelo LoadFromFile.As Apis são recursos p/ você interagir diretamente com o sistema operacional, mas elas tem um preço, se você migrar p/ Linux com o Kylix, pode esquecê-las. Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Maio 14, 2004 Denunciar Share Postado Maio 14, 2004 Você poderia fazer um artigo e colocar na sessão de dicas Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Maio 14, 2004 Denunciar Share Postado Maio 14, 2004 Olá Corposemalma, eu não me aprofundo muito em APis, quando vejo a necessidade de utilizá-las, corro atrás, estudo seus parâmetros e coloco no código.Assim como o Delphi é uma enciclopédia, as Apis são outra, de modo que artigos sobre Apis são sempre uma coisa muito extensa. Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 15, 2004 Autor Denunciar Share Postado Maio 15, 2004 s3c, muito obrigado de novo, aprendi bastante com este tópico.Paulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 Corposemalma Postado Maio 15, 2004 Denunciar Share Postado Maio 15, 2004 Problema Resolvido? Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Maio 15, 2004 Autor Denunciar Share Postado Maio 15, 2004 Perfeito, corposemalma. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
Prezados Colaboradores,
Dizem que para colocar uma imagem no DBImage, num banco de dados(é claro),
isto pode ser feito em tempo de execução da seguinte maneira:
Copiar uma figura e em seguida colá-la(ctrl+ V) quando o componente ganhar o
foco. Tentei fazer isto mas não acontece nada, não consigo colar nenhuma
figura seja, bmp ou jpg(que acho que nem pode). Em fim, nada.
Alguém sabe o que está acontecendo?
Está tudo configurado corretamente, eu acho. Já que as outras informações
que chegam da tabela estão corretas. A tabela foi criada como paradox 7 e o
campo fotografia como type G .
Obrigado
Paulo Nobre
Link para o comentário
Compartilhar em outros sites
20 respostass a esta questão
Posts Recomendados