[DUG] Stringgrid - intercepting keys
Jolyon Smith
jsmith at deltics.co.nz
Mon Oct 5 19:00:19 NZDT 2009
First thing I notice is that this key-handling code is occurring on the FORM
not a specific control's key-handling event. Iirc this makes the code
vunerable to the form's "KeyPreview" setting.
But I'm also somewhat suspicious of CMDialogKey - this looks it might be
specific support for handling typical dialog navigation. ie return = OK,
escape = Cancel, tab = control navigation.
For other keys wouldn't you simply intercept those keyboard events using the
"normal" windows keyboard event messages, OnKeyDown/Press etc, and handle
those events on the specific tronol, rather than trying to intercept them on
the form before they reach those controls.
That may not be the answer you were looking for but it might set you on the
right track (or elicit some further information about your specific
implementation - such as why you can't handle key events on the control
itself).
Regards,
Jolyon
-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of John Bird
Sent: Monday, 5 October 2009 17:26
To: NZ Borland Developers Group - Delphi List
Subject: [DUG] Stringgrid - intercepting keys
For a long time I have been intercepting keys such as Escape/Enter/Tab no
problem
I have been wanting to put a simple search facility in a string grid, and
would like to intercept Ctrl/F and F3.....but the code as I am using does
not get them (D2007) - they are just ignored.
Looks like the only characters I can intercept are Tab, Enter and Escape...
Any suggestions?
procedure TfrmTimeSh2.CMDialogKey(var Msg: TWMKEY);
{
This converts ENTER key messages to TAB key messages, provided a few
conditions hold
}
begin
if (ActiveControl is TCustomEdit)
or (ActiveControl is TStringGrid)
then
begin
ATPKeyDir:='';
if Msg.CharCode = VK_RETURN then
begin
Msg.CharCode := VK_TAB;
ATPKeyDir:='Next';
end;
if Msg.Charcode = VK_ESCAPE then
begin
Msg.CharCode := VK_TAB;
ATPKeyDir:='Prev';
end;
if Msg.Charcode = VK_F2 then <=== never
intercepted
begin
xcGridFind((ActiveControl as TStringGrid),FindStr,strFound);
end;
if Msg.Charcode = VK_F3 then <=== never intercepted
begin
xcGridFindNext((ActiveControl as TStringGrid),FindStr,strFound);
end;
end;
inherited;
end;
John
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi at delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
unsubscribe
More information about the Delphi
mailing list