Kühlschrank auf, Kuh raus, Elefant...
Delphi-Quellcode:
TLsDbGrid = class(TDBGrid)
private
FOnSelectCell: TSelectCellEvent;
protected
function SelectCell(ACol, ARow: Longint): Boolean; override;
public
function CellRect(ACol, ARow: Longint): TRect;
published
property OnSelectCell: TSelectCellEvent read FOnSelectCell write FOnSelectCell;
end;
implementation
function TLsDbGrid.SelectCell(ACol, ARow: Integer): Boolean;
begin
Result := True;
if Assigned(FOnSelectCell) then FOnSelectCell(Self, ACol, ARow, Result);
end;
function TLsDbGrid.CellRect(ACol, ARow: Integer): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
Das als Componente registrieren und statt normalem DbGrid benutzen
Einfach auf DBGrid DBMemo pappen, Breite, Höhe und DataSource/Field festlegen und Visible = False
Anwendung:
Delphi-Quellcode:
// SQL: select *,'...' as MemoDummy from Tabelle
// OnSelectCell:
procedure TForm1.LsDbGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var R: TRect;
begin
R := FldbgrdBeitrag.CellRect(ACol, ARow);
R.Left := R.Left + LsDbGrid1.Left;
R.Right := R.Right + LsDbGrid1.Left;
R.Top := R.Top + LsDbGrid1.Top;
R.Bottom := R.Bottom + LsDbGrid1.Top;
DbMemo1.Visible := False;
case ACol
of
0,1,2,4:;
3:
begin // angenommen, das wär die Spalte für MemoDummy
DbMemo1.Left := R.Left+1;
DbMemo1.Top := R.Top+1;
// Größe sollte bei Memo nicht auf Zelle beschränkt sein...
DbMemo1.Visible := True;
// sichtbar machen
CanSelect := False;
end;
end;
end;
Gruß