Get out of a routine being executed!

Assume that I have a routine below:

// Global variable
var EscapeKey : boolean; // Whether the escape key is being
                                     // pressed or not

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  .........
  If EscapeKey = true then
  begin
    Some Code;
  end;
  ......  
end;

I tried to write Some Code that releases the mouse being down when user presses Escape key without physically release the left mouse button by hand. However, I can't do this.

Anyone here know how to do this, please help me!

Bri


brimountainAsked:
Who is Participating?
 
bpanaCommented:
try

Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Bogdan
0
 
mokuleCommented:
I don't quite understand what do You mean by release mouse.

But in any case You sould do it rather here

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
    begin
// Your code
    end;
end;

Set
 Form1.KeyPreview := True;
0
 
bpanaCommented:
use it in OnMouseMove:

if ssLeft in Shift then
begin
  Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;

Bogdan
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

 
brimountainAuthor Commented:
Hi Bpana

Your answer is nearly what's I need.  What I actually want is that:

While I am holding the left mouse button down, I press the Escape key (still keep holding the left mouse button down). It functions exactly as I physically release my index fingure holding down the left mouse button.  

Brimountain
0
 
mokuleCommented:
But You must be aware that MouseUp will be fired once more when the left mouse button will be really released

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
    begin
    Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    end;
end;
0
 
bpanaCommented:
hi,

on the OnKeyDown event:

  if Key = VK_ESCAPE then
    if csLButtonDown in Button1.ControlState then
      Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Bogdan
0
 
bpanaCommented:
change Button1 with (Sender as TControl)

if Key = VK_ESCAPE then
  if csLButtonDown in (Sender as TControl).ControlState then
    Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

Bogdan
0
 
MikProgCommented:
You need to
  SetCaptureControl(nil);
or
  Mouse.Capture:=0;
I.E.
  if Key = VK_ESCAPE then
    SetCaptureControl(nil);
This cancels mouse capture mode -> Mouse events will be sended to control where mouse cursor moved.
0
 
brimountainAuthor Commented:
Thank you so much, but i am pretty busy nowadays. I'll try your comments when free and get back soon.
0
 
brimountainAuthor Commented:
Sorry, but none of your solution fully answers my question.

Could you please open Paint pgrogram (Start/All programs/Accessories/Paint) then click on the Pecil icon on the left hand side toolbar then draw something and press Escape key while still hold the left mouse button down to see how it works? I want the solution like that.

Bri
0
 
mokuleCommented:
You've got such a solution from me.:)

This is the line.
// Your code
There are no other possibilities. You must undo all changes done during the operation.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.