![]() |
Re: Rückgabewert von Function freigeben
Heißt das, dass dieser Code:
Delphi-Quellcode:
Gegen die Wand laufen würde? Ich dachte immer die Objektvariable sei nur ein Pointer auf das Objekt? :gruebel:
var
B: TBitmap; begin B := Foo; FreeAndNil(B); end; Greetz alcaeus |
Re: Rückgabewert von Function freigeben
Delphi-Quellcode:
Die Komponente comp ist danach aber immer noch NIL?!? :gruebel:
var comp : TComponent;
procedure TForm1.Button1Click(Sender: TObject); var p : Pointer; begin p.free; p := @comp; p := TComponent.Create(form1); if comp = nil then showmessage('NIL'); end; |
Re: Rückgabewert von Function freigeben
@LoL:
Wie ich schonmal sagte, das Problem ist hier einfach nur, dass FreeAndNil eine Variable als Parameter haben will und eine Function als Funktionsergebnis eben nur sowas wie eine Konstante zurückgibt. Demnach geht folgendes eben nicht.
Code:
Aber wie man oben schön sieht gibt es viele Möglichkeiten dieses zu umgehen.
procedure CurrentOL(var Value : TComponent);
begin if ... then Value := EineKomponente else Value := EineAndereKompoente; end; [color=#ff0000]FreeAndNil(CurrentOL);[/color] - über Pointer - über 'ne zusätliche Variable - ... |
Re: Rückgabewert von Function freigeben
ich beziehe mich jetzt auf mein beispiel direkt über deinem post...
warum ist die componente die auf die der pointer zeigt nil? |
Re: Rückgabewert von Function freigeben
Das ist das Problem, wenn man mit den Pointern Falsch umgeht :zwinker:
Ich hoffe so geht es: (hab ja selber noch nicht alle Tricks drauf)
Code:
[add]
procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer; begin p.free; p := @comp; p := [color=#ff0000]@[/color]TComponent.Create(form1); if comp = nil then showmessage('NIL'); end; neee, ich glaub so geht es auch nicht, aber sowas in der Richtung muß es wohl sein aber p.Free ist eh falsch. So sollte es an dieser Stelle wohl richtiger sein:
Delphi-Quellcode:
var p : Pointer;
p^.Free; TCompunent(p^).Free; |
Re: Rückgabewert von Function freigeben
das geht gar nicht dann kommt variable required...
müsste das aber wenn dann nicht umgekehrt sein? war das nicht irgendwie so dass man dazu den pointer dereferenzieren muss |
Re: Rückgabewert von Function freigeben
Wie schon gesagt besteht die einzige Möglichkeit darin, den Rückgabewert der Funktion einer Objektvariablen zuzuweisen und dann den Destruktor des Objekts aufzurufen (oder eben FreeAndNil).
Das ganze Gerede um Zeiger in dem Thread hier ist zumeist falsch, darüber hinaus wird in Delphi ein Objekt grundsätzlich dynamisch instantiiert, die Objektvariable ist also nichts weiter als ein typisierter Zeiger. |
Re: Rückgabewert von Function freigeben
ich hab es nun:
Delphi-Quellcode:
var comp : TComponent;
procedure TForm1.Button1Click(Sender: TObject); var p : Pointer; begin p := @comp; TComponent(p^).free; TComponent(p^) := TComponent.Create(form1); if comp = nil then showmessage('NIL'); end; |
Re: Rückgabewert von Function freigeben
Zitat:
|
Re: Rückgabewert von Function freigeben
also ich erklär mal wozu ich das brauche:
ich verwende die Komponente TChart. dort habe ich mehrere graphen. zu jedem graph habe ich eine art Object liste weil ich an den graphen teilweise edits und andere komponenten positionieren muss. nun brauche ich eine funktion die mir die aktuelle objectlsite zurück gibt in abhängikeit davon welche series gerade bearbeitet wird. ich will das mit einer funktion machen da ich direkt mit dem zurückgegebenen wert der funktion arbeiten will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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