Thema: Delphi Parent Abfrage

Einzelnen Beitrag anzeigen

Antonov

Registriert seit: 11. Apr 2014
21 Beiträge
 
FreePascal / Lazarus
 
#1

Parent Abfrage

  Alt 27. Apr 2014, 11:30
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:
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;
Der Compiler sagt:
"[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.

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!
  Mit Zitat antworten Zitat