procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if (gdFocused in State) then begin if (Field.DataType = ftMemo) then begin DBMemo1.DataField :=Field.FieldName; DBMemo1.Left := Rect.Left + DBGrid1.Left; DBMemo1.Top := Rect.Top + DBGrid1.top; DBMemo1.Width := Rect.Right - Rect.Left; DBMemo1.Height := DBMemo1.Width; DBMemo1.Visible := True; end else if (Field.DataType = ftGraphic) then begin DBImage1.DataField:=Field.FieldName; DBImage1.Left := Rect.Left + DBGrid1.Left; DBImage1.Top := Rect.Top + DBGrid1.top; DBImage1.Width := Rect.Right - Rect.Left; if not DBImage1.Picture.Bitmap.Empty then DBImage1.Height := trunc(DBImage1.Picture.Height/DBImage1.Picture.Width * DBImage1.Width) else DBImage1.Height :=DBImage1.Width; DBImage1.Visible := True; end; end;end;procedure TForm1.DBGrid1ColExit(Sender: TObject); begin If DBGrid1.SelectedField.FieldName = DBMemo1.DataField then DBMemo1.Visible := false else If DBGrid1.SelectedField.FieldName = DBImage1.DataField then DBImage1.Visible := false;end;procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if (key <> chr(9)) then begin if (DBGrid1.SelectedField.FieldName = DBMemo1.DataField) then begin DBMemo1.SetFocus; SendMessage(DBMemo1.Handle, WM_Char, word(Key), 0); end else if (DBGrid1.SelectedField.FieldName = DBImage1.DataField) then begin DBImage1.SetFocus; SendMessage(DBImage1.Handle, WM_Char, word(Key), 0); end; end; end;上面的例子是把一个DBImage和DBMemo放进DBGrid 事先在Form上任意放置一个DBImage和DBMemo,设为不可见。
Field: TField; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Field.DataType = ftMemo) then
begin
DBMemo1.DataField :=Field.FieldName;
DBMemo1.Left := Rect.Left + DBGrid1.Left;
DBMemo1.Top := Rect.Top + DBGrid1.top;
DBMemo1.Width := Rect.Right - Rect.Left;
DBMemo1.Height := DBMemo1.Width;
DBMemo1.Visible := True;
end
else if (Field.DataType = ftGraphic) then
begin
DBImage1.DataField:=Field.FieldName;
DBImage1.Left := Rect.Left + DBGrid1.Left;
DBImage1.Top := Rect.Top + DBGrid1.top;
DBImage1.Width := Rect.Right - Rect.Left;
if not DBImage1.Picture.Bitmap.Empty then
DBImage1.Height := trunc(DBImage1.Picture.Height/DBImage1.Picture.Width * DBImage1.Width)
else DBImage1.Height :=DBImage1.Width;
DBImage1.Visible := True;
end;
end;end;procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
If DBGrid1.SelectedField.FieldName = DBMemo1.DataField then
DBMemo1.Visible := false
else If DBGrid1.SelectedField.FieldName = DBImage1.DataField then
DBImage1.Visible := false;end;procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (key <> chr(9)) then
begin
if (DBGrid1.SelectedField.FieldName = DBMemo1.DataField) then
begin
DBMemo1.SetFocus;
SendMessage(DBMemo1.Handle, WM_Char, word(Key), 0);
end
else if (DBGrid1.SelectedField.FieldName = DBImage1.DataField) then
begin
DBImage1.SetFocus;
SendMessage(DBImage1.Handle, WM_Char, word(Key), 0);
end;
end;
end;上面的例子是把一个DBImage和DBMemo放进DBGrid
事先在Form上任意放置一个DBImage和DBMemo,设为不可见。
就是在cell中加入combox后缩小该column的宽度combox的宽度还保持原来的宽度,
影响美观,不知如何解决
因为我不知道你的具体目的,所以不能具体的讲。
就是在cell中加入combox后缩小该column的宽度combox的宽度还保持原来的宽度,
影响美观,不知如何解决 )
我的意思就是把一个DBComBox放进DBGrid后(不用Column中PickList属性)
缩小该column的宽度,放进DBGrid该Cell的DBComBox的宽度还保持原来的宽度???
在if (gdFocused in State) then
begin
的前面,对于其他也一样。