FireMonkey 3D: Object per Mausklick identifizieren
-
Hallo.
Ich habe ein Viewport3D mit ein paar TCube drin. Jetzt möchte ich gern ein TCube auswählen und dann über Steuerelemente bewegen. Aber wie wähle ich den TCube aus?
Der TCube selbst hat ein OnClick Ereignis, ich möchte aber viele dynamisch erstellen und dann per Viewport3D1MouseDown(..) den gewählten TCube erhalten.
Ich dachte das ginge so in der Art:void __fastcall TForm1::Viewport3D1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { IControl *object = ObjectAtPoint(ScreenToClient(PointF(X, Y))); if (object) { TFmxObject *element = object->GetObject(); ShowMessage(element->Name); } }
Funktioniert aber so nicht. Kann mir hier jemand weiterhelfen?
-
In Sender steckt das das Ereignis auslösende Objekt, also einfach nach TViewport3D casten.
-
Ich glaub nicht das dies so klappt. Das Ergebnis von diesem hier zeigt mir jedenfalls immer nur "Viewport3D1", egal wohin ich klicke. Wenn ich auf einen TCube klicke, sollte aber sowas wie "Cube13" kommen. Das meintest du doch so, oder?
void __fastcall TForm1::Viewport3D1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { ShowMessage(((TViewport3D*)Sender)->Name); //ShowMessage(((TControl3D*)Sender)->Name); }
-
Wenn ich bei allen 3D Objekten OnClick auf "Viewport3D1Click" setze, dann kann ich in der Funktion Viewport3D1Click(TObject *Sender) den Sender abfragen, sprich die 3D Objekte wo ich OnClick gesetzt habe. Danke, das hilft so schon einmal weiter.