AGB  ·  Datenschutz  ·  Impressum  







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

Von Seattle nach Berlin

Ein Thema von Sherlock · begonnen am 1. Jun 2016 · letzter Beitrag vom 7. Jun 2016
 
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#8

AW: Von Seattle nach Berlin

  Alt 4. Jun 2016, 15:32
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).

Geändert von Harry Stahl ( 4. Jun 2016 um 15:46 Uhr)
  Mit Zitat antworten Zitat
 


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 07:15 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