Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Feb 2005
Klar, indem du es so machst, wie in deinem ersten Code,
function CurrentOL : TComponent;
begin
if ... then result := EineKomponente
else result := EineAndereKompoente;
end;
nur dann kannst du das ergebnis wiederum nicht direckt an ein andere Fumktion übergeben, welche einen Var-Parameter haben will (wie z.B. an FreeAndNil)
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Feb 2005
nee, beim 1. sind das ja die Zeiger auf die Variable (glaub ich), und da c1 und c2 immer nur auf vie Variable zeigen, sollte es dann wohl so aussehn.
if cur^ <> nil then ...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Feb 2005
hmmm, versuch's mal so ... ich c1 un cur sind ja eingenständige Variablen, in denen die Pointer gespeichert werden, also haben @c1 und @cur auch immer unterschiedliche Adressen.
var c1,c2 : TComponent;
b : boolean;
function muh : Pointer;
begin
result := nil;
if b then
result := @c1
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Feb 2005
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)
procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer;
begin
p.free;
p := @comp;
p := @TComponent.Create(form1);
if comp = nil then showmessage('NIL');
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Feb 2005
@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.
procedure CurrentOL(var Value : TComponent);
begin
if ... then Value := EineKomponente
else Value := EineAndereKompoente;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Feb 2005
Ja alcaeus, so klappt es, aber da in diesem fall nicht .Free, sonder Funktion FreeAndNil verwendet wird, wird eine Variable benötogt und Funktionen lievern nunmal Konstanten als unktionsergebnis.
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Feb 2005
Du könntest ja auch mit Zeigern arbeiten?
Also in etwa so:
function CurrentOL : Pointer;
begin
if ... then result := @EineKomponente
else result := @EineAndereKompoente;
end;