On 04/13/2018 04:45 AM, Giuliano Colla via Lazarus wrote:

Il 13/04/2018 02:40, Donald Ziesig via Lazarus ha scritto:

You're right.  It gets *close* but not quite there.  I can move the control so long as the mouse is *not* over the control while it is moving :-(. I will look at this closer in the morning and see if I can work around it (or if there is something I am missing).


You might find useful, as a guideline, the code I'm using in one of my application to drag a button so that it doesn't cover the useful part of an image. Just using the OnMouseDown, OnMouseMove and OnMouseUp of your TImage, and getting rid of the code you don't need, to perform an extra action on OnMouseUp, you should be able to do the trick.

  TErrForm = class(TForm)
......
  protected
    ResetDragged: Boolean;
    CursorPos: TPoint;
    ObjectPos: TPoint;
....

procedure TErrForm.ResetBtnMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X: LongInt; Y: LongInt);
begin
  ResetDragged := True;
  CursorPos.X := Mouse.CursorPos.X;
  CursorPos.Y := Mouse.CursorPos.Y;
  with ResetBtn do begin;
    ObjectPos.X := Left;
    ObjectPos.Y := Top;
    end;
end;

procedure TErrForm.ResetBtnMouseMove(Sender: TObject; Shift: TShiftState;
  X: LongInt; Y: LongInt);
begin
  if ResetDragged then begin
    with ResetBtn do begin
      Left := ObjectPos.X + (Mouse.CursorPos.X - CursorPos.X);
      Top := ObjectPos.Y +  (Mouse.CursorPos.Y - CursorPos.Y);
      ResetPos.X := (Left * NormalGeometry.ClientWidth div CurrImage.Width) + HorzScrollBar.Position;       ResetPos.Y := (Top * NormalGeometry.ClientHeight div CurrImage.Height) + VertScrollBar.Position;
      end;
    end;
end;

procedure TErrForm.ResetBtnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X: LongInt; Y: LongInt);
begin
  if ResetDragged then begin
    ResetDragged := False;
    Paint;
    end;
  if (abs(Mouse.CursorPos.X - CursorPos.X) < 10) and (abs(Mouse.CursorPos.Y - CursorPos.Y)< 10) then Close;
end;

Hope that it helps.

Giuliano



Hi Giuliano!

It works perfectly. 8-) The best part is that it doesn't use any poorly documented library code and it doesn't hog the CPU either.

Many thanks,

Don

-- 
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to