Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mausclick Position auf einem Bitmap auslesen (https://www.delphipraxis.net/203250-mausclick-position-auf-einem-bitmap-auslesen.html)

zobien123 28. Jan 2020 10:42

Delphi-Version: 10.3 Rio

Mausclick Position auf einem Bitmap auslesen
 
Hallo zusammen,

ich versuche gerade die Position der Maus bei dem Click auf ein Bitmap auszulesen, leider ohne Erfolg. Ich habe versucht ein Panel "drunter zu legen" um mit dem OnClick Event die Position auszulesen, jedoch wie bereits erwartet: Das Bitmap "versperrt" den Click auf das Panel.

Gibt es eine andere Möglichkeit die Position der Maus auszulesen, wenn man an auf ein Bitmap klickt? Das Bitmap wird normalerweise in meinem Programm auf einem PageControl kreiert.

Vielen Dank

DeddyH 28. Jan 2020 10:48

AW: Mausclick Position auf einem Bitmap auslesen
 
Eine Bitmap kann man nicht klicken, da sie kein Control ist. Meinst Du vielleicht ein TImage? Oder zeichnest Du sie selbst auf den Canvas eines Controls?

zobien123 28. Jan 2020 10:54

AW: Mausclick Position auf einem Bitmap auslesen
 
Ich erstelle zur Laufzeit ein TBitmap. Ich greife dann auf Canvas zu und zeichne so ein Grid. Mein Ziel ist es nun herauszufinden wo ich auf dem Grid hingeklickt habe um Werte von der geklickten Stelle auszugeben.


PS: Ich nutze die Komponente von https://torry.net/authorsmore.php?id=6603 (Regression Analysis Graph) um einen Graph zu Zeichnen, da ich dies gern ohne TChart o.ä. von Delphi ausprobieren möchte.

DeddyH 28. Jan 2020 11:07

AW: Mausclick Position auf einem Bitmap auslesen
 
Auf welchen Canvas greifst Du zu? Der muss ja zu irgendeinem Control gehören, da sollte sich im Normalfall auch ein OnClick-Event finden.

zobien123 28. Jan 2020 11:19

AW: Mausclick Position auf einem Bitmap auslesen
 
Auf die Canvas von Bitmap :D Vielleicht versteh ich auch nicht so ganz was Du meinst, aber hier mal ein Codeausschnitt.

Delphi-Quellcode:
_Bmp := TBitmap.Create;
...
_Bmp.Canvas.Pen.color := _GridColor;
_Bmp.Canvas.Pen.Width := 1;
_Bmp.Canvas.Brush.color := Color;
_Bmp.Canvas.Pen.Width := 1;
...

Michael II 28. Jan 2020 11:29

AW: Mausclick Position auf einem Bitmap auslesen
 
Poste doch ein wenig Code...

Gemäss deiner Beschreibung vermute ich, dass du im OnMouseDown deines Formulars die Mauskoordinaten abfangen kannst (dabei natürlich berücksichtigen musst, dass es Formularkoordinanten sind)...

...oder natürlich über ApplicationEvents (oder Überschreiben von WndProc).

Einfacher wäre es doch bestimmt, wenn du du in deinem PageControl auf dem TabSheet auf welchem du die Bitmap anzeigen willst ein Image einfügst und deine Bitmap in diesem Image ablegst. Vorteile: Die Bitmap muss nicht neu gemalt werden bei einem OnPaint und Image kennt OnMouseDown.

Neutral General 28. Jan 2020 11:31

AW: Mausclick Position auf einem Bitmap auslesen
 
Wo wird das Bitmap angezeigt? Wenn du einfach nur ein Bitmap erstellst und darauf zeichnest dann siehst du im Programm rein gar nichts.
Du musst das Bitmap einem Image o.ä. zuweisen oder es von Hand auf ein Canvas eines Controls zeichnen.

Wie schon gesagt wurde: Ein Bitmap ist genausowenig ein Control wie ein String ein Control ist und man kann dementsprechend nicht drauf klicken.
Du kannst allerdings auf das Control klicken auf dem das Bitmap gezeichnet wird.

Also: Was machst du mit dem Bitmap nachdem du drauf zeichnest?

himitsu 28. Jan 2020 12:10

AW: Mausclick Position auf einem Bitmap auslesen
 
Jupp, das woruf du malst, davon die MouseEvents verwenden.

Willst du die Position nicht umrechnen (Offset X:Y der Zeichenaktion nicht abziehen), dann nimm eine TPaintBox
und dort hast dann auch deine eigenen MouseEvents nur für dieses Bitmap.

Oder TImage, dort kannst im Image.Picture.Bitmap auch dessen TBitmap-Instanz benutzen.
(wird auf Picture.Bitmap zugegriffen dann wird automatisch in Picture.Graphic eine TBitmap erstellt)

KodeZwerg 28. Jan 2020 13:12

AW: Mausclick Position auf einem Bitmap auslesen
 
ClientToScreen <-> ScreenToClient nennen sich die beiden Hauptmethoden die ich einsetze um absolute Positionen zu bestimmen/erhalten.
Ich male bei solchen vorhaben auf ein (entweder mit oder ohne border) Panel und berechne alles nur über Prozente anstelle absoluter Pixelangaben, so ist es einigermaßen Skalierungssicher.

DeddyH 28. Jan 2020 16:49

AW: Mausclick Position auf einem Bitmap auslesen
 
Ohne Control keine Control-Methoden. Aber da der Code anscheinend Top Secret ist, warte ich erst einmal ab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.

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