dbgrid和dbgrideh都用onDrawDataCell时,dbgrideh的触发不了(代码如下),请问为什么?请大侠帮帮忙,急用!(50分)

  • 主题发起人 主题发起人 jianguo_bu
  • 开始时间 开始时间
J

jianguo_bu

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGridEh, DB, ADODB, LMDCustomControl, LMDCustomPanel,
LMDCustomBevelPanel, LMDBaseEdit, LMDCustomEdit, LMDEdit;

type
TForm1 = class(TForm)
DBGridEh1: TDBGridEh;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ADODataSet1code: TIntegerField;
ADODataSet1name: TWideStringField;
ADODataSet1name1: TWideStringField;
LMDEdit1: TLMDEdit;
ADODataSet1sdate: TDateTimeField;
DBGrid1: TDBGrid;
procedure DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure DBGridEh1ColExit(Sender: TObject);
procedure DBGridEh1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Field.FieldName = 'name' ) then
begin
LMDEdit1.Left := Rect.Left + DBGridEh1.Left;
LMDEdit1.Top := Rect.Top + DBGridEh1.top;
LMDEdit1.Width := Rect.Right - Rect.Left;
LMDEdit1.Height := Rect.Bottom - Rect.Top;
LMDEdit1.Visible := True;
end;
end;
end;

procedure TForm1.DBGridEh1ColExit(Sender: TObject);
begin
If DBGridEh1.SelectedField.FieldName = 'name' then
begin
LMDEdit1.Visible := false;
end;
end;

procedure TForm1.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
begin
if (key <> chr(9)) then
begin
if (DBGridEh1.SelectedField.FieldName ='name') then
begin
LMDEdit1.SetFocus;
SendMessage(LMDEdit1.Handle, WM_Char, word(Key), 0);
end;
end;
DBGridEh1.Columns[0]
end;

end.
 
你有没有改变dbgrideh的DefaultDrawing属性?
如果可以将你的代码发到 xzlzq@163.com 调一下
 
已发了代码。
 
问题已解决,邮件已经给你发过去了。
问题已经找到!就是这一句话:
  Occurs when the grid needs to paint a cell if the State property of Columns is csDefault.
  由于你在设计时将dbgrideh的列手工指定,所以这时columns.state=csCustoms而不是csDefault,所以这是时ondrawdatacell
事件并没有被触发,但如果你在运行时将state设置为csDefault则其上的字段就会被全部重置。所以你想通过这个事件来完成你要
的功能是不能实现的(当然如果你将字段全部设置为缺省值则可以)。另外在delphi中事件ondrawdatacell并不被推荐使用,你完
全可以使用ondrawcolumncell事件来实现同样的功能,只要将语句
if Field.FieldName='name' then
改为如下:
if column.Field.FieldName='name' then
就可以了!
 
在这个事件里我试过ondrawcolumncell,在我发给你的代码里我也经常这样改过。行得通,但用到我的应用程序里就又失效了。
 
接受答案了.
 
后退
顶部