Forum: Object-Pascal / Delphi-Language
by TiGü,
30. Sep 2015
Nein, muss man für den Fall einer TComponent/TForm eben nicht.
Hier kann auch einfach geprüft (is-Operator) und gecastet werden (as-Operator), ohne das dir irgendetwas kaputt geht, weil der Reference Counting Mechanismus für TComponent anderes implementiert ist, als bspw. für TInterfaceObject.
Wenn es also heißt:
type
TDeineForm = class(TCustomForm, IEineFunktionalität,...
Forum: Object-Pascal / Delphi-Language
by TiGü,
24. Sep 2015
Uff, soviel Text und dein Problem ist dabei ganz einfach:
Verwende NICHT die Objektinstanzen, sondern nur die Interfaceinstanzen.
Vergleiche den von mir zitierten Abschnitt nochmal ganz genau mit meinen Quelltext aus dem Post davor (Tipp: Schaue die Variablen-Deklaration an).
Und ggf. auch nochmal zum nachlesen:...
Forum: Object-Pascal / Delphi-Language
by TiGü,
21. Sep 2015
Warum machst du das jetzt so?
Das harte casten auf die Klasse ist suboptimal.
Wenn du möchtest, dass ein klarer(er) Bezug zu IPlanDataEnumerator besteht kannst du es auch so schreiben:
procedure Tfrm_Main.UpdateStatusBar;
var
Summary: ISummary;
begin
Summary:=TMySummary.Create;
Summary.Init;
ProjectData.CallEnumeratorForAllElements(Summary as IPlanDataEnumerator ); // <<<<< Hier...
Forum: Object-Pascal / Delphi-Language
by TiGü,
18. Sep 2015
Hast du ISummary von IPlanDataEnumerator abgeleitet?
Forum: Object-Pascal / Delphi-Language
by TiGü,
18. Sep 2015
IPlanDataEnumerator = Interface
procedure HandlePlanDataElement(PD: TPlanData);
procedure Init; // <--- falls alle anderen Klassen das auch brauchen, ansonsten in das entsprechende Interface verschieben
End;
ISummary = interface(IPlanDataEnumerator)
function GetCountUnassignedOrderPackages : Integer;
function GetCountUnassignedOrders : Integer;