Author: Tomas Rutkauskas
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:
1 if key = #27 then2 begin3 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:
4 5 procedure TForm1.SpeedButton1Click(Sender: TObject);
6 {must be TSpeedButton so Focus change does take place first}7 var8 fDataLink: TFieldDataLink;
9 begin10 fDataLink := TFieldDataLink(DBMemo1.Perform(CM_GETDATALINK, 0, 0));
11 if assigned(fDataLink) then12 fDataLink.Reset;
13 end;