procedure TDBRichEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (FDataLink <> nil) and
(AComponent = DataSource) then DataSource := nil;
end;
procedure TDBRichEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin inherited KeyDown(Key, Shift);
if FMemoLoaded then begin if (Key = VK_DELETE) or ((Key = VK_INSERT) and (ssShift in Shift)) then
FDataLink.Edit;
endelse
Key := 0;
end;
procedure TDBRichEdit.KeyPress(var Key: Char);
begin inherited KeyPress(Key);
if FMemoLoaded then begin if (Key in [#32..#255]) and (FDataLink.Field <> nil) and not FDataLink.Field.IsValidChar(Key) then begin
MessageBeep(0);
Key := #0;
end;
case Key of
^H, ^I, ^J, ^M, ^V, ^X, #32..#255:
FDataLink.Edit;
#27:
FDataLink.Reset;
end;
endelse begin if Key = #13then LoadMemo;
Key := #0;
end;
end;
procedure TDBRichEdit.Change;
begin with FdataLink do begin {if Assigned(FdataLink) and (Assigned(DataSource))and
(DataSource.State = dsBrowse) then
Edit; }{make sure edits on Attributes change} if FMemoLoaded then Modified;
end;
FMemoLoaded := True;
inherited Change;
end;
function TDBRichEdit.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
procedure TDBRichEdit.SetDataSource(Value: TDataSource);
begin
FDataLink.DataSource := Value;
if Value <> nilthen Value.FreeNotification(Self);
end;
function TDBRichEdit.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
procedure TDBRichEdit.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;
function TDBRichEdit.GetReadOnly: Boolean;
begin
Result := FDataLink.ReadOnly;
end;