AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parent Abfrage

Ein Thema von Antonov · begonnen am 27. Apr 2014 · letzter Beitrag vom 27. Apr 2014
Antwort Antwort
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Parent Abfrage

  Alt 27. Apr 2014, 11:45
Versuch es mal mit
Delphi-Quellcode:
if (MovingImage.Parent = P1Scrollbox) or (MovingImage.Parent = P2Scrollbox) then
(* Dummy-Zeile für den Parser der DP *)
GetParent ist eine API-Funktion und gibt Dir nur das Handle des ParentControls zurück. Parent hingegen ist eine Eigenschaft von TControl und liefert Dir die tatsächliche Instanz. Mit is prüft man übrigens, ob ein Objekt von einer bestimmten Klasse abstammt, aber nicht, ob es eine bestimmte Instanz ist.

P.S: Bitte niemals(!!) auf true prüfen, das kann ins Auge gehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antonov

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

AW: Parent Abfrage

  Alt 27. Apr 2014, 11:51
Ach ja, bin ich dämlich!
mit x is y fragt man nach der Klasse! Oh Mann!

Vielen Dank, funktioniert tadellos!
Wusste ich doch, dass der Kram trivial ist.
Und danke für die Zusatzinfos, werd ich beherzigen!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Parent Abfrage

  Alt 27. Apr 2014, 11:55
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
if MovingImage.Parent is TScrollbox then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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