![]() |
Zuweisung property Delphi 2010
Hi, ich hab hier ein kleines Problem mit D2010 und einer Property.
Und zwar hab ich hier ne Komponente wo TDragObject aus der Controls-Unit verwendet wird. DragObject.DragPos ist ein TPoint. Jetzt würde ich das gerne zuweisen, aber habe hier schon gelesen, dass das mit D2010 nicht mehr so geht. Nur wie kann ich dem jetzt was zuweisen? Kann ja schließlich nicht die vorgefertigten Units umschreiben..
Delphi-Quellcode:
Hoffe mir kann hier wer helfen?
procedure TCustomElTree.StartDragTransfer(Sender : TObject; var DragObject : TDragObject);
{ Transfers FView OnStartDrag event to the outside world. } begin {$IFDEF VCL_4_USED} if DragObject <> nil then with DragObject.DragPos do begin y := y + FView.Top; X := X + FView.Left; end; ... Gibts eigentlich irgendwo en gutet Tutorial, was man bei den ganzen Änderungen in D2010 beachten/ändern muss? Viele Grüße Thorben |
Re: Zuweisung property Delphi 2010
Ich wüsste jetzt spontan keinen Grund, wieso sich in D2010 eine Property nicht beschreiben lassen sollte, sein denn, die Property wäre ReadOnly. Das wäre aber kein "Problem" von D2010 sondern die "Eigenschaft" der Property, die sich auch mit z.B. D7 nicht beschreiben ließe.
Lasse mich aber gern eines Besseren belehren. Sollte der Unterschied von D2009 zu D2010 doch so heftig sein?? Kann ich kaum glauben. Wobei sich mir auch die Frage stellt, wieso man im DragStart die Start-Position ändern muss? :gruebel: Aber du wirst bestimmt Gründe dafür haben ... Was sagt denn der Compiler dazu? |
Re: Zuweisung property Delphi 2010
Delphi 2010 meckert jetzt endlich mal, wenn man sowas versucht, denn früher war es zwar möglich, aber nicht wirklich.
Gab vor 'ner Weile auch einen Thread dazu. .DragPos ließt wirklich das Property (TPoint) aus, aber X und Y würden nur innerhalb des ausgelesenen Wertes geändert und nicht innerhalb der Komponente
Delphi-Quellcode:
ergibt intern
with DragObject.DragPos do
begin y := y + FView.Top; X := X + FView.Left; end;
Delphi-Quellcode:
with DragObject.GetDragPos do
begin y := y + FView.Top; X := X + FView.Left; end;
Delphi-Quellcode:
Und nun fällt vielleicht auch auf, warum sowas nun nicht mehr zugelassen wird.
temp := DragObject.GetDragPos;
temp.Y := temp.Y + FView.Top; temp.X := temp.X + FView.Left; |
Re: Zuweisung property Delphi 2010
Aha. Kling sinnig. Gut zu wissen.
Wäre dann die Lösung width nicht zu verwenden? Also so:
Delphi-Quellcode:
procedure TCustomElTree.StartDragTransfer(Sender : TObject; var DragObject : TDragObject);
{ Transfers FView OnStartDrag event to the outside world. } begin DragObject.DragPos.y := DragObject.DragPos.y + FView.Top; DragObject.DragPos.X := DragObject.DragPos.X + FView.Left; |
Re: Zuweisung property Delphi 2010
Zitat:
im Prinzip gibt es diese Möglichkeiten:
Delphi-Quellcode:
var V: TPoint;
V := DragObject.DragPos; V.Y := V.Y + FView.Top; V.X := V.X + FView.Left; DragObject.DragPos := V;
Delphi-Quellcode:
[delphi]DragObject.DragPos := Point(DragObject.DragPos.X + FView.Left,
var V: TPoint;
V := DragObject.DragPos; DragObject.DragPos := Point(V.X + FView.Left, V.Y + FView.Top); DragObject.DragPos.Y + FView.Top);/delphi] |
Re: Zuweisung property Delphi 2010
Ein wenig aufpassen muss man hier allerdings, weil wenn hinter der Property kein Record (=Wertetyp) sondern eine Klasse (=Referenztyp) steht, DANN ginge was du zu Anfang gemacht hast sehr wohl. Bei Klassen wird nämlich keine Kopie der Werte, sondern eine Referenz auf exakt die anhängige Instanz zurückgegeben. Die Variante für Records tut dann zwar auch, ist aber an sich zu viel gemacht. Wenn man nicht weiss was sich hinter einer Property genau verbirgt, wäre das also erstmal der sichrere Weg.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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