Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mausposition in Paintbox (https://www.delphipraxis.net/25719-mausposition-paintbox.html)

Spurius 11. Jul 2004 10:11


Mausposition in Paintbox
 
Hallo,
wie kann ich in einer Paintbox die Mausposition herausbekommen?
Gruß
Spurius

semo 11. Jul 2004 10:15

Re: Mausposition in Paintbox
 
einfach das mouseMove-event der PaintBox verwenden!
darin dann die x und y koordinate ausgeben lassen:


Code:
procedure TTestform.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  Caption := IntToStr(X) + ' *** ' + IntToStr(Y);
end;

Spurius 11. Jul 2004 10:19

Re: Mausposition in Paintbox
 
Und wie geht das wenn ich die Mausposition beim OnClick Ereignis herausbekommen will?

semo 11. Jul 2004 10:22

Re: Mausposition in Paintbox
 
dann verwendest du die im OnMouseMove ermittelten Koordinaten trotzdem und deklarierst diese als private Variablen des Forms. Beim OnClick-Event klannst du dann diese ganz einfach verwenden :wink:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    xPos,
    yPos: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  xPos := X;
  yPos := Y;
end;


procedure TForm1.PaintBox1Click(Sender: TObject);
begin
  Caption := IntToStr(xPos) + ' *** ' + IntToStr(yPos);
end;

end.


wobei du aber auch eine Variable vom Typ TPoint verwenden kannst:

deklaration: anstatt xPos,yPos: Integer --> pt: TPoint;

und anstatt Caption := IntToStr(xPos) + ' *** ' + IntToStr(yPos);
--> Caption := IntToStr(pt.X) + ' *** ' + IntToStr(pt.Y);

Spurius 11. Jul 2004 10:26

Re: Mausposition in Paintbox
 
Ok, vielen Dank.

atreju2oo0 11. Jul 2004 10:33

Re: Mausposition in Paintbox
 
Meiner Meinung nach wäre das der effizientere Weg:

Delphi-Quellcode:
procedure TForm1.PaintBox1Click(Sender: TObject);
var Pos:TPoint;
begin
Pos:=Mouse.CursorPos;
showmessage(inttostr(pos.X));
end;

Sharky 11. Jul 2004 10:38

Re: Mausposition in Paintbox
 
Zitat:

Zitat von atreju2oo0
Meiner Meinung nach wäre das der effizientere Weg:...

Damit bekommst Du abe die Koordinaten des Cursors auf dem Desktop und nicht die relativen der Painbox.

atreju2oo0 11. Jul 2004 10:43

Re: Mausposition in Paintbox
 
Shit... stimmt...
Bei meinem Prog war eh fullscreen und da ist das nicht aufgefallen...:oops:
Da hätt ich mich beim nächsten mal wider sau geärgert...
:dp:

Mirilin 11. Jul 2004 12:11

Re: Mausposition in Paintbox
 
:hi:

Die PaintBox hätte sonst auch nocht OnMouseDown :)

mfg Tobias

Muetze1 11. Jul 2004 15:36

Re: Mausposition in Paintbox
 
Moin!

Und zu bevorzugen wäre OnMouseUp - weil bei Windows kann man auch einen Button drücken und es sich trotzdem vor dem Loslassen der Maustaste es nochmal überlegen und mit dem Cursor ausserhalb des Buttons fahren und dort loslassen - dann wird der Click auch nicht ausgelöst. Ausserdem hat man in dem folgenden Code von MouseUp nicht das Problem wie in MouseDown, das die Maus noch gedrückt ist im folgenden, was z.B. wieder neue Aktionen auslösen kann.

Und zu der Mouse.Pos Sache: Nutzt ClientToScreen() bzw. ScreenToClient() der Komponente um die Koordinaten umrechnen zu lassen.

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz