Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TImage auf TPanel, Mausereignisse abfangen? (https://www.delphipraxis.net/41328-timage-auf-tpanel-mausereignisse-abfangen.html)

soeren 1. Mär 2005 18:25


TImage auf TPanel, Mausereignisse abfangen?
 
Ich habe mit Delphi wenig Erfahrung und so meine Schwierigkeiten. Mein Problem: Wenn ich eine eigene Komponente entwickele und ein Image auf ein Panel lege, dann weiß ich nicht, wie ich den Click und MouseDown an das Panel weiterleiten soll. Wenn der Benutzer auf die Komponente klickt, klickt er ja nicht auf das Panel sondern das Image. Wenn ich jetzt für die Komponente die procedure MouseDown überschreibe, dann wird diese procedure nie aufgerufen.
Ich kann zwar im 'CreateWnd' die Anweiseung geben: FImage.OnMouseDown:= OnMouseDown; aber das wirkt sich scheinbar nur auf die vom Benutzer neu geschriebenen OnMouseDown proceduren aus. Nicht aber auf die überschriebenen proceduren der Komponente.

Würde mich über Antworten freuen. Möglichst so deutlich antworten, daß ein Anfänger das versteht.
Danke! :stupid:

himitsu 1. Mär 2005 18:37

Re: TImage auf TPanel, Mausereignisse abfangen?
 
in den Komponenten TPanel und TImage gibt es eine Function, welche die KoOrdinaten umrechnet,

oder du rechnest selber und leitest dann die neuen Koordinaten an's Panel weiter du leitest einfach im OnClick des Images die P

Delphi-Quellcode:
Procedure Form1.ImageOnKlick(Sender; X, Y);
  Begin
    PanelOnClick(Sender, X + Image.Left, Y + Image.Top);
  End;
(das ist nur ein Beispiel, also Namen... müssen noch an dein Programm angepasst wergen)

Aber vom Speicher her wäre es besser, wenn du kein Image verwendest, sondern das Bild im OnPaint-Ereignis der Panels selber (über Panel.Canvas.Draw, oder ähnliches) reinzeichnest und dann gehen sogar alle Klicks gleich ans Panel ;)


[add]
Ach ja ... Herzlich Willkommen bei uns :hi:

soeren 1. Mär 2005 18:46

Re: TImage auf TPanel, Mausereignisse abfangen?
 
Danke für die schnelle Antwort - werde ich ausprobieren. Aber eins verstehe ich nicht: Du schreibst, daß ich Panel.canvas etc... benutzen soll. Nur wie komme ich an das Canvas vom Panel? Wenn ich Panel. aufrufe, dann erscheint in der Hilfe allenfalls eine Eigenschaft 'color', aber kein Canvas auf dem ich ein Bitmap oder ähnliches zeichnen könnte. :roll:

himitsu 1. Mär 2005 18:51

Re: TImage auf TPanel, Mausereignisse abfangen?
 
Also eigenlich müßte ein TPanel auch ein Canvas haben, so als graphisches Objekt ... vieleicht ist es ja irgendwo untergeordnet (was ich aber nicht glaube) ... schau am Besten mal in die OH :gruebel:

teebee 1. Mär 2005 19:39

Re: TImage auf TPanel, Mausereignisse abfangen?
 
Wenn Du eine eigene Komponente von T(Custom)Panel ableitest, brauchst Du bloss die Eigenschaft Canvas als public zu deklarieren. Sie ist nämlich bereits da, allerdings protected.

Gruß, teebee


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 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