【发布时间】:2017-10-24 04:10:13
【问题描述】:
请,我需要帮助使用 Canvas: 当用户将鼠标移动到 DBGrid 的标题列上时, 标题描述在 Delphi XE 3 中消失了。 DelphI 7 中不会出现此问题。
按照下面的代码:
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;`enter code here`
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 : string;
begin
with TAccessDBGrid(grid1) do
begin
RowHeights[0] := 29;
Canvas.Brush.Color := clBtnFace;
case Column.Index of
0:
begin
Column.Title.Caption := '';
S1 := 'Code';
end;
1:
begin
Column.Title.Caption := '';
S1 := 'Description';
end;
end;
TDBGrid(Sender).Canvas.Font.Color:= clBlack;
Canvas.TextOut(Rect.Left + 3, 19, S1);
end;
end;
procedure TForm1.grid1TitleClick(Column: TColumn);
begin
ShowMessage('Title Click! ');
end;
end
有关更多信息,请参阅我发布的答案。
【问题讨论】:
-
在您已经开始绘制行之后,您希望如何更改行高?我在这台机器上没有可用的 D7,但我认为它在那里也不起作用。而是在 FormCreate 事件中设置行的高度。为什么在对
Canvas.TextOut的调用中硬编码19而不是使用Rect.Top的偏移量?当你改为这样做而不是使用19时会发生什么?而且您的代码毫无意义;您正在删除每一行的 Title.Caption,并在每一行的每个单元格中从 S1 中绘制相同的文本。这段代码从来没有工作过。 -
@KenWhite:你说“这段代码从来没有工作过”是完全正确的。它在我的 D7 中肯定不能正常工作。
标签: delphi vcl delphi-xe3