AliceString Novato
Registrado: Segunda-Feira, 15 de Mai de 2017 Mensagens: 2
|
Enviada: Seg Mai 15, 2017 3:37 pm Assunto: Delphi XE 3: Problema ao passar o mouse no Título Grid |
|
|
Ao passar o mouse por cima do título da coluna do grid, 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, o problema não ocorre e no delphi XE3,
só ocorre quando a propriedade dgTitleClick = True.
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: Versão do SO: Windows 7 |
|