unit MyDBGrid;
interface
uses
Windows, DBGrids, Types, Grids, Controls, Classes, Messages, ADODB, DB,
StdCtrls, Graphics, Forms, DBCtrls, SysUtils, Variants;
type TDBGrid = class(DBGrids.TDBgrid)
protected
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState); override;
procedure ColEnter; override;
procedure DblClick;override;
end;
implementation
Procedure TDBgrid.ColEnter;
begin
inherited;
if Self.SelectedField = nil then Exit;
if Self.SelectedField.DataType = ftMemo then
Self.Options := Self.Options - [dgEditing]
else
Self.Options := Self.Options + [dgEditing];
end;
Procedure TDBgrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState);
var R :TRect;
var s : String;
begin
inherited;
if Column.Field = nil then Exit;
(*mostramos campo memo*)
R:=Rect;
Inc(R.Top ,2);
Inc(R.Left ,2);
if Column.Field.DataType = ftMemo then
begin
Self.Canvas.FillRect(Rect);
S := Copy(Column.Field.AsString,1,50);
S := StringReplace(S, #10, #32,[rfReplaceAll]);
S := StringReplace(S, #13, #32,[rfReplaceAll]);
DrawText(Self.Canvas.Handle, PChar(S), Length(S),R,DT_END_ELLIPSIS); // para poner trespuntos ....
// si no cabe el string en la celda
end;
end;
Procedure TDBGrid.DblClick;
var Frm : TForm;
var MM : TDBMemo;
begin
inherited;
if not Self.DataSource.DataSet.Active then Exit;
if Self.DataSource.DataSet.IsEmpty then Exit;
if Self.SelectedField = nil then Exit;
if Self.DataSource.DataSet.RecordCount <= 0 then Exit;
if Self.SelectedField.DataType = ftMemo then
begin
Frm := TForm.Create(nil);
try
Frm.Width := 240;
Frm.Height := 120;
Frm.BorderStyle := bsToolWindow;
Frm.Caption := 'Edición';
MM := TDBMemo.Create(nil);
try
MM.Parent := Frm;
MM.Align := alClient;
MM.DataSource := Self.DataSource;
MM.DataField := Self.SelectedField.FieldName;
Frm.Position := poScreenCenter;
Frm.ShowModal;
if Self.DataSource.DataSet.State in [dsedit,dsinsert] then
Self.DataSource.DataSet.Post;
finally begin
MM.Free;
end;
end;
finally begin
FreeAndNil(Frm);
end;
end;
end;
end;