Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
24. Jan 2014
Hallo,
Danke für den Link. Sehr interessant.
Das Problem ist ein anderes: Ich habe mir eine Referenz auf das aktive Control geholt (via TForm.ActiveControl). Danach wurde die UI geleert. Das aktive Control wurde dabei abgeräumt, was dazu führt, dass die Referenz auf Datenmüll im Speicher zeigt.
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
24. Jan 2014
@Furtbichler: Danke für die (wenn auch etwas zu sehr ausgeschmückte) Erklärung zu "as".
P.S.: Der Bauer ist dabei sich an die (an anderen Stränden weitaus besser verfassten) Strandregeln zu halten. Das ist jedoch ein Lernprozess und nicht von heute auf morgen geschehen.
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
24. Jan 2014
Leider kann man das in komplexen Projekten insbesondere in Zusammenspiel mit externen Bibliotheken nicht immer wissen/überschauen.
In dem Beispiel mag das vielleicht noch gehen aber wie du schreibst gibt es 1000 Möglichkeiten, die du bestimmt auch nicht immer im Kopf hast. ;)
OK vielen Dank nochmal für die Hilfe.
P.S.: Der Bauer kann schwimmen, ist nur nicht an eine Badehose voller Blei...
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
24. Jan 2014
Eben nicht, denn "instanceof" prüft ob das referenzierte Objekt zuweisungskompatibel zu einer Klasse ist. "is" hingegen prüft lediglich, ob die Referenz/Pointer zuweisungskompatibel ist (wie man in meinem Beispiel schön sieht). "TObject.InheritsFrom" macht genau das was ich brauche.
Ich habe dein abgeändertes Beispiel ausgeführt. Die Ausgabe ist jedoch anders, als du schreibst:
...
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Mal abgesehen davon das die Beispiele nicht besonders gut gewählt sind, finde ich das ist ein sehr schlechtes Laufzeitverhalten. Wenn ich eine Flasche Wein habe, die jemand austrinkt und danach Wasser reinfüllt, und diese mir dann als Wein verkauft, ist das nichts anderes als Etikettenschwindel.
Zum zweiten Beispiel: Wenn ich eine Referenz auf einen Wohnort von Peter Lustig habe, dann zieht da...
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Ja das weiß ich. Die Frage ist nur warum der Pointer nach dem Leeren des grids auf TcxGridTableView zeigt.
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Das Funktioniert aber nur bei einer flachen Vererbungshierarchie:
Beispiel: TObject -> TMyObject -> TMySubObject
var
obj1 : TMyObject;
obj2 : TMySubObject;
begin
obj1 := (TMyObject.Create);
obj2 := (TMySubObject.Create);
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Hallo nochmal.
Ich habe noch ein wenig debugged. Folgendes ist herausgekommen:
Nicht "ActiveControl" produziert das Problem. Hier der stark vereinfachte Code:
var
ActiveCtrl : TWinControl;
begin
ActiveCtrl := Self.ActiveControl;
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Das funktioniert leider nicht, da "Self.ActiveControl is TWinControl" True zurück liefert, obwohl das Objekt, auf das "Self.ActiveControl" zeigt, nicht kompatible zu TWinControl ist.
Forum: Object-Pascal / Delphi-Language
Delphi
by QStorm,
23. Jan 2014
Hallo,
Ich habe eine Frage zum "is"-Operator. Soweit ich das nachvollziehen konnte prüft er, ob der Pointer von einem bestimmten Typ ist. Ich würde jedoch gerne wissen ob das Objekt, auf das der Pointer zeigt, von einem bestimmten Typ ist.
Hintergrund: Ich bekomme von TForm.ActiveControl einen Pointer auf ein Objekt, das nicht vom Typ TWinControl ist. Das führt im weiteren Verlauf zu einer...