Solved

How do I capture the Left Alt key in Application.OnMessage?

Posted on 2002-05-18
5
1,047 Views
Last Modified: 2011-09-20
Hi,

I need to be able to detect keys that are pressed with the Left Alt key in Application.OnMessage.  I have set up a simple test like this with no extra components on the form...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MyMessageHandler
end;

procedure TForm1.MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
  if (Msg.message = WM_KEYDOWN) and (Msg.wParam = Ord('A')) then
  begin
    Handled := True;
    ShowMessage('A pressed');
  end
end;

These key combinations show the message...

A
CTRL + A
Right Alt + A

However, when I press Left Alt + A, I just get a bleep - no message is displayed.  Try it and you'll see.  It seems that key presses with the Left Alt key are ignored by the message handler.  How do I get around this?  I really need to be able to detect key combinations such as Left Alt + A in Application.OnMessage.  I'm using Delphi 4 Pro.

Thanks in Advance,

Richard
0
Comment
Question by:Richard2000
  • 3
5 Comments
 
LVL 34

Accepted Solution

by:
Slick812 earned 50 total points
ID: 7019056
The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user holds down the ALT key and then presses another key. So try

if (Msg.message = WM_SYSKEYDOWN) and (Msg.wParam = Ord('A')) then
 begin
   Handled := False;
   ShowMessage('sys A pressed');
 end

 I set handled to false, since this is a SysKeyDown, but setting handled to True, may be better if the if you don't want the system to do anything.
0
 
LVL 9

Expert Comment

by:ginsonic
ID: 7019289
I think That Richard what to know if is Left ( or Right ) AKT key .

Read this :

How to distinguish between the right shift key and the
left shift key in Delphi?

http://www.monbestof.com/fr/view/default.Asp?CustID=4-886021737&ServiceID=4&CurCat=2&ProdID=1175&bp=/fr/tips/default.asp
0
 
LVL 9

Expert Comment

by:ginsonic
ID: 7019291
How you can see for left ALT use
kpLeftAlt = 1 shl 9;

Regards,
Nick
0
 
LVL 9

Expert Comment

by:ginsonic
ID: 7019755
Just curious , the code work just for left ALT or bouth ?
0
 

Author Comment

by:Richard2000
ID: 7020014
Hi ginsonic,

Slick812's code works for Left Alt only.

Richard
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Delphi XE10, DigitalPersona Fingerprint reader and MySQL 6 323
Delphi: ForceDirectory plain function 7 42
Find and Replace Stream with 0s 8 69
Delphi Yen format 3 45
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question