danielrgoes Postado Julho 21, 2011 Denunciar Share Postado Julho 21, 2011 E ai Pessoal Parece uma pergunta meio batida mais encontrei varia dicas aki na internt e nehuma funcionou eu tenho um panel com uma imagem cobrindo td ele e um DBGrid encimaeu quero deixar o DBGrid transparente para que aproveite a imagem como fundo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 21, 2011 Denunciar Share Postado Julho 21, 2011 acho que voce já viu essa dicaunit fTransparentGrid; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, Grids, DBGrids, ADODB, ExtCtrls; type TForm1 = class(TForm) ADOTable1: TADOTable; // ignorar se você não estiver usando componente ADO para acessar a tabela DataSource1: TDataSource; Image1: TImage; Panel1: TPanel; DBGrid1: TDBGrid; procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Text: string; Rct: TRect; begin Text := Field.AsString; Rct:= Rect; DBGrid1.Canvas.Brush.Color := clWhite; DBGrid1.Canvas.FillRect (Rct); BitBlt(DBGrid1.Canvas.handle, Rct.left, Rct.top, Rct.right - Rct.left, Rct.bottom - Rct.top, Image1.Canvas.Handle, Rct.left + DBGrid1.Left + Panel1.Left, Rct.Top + DBGrid1.Top + Panel1.Top, SRCCOPY); SetBkModE(DBGrid1.Canvas.Handle, TRANSPARENT); inc(Rct.Top ,2); inc(Rct.Left ,2); DBGrid1.Canvas.Font.Color := clBlack; DrawtextEx(DBGrid1.Canvas.Handle, PChar(Text), Length(Text), Rct, DT_WORDBREAK, nil); end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Panel1.Perform(WM_SYSCOMMAND, $F012, SC_MOVE); Application.ProcessMessages; BitBlt(GetDc(Panel1.Handle), 0, 0, Panel1.Width, Panel1.Height, Image1.Canvas.Handle , Panel1.Left, Panel1.Top, SRCAND); DBGrid1.refresh; end; end.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danielrgoes Postado Julho 21, 2011 Autor Denunciar Share Postado Julho 21, 2011 Jhonaseu já tinha feito isso porem fiz novamente e não deu certocoloquei o codigo nos eventos descritos e o DBGrid não fica transparente Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 21, 2011 Denunciar Share Postado Julho 21, 2011 mas o código esta corretohttp://delphitutorial.info/how-to-make-tra...ent-dbgrid.htmlabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 danielrgoes Postado Julho 21, 2011 Autor Denunciar Share Postado Julho 21, 2011 Jhonas o que esta acontecendo é que não entra no evento DBGrid1DrawDataCellcomo funciona isso quando entra no evento? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 21, 2011 Denunciar Share Postado Julho 21, 2011 O código funciona perfeitamente ... o evento OnDrawDataCell funciona como um loop infinito ... ele é acionado assim que o form é ativado, e fica sendo executado, até que o form seja desativado ou fechado.vale lembrar que a figura deverá ser do tipo bmp ( obs: a figura deverá ter o tamanho do dbgrid, para que o mesmo seja preenchido totalmente )... outro tipo causará erroobs: acabei de testar aqui... está funcionandounit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, Grids, DBGrids, jpeg, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; DBGrid1: TDBGrid; Query1: TQuery; DataSource1: TDataSource; procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Text: string; Rct: TRect; begin Text := Field.AsString; Rct:= Rect; DBGrid1.Canvas.Brush.Color := clWhite; DBGrid1.Canvas.FillRect (Rct); BitBlt(DBGrid1.Canvas.handle, Rct.left, Rct.top, Rct.right - Rct.left, Rct.bottom - Rct.top, Image1.Canvas.Handle, Rct.left + DBGrid1.Left + Panel1.Left, Rct.Top + DBGrid1.Top + Panel1.Top, SRCCOPY); SetBkModE(DBGrid1.Canvas.Handle, TRANSPARENT); inc(Rct.Top ,2); inc(Rct.Left ,2); DBGrid1.Canvas.Font.Color := clBlack; DrawtextEx(DBGrid1.Canvas.Handle, PChar(Text), Length(Text), Rct, DT_WORDBREAK, nil); end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Panel1.Perform(WM_SYSCOMMAND, $F012, SC_MOVE); Application.ProcessMessages; BitBlt(GetDc(Panel1.Handle), 0, 0, Panel1.Width, Panel1.Height, Image1.Canvas.Handle , Panel1.Left, Panel1.Top, SRCAND); DBGrid1.refresh; end; end.abraçoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Agosto 7, 2015 Denunciar Share Postado Agosto 7, 2015 Eu sei que o post é antigo, mas eu preciso da mesmo coisa a que este post se refere e tenho o mesmo problema de NÃO gerar o evento Draw Cell do Grid. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 7, 2015 Denunciar Share Postado Agosto 7, 2015 verifique se não é bug do seu delphio código funciona no delphi 3, 5 e 7 sem problemasabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Agosto 7, 2015 Denunciar Share Postado Agosto 7, 2015 (editado) olá Jhonas.Existe alguma regra na disposição dos componentes? Eu coloquei tanto a imagem como o grid dentro de um panel, é isso? ps - eu não acredito ser problema do Delphi pois tenho outros formulários em que este evento do DBGrid é disparado normalmente. Editado Agosto 7, 2015 por Manoel Zancheta Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 7, 2015 Denunciar Share Postado Agosto 7, 2015 Existe alguma regra na disposição dos componentes? Eu coloquei tanto a imagem como o grid dentro de um panel, é isso?sim, mas voce não precisa necessariamente usar o Panel como exemplo simples, faça isso: coloque em um form um componente TImage e deixe o Align = Clientdepois coloque um DBgrid, no form, mas que fique menor que a imagemcoloque uma imagem no TImage e faça o código abaixo:procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);var Text: string; Rct: TRect;begin Text := Field.AsString; Rct:= Rect; DBGrid1.Canvas.Brush.Color := clWhite; DBGrid1.Canvas.FillRect (Rct); BitBlt(DBGrid1.Canvas.handle, Rct.left, Rct.top, Rct.right - Rct.left, Rct.bottom - Rct.top, Image1.Canvas.Handle, Rct.left + DBGrid1.Left + Form1.Left, Rct.Top + DBGrid1.Top + Form1.Top, SRCCOPY); SetBkModE(DBGrid1.Canvas.Handle, TRANSPARENT); inc(Rct.Top ,2); inc(Rct.Left ,2); DBGrid1.Canvas.Font.Color := clBlack; DrawtextEx(DBGrid1.Canvas.Handle, PChar(Text), Length(Text), Rct, DT_WORDBREAK, nil);end; O Dbgrid vai ficar transparente e mostrar a imagem ao fundoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Agosto 10, 2015 Denunciar Share Postado Agosto 10, 2015 Não funcionou....Não dispara o evento DBGrid1DrawDataCell. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 10, 2015 Denunciar Share Postado Agosto 10, 2015 voce observou isso ? Rct.left + DBGrid1.Left + Form1.Left, // tem que ser o nome do form que voce esta usando Rct.Top + DBGrid1.Top + Form1.Top, para ter certeza se o evento DBGrid1DrawDataCell está sendo executado, coloque um break point no código ...e se ainda assim não funcionar, então voce terá que descobrir o que está acontecendo com o seu delphino meu delphi (7) funciona normalabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Agosto 10, 2015 Denunciar Share Postado Agosto 10, 2015 (editado) ahh, descobri. é que eu tinha colocado o dbgrid sem "ligar" nada nele, então não tinha nenhum field nele. se bem que assim, o grid só fica transparente onde estão os registros, a área sem registro não fica transparente. Editado Agosto 10, 2015 por Manoel Zancheta Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 10, 2015 Denunciar Share Postado Agosto 10, 2015 amigo, se quiser o meu conselho, não deixe o dbgrid transparente .... pode ser bonito para voce, mas para um cliente ( Usuario ) é extremamente ruim visualmente ( cansa a visão ) abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Manoel Zancheta Postado Agosto 11, 2015 Denunciar Share Postado Agosto 11, 2015 (editado) Estava apenas testando para ver, pois surgiu aqui a possibilidade de deixar uma marca d´agua de fundo, seria uma imagem bem suave. Editado Agosto 11, 2015 por Manoel Zancheta Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
danielrgoes
E ai Pessoal
Parece uma pergunta meio batida
mais encontrei varia dicas aki na internt e nehuma funcionou
eu tenho um panel com uma imagem cobrindo td ele e um DBGrid encima
eu quero deixar o DBGrid transparente para que aproveite a imagem como fundo
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.