Wenn man den von mir erwähnten Weg (temporär) nutzen will, dann könnte man das auch in Zusammenhang mit einem Classhelper machen.
Vorteil wäre, dass der bisherige Code compiliert und falls die Entfernung der parent-Eigenschaft ein Bug gewesen sein sollte, und man die wieder rein bringen sollte, dann entfernt man einfach den Verweis auf die
Unit, welche den ClassHelper enthält und alles ist wieder beim alten.
Konkretes Beispiel, der folgende Code compilierte und lief unter Seattle ordnungsgemäß, unter Delphi Berlin nicht mehr (überall wo man die entfernte Parent-Eigenschaft verwenden will, meckert der Compiler rum):
Delphi-Quellcode:
procedure TForm25.FormCreate(Sender: TObject);
var
L: Integer;
TL: TListViewItem;
begin
for L := 0 to 10 do begin
TL := TListviewItem (listview1.Items.Add);
TL.parent := Listview1; // *Mark
TL.Text := 'ItemA' + L.ToString + TL.Parent.ClassName;
end;
end;
Wenn man nun eine
Unit Namens "CLHelperLVItem" erstellt, die dann unter uses, im Implementation Abschnitt einbindet:
Delphi-Quellcode:
mplementation
{$R *.fmx}
uses CLHelperLVItem;
Dann läuft es wieder.
Die ClassHelper
Unit sieht so aus:
Delphi-Quellcode:
unit CLHelperLVItem;
interface
Uses
System.Types, System.UITypes, System.Classes, FMX.Types, FMX.Controls,
FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
FMX.ListView;
Type
TMListViewItemHelper =
Class helper
for TListviewitem
private
function GetParent: TControl;
procedure SetParent (Control: Tcontrol);
public
property Parent: TControl
read GetParent
write SetParent;
end;
implementation
{ TMListViewItemHelper }
function TMListViewItemHelper.Getparent: Tcontrol;
begin
Result := TControl (Tag);
end;
procedure TMListViewItemHelper.SetParent (Control: TControl);
begin
Tag := LongInt (Control);
end;
end.
Das einzige: Man muss sich um das setzen der Parent-Eigenschaft selbst kümmern (siehe oben, Stelle "*Mark"). Meistens haben die Anwender das aber sowieso schon gemacht, wenn nicht, müsste man das an diesen Stellen nachholen.
Wie gesagt Vorteil ist, dass der alte Code überwiegend oder ganz ohne Änderungen laufen sollte und man bei einem späteren Bugfix (Wiedereinführung von "Parent") nur den Verweis auf den Classhelper entfernen muss.
Der WorkAround geht natürlich nur, wenn man die TAG-Eigenschaft bislang nicht anderweitig verwendet hatte (neue Felder darf man ja den Class Helpern leider nicht zufügen, daher musste ich an was existierendes anknüpfen).