Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 198
  • Last Modified:

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


0
brimountain
Asked:
brimountain
  • 4
  • 3
  • 3
  • +1
1 Solution
 
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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
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

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now