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;