Fórum Delphi XE 3: Problema ao passar o mouse em cima do Título da Coluna do TDBGrid #581397
15/05/2017
0
Boa tarde, prezados da Devmedia
Estou com o seguinte problema:
Ao passar o mouse por cima do Title da Column do DBGrid, o texto escrito no título some, ou seja, vai para trás do título da coluna.
Preciso escrever os títulos das colunas do grid, utilizando
o TCanvas do Grid.
O grid tem o evento OnTitleClick.
No delphi 7, não há problemas mas no delphi XE3, sim.
Quando a propriedade dgTitleClick = True o problema ocorre.
Quando deixo "False" o problema não ocorre, mas precisa ser
"True" para chamar o evento.
Os títulos também sumiam quando o TForm era maximizado e para resolver,
chamei o evento FormResize e codifiquei o seguinte:
grid1.Refresh; ou grid1.Repaint;
Ao fazer isso, os títulos voltaram a aparecer. Tentei fazer isso
nos eventos de mouse do grid, mas não adiantou.
Segue código abaixo:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Graphics, Controls, Forms, Dialogs, Data.DB, Datasnap.DBClient,
Grids, DBGrids, Types, StdCtrls;
type
TAccessDBGrid = class(TCustomGrid);
type
TForm1 = class(TForm)
DataSource1: TDataSource;
grid1: TDBGrid;
cdsTabela: TClientDataSet;
cdsTabelacodigo_1: TIntegerField;
cdsTabelacodigo_2: TIntegerField;
procedure grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure grid1TitleClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
cdsTabela.CreateDataSet;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
grid1.Refresh;
end;
procedure TForm1.grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
S1 : AnsiString;
begin
with TAccessDBGrid(grid1) do
begin
RowHeights[0] := 29;
Canvas.Brush.Color := clBtnFace;
case Column.Index of
0: begin
Column.Title.Caption := '';
S1 := 'Código 1';
end;
1: begin
Column.Title.Caption := '';
S1 := 'Código 2';
end;
end;
TDBGrid(Sender).Canvas.Font.Color:= clBlack;
//Escrevendo o Título
Canvas.TextOut(Rect.Left + 3, 19, AnsiString(S1));
end;
inherited;
end;
procedure TForm1.grid1TitleClick(Column: TColumn);
begin
ShowMessage('Title Click! ');
end;
end.
Obs: Utilizo Windows 7
Estou com o seguinte problema:
Ao passar o mouse por cima do Title da Column do DBGrid, o texto escrito no título some, ou seja, vai para trás do título da coluna.
Preciso escrever os títulos das colunas do grid, utilizando
o TCanvas do Grid.
O grid tem o evento OnTitleClick.
No delphi 7, não há problemas mas no delphi XE3, sim.
Quando a propriedade dgTitleClick = True o problema ocorre.
Quando deixo "False" o problema não ocorre, mas precisa ser
"True" para chamar o evento.
Os títulos também sumiam quando o TForm era maximizado e para resolver,
chamei o evento FormResize e codifiquei o seguinte:
grid1.Refresh; ou grid1.Repaint;
Ao fazer isso, os títulos voltaram a aparecer. Tentei fazer isso
nos eventos de mouse do grid, mas não adiantou.
Segue código abaixo:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Graphics, Controls, Forms, Dialogs, Data.DB, Datasnap.DBClient,
Grids, DBGrids, Types, StdCtrls;
type
TAccessDBGrid = class(TCustomGrid);
type
TForm1 = class(TForm)
DataSource1: TDataSource;
grid1: TDBGrid;
cdsTabela: TClientDataSet;
cdsTabelacodigo_1: TIntegerField;
cdsTabelacodigo_2: TIntegerField;
procedure grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure grid1TitleClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
cdsTabela.CreateDataSet;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
grid1.Refresh;
end;
procedure TForm1.grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
S1 : AnsiString;
begin
with TAccessDBGrid(grid1) do
begin
RowHeights[0] := 29;
Canvas.Brush.Color := clBtnFace;
case Column.Index of
0: begin
Column.Title.Caption := '';
S1 := 'Código 1';
end;
1: begin
Column.Title.Caption := '';
S1 := 'Código 2';
end;
end;
TDBGrid(Sender).Canvas.Font.Color:= clBlack;
//Escrevendo o Título
Canvas.TextOut(Rect.Left + 3, 19, AnsiString(S1));
end;
inherited;
end;
procedure TForm1.grid1TitleClick(Column: TColumn);
begin
ShowMessage('Title Click! ');
end;
end.
Obs: Utilizo Windows 7
Alice
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)