Mirror

How to reset the content of a TDBMemo (Views: 704)


Problem/Question/Abstract:

I have a form with a TDBMemo control. I also have an "Abort" button which, when pressed, will reset the contents of the TDBMemo control. I know that if you hit the escape key in a TDBMemo this will reset the contents. However, my users are used to hitting the Esc key to exit forms, so I disabled this feature so that they would not lose everything they entered. I did this by changing the value of the Key code in the OnKeyPress event:

if key = #27 then
begin
  key := #0;

I have looked in the VCL and have noticed that when ESC is pressed FDataLink.Reset is invoked. However, this is private, so there is not way to reset the contents. Is there another way around this?

Answer:

All DbCtrls have a "procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;" which can be executed to return the TFieldDataLink as follows:

procedure TForm1.SpeedButton1Click(Sender: TObject);
{must be TSpeedButton so Focus change does take place first}
var
  fDataLink: TFieldDataLink;
begin
  fDataLink := TFieldDataLink(DBMemo1.Perform(CM_GETDATALINK, 0, 0));
  if assigned(fDataLink) then
    fDataLink.Reset;
end;

<< Back to main page