![]() |
Parent Abfrage
Hallo.
Ich hantiere schon seit zwei Tagen mit dem Problem herum, dass ich eine simple Abfrage nicht durchführen kann. Foren und Internet haben mich nicht sonderlich weiter gebracht ... wahrscheinlich liegt es wieder an einem trivialen Fehler oder ich bin zu blöd (ich bin etwa 4 Wochen alt, was Delphi Kenntnisse angeht). Folgender Sachverhalt: Ich habe vor, sagen wir, ein Bild zu bewegen mit MouseDown/Move/Up. Jetzt möchte ich Bilder, die auf einer Scrollbox liegen, NUR in X-Richtung hin und her schieben, und alle anderen Bilder (die auf der Form liegen) in beide Richtungen. Dazu habe ich mir eine Abfrage gebastelt, die schaut, wer das Parent des jeweiligen Bildes ist. Dort ist der Haken.
Delphi-Quellcode:
Der Compiler sagt:
procedure TForm1.CustomImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //CustomImageMouseDown/Move ist die custom Procedure für mehrere Bilder begin MoveTag:= TImage(Sender).Tag; MovingImage:= CardPanel[MoveTag]; //das Image liegt auf einem Panel drauf, also MovingImage ist eig. das Panel MouseMoveDown := true; GetCursorPos(OldPos); DiffX := OldPos.X - MovingImage.Left ; DiffY := OldPos.Y - MovingImage.Top ; end; procedure TForm1.CustomImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin GetCursorPos(OldPos); if MouseMoveDown = true then begin MovingImage.Left := OldPos.X - DiffX ; //Immer in X-Richtung if GetParent(MovingImage.Handle) is ((P1Scrollbox) or (P2Scrollbox)) then begin MovingImage.Top := OldPos.Y - DiffY; //Nur wenn NICHT auf einer ScrollHand end; end; end; "[Pascal Fehler] MovingImages.pas(511): E2015 Operator ist auf diesen Operandentyp nicht anwendbar." Der Fehler liegt laut Compiler in der If Parent Abfrage. Ich habe gehört, dass man das .Handle irgendwie braucht, aber so richtig bin ich da nicht durchgestiegen. Die Lösung des Problems ist für mich nicht lebenswichtig, da ich immer noch "schummeln" könnte, und in den Hint jedes Objektes einfach sein Parent (oder irgendein Erkennungsmerkmal) reinschreibe beim Erzeugen zur Laufzeit. Aber ich halte das nicht für Elegant, außerdem habe ich nicht unendlich viele Hint-Plätze pro Objekt zur Verfügung. :D Wenn das Problem wirklich zu trivial ist oder per Tutorial zu lösen wäre, schlagt zu und schickt mich zu den Tutorials zurück! ...aber ich freue mich gerne über Beiträge! :D |
AW: Parent Abfrage
Versuch es mal mit
Delphi-Quellcode:
if (MovingImage.Parent = P1Scrollbox) or (MovingImage.Parent = P2Scrollbox) then
(* Dummy-Zeile für den Parser der DP *) ![]() ![]() P.S: Bitte niemals(!!) auf true prüfen, das kann ins Auge gehen. |
AW: Parent Abfrage
Ach ja, bin ich dämlich!
mit x is y fragt man nach der Klasse! Oh Mann! :cyclops: Vielen Dank, funktioniert tadellos! Wusste ich doch, dass der Kram trivial ist. Und danke für die Zusatzinfos, werd ich beherzigen! :) |
AW: Parent Abfrage
Was ich noch vergessen hatte zu erwähnen: falls Du generell Images, die sich auf Scrollboxen befinden, ansprechen möchtest, kannst Du tatsächlich das is verwenden. Dann ginge das mit
Delphi-Quellcode:
if MovingImage.Parent is TScrollbox then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz