Thema: Abfragemenü

Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#16

AW: Abfragemenü

  Alt 20. Apr 2011, 13:06
Du kannst auch anstatt Self einfach nil einsetzen, solltest dich dann aber um die Freigabe selbst kümmern! Denn dann wird der SaveDialog nicht mehr automatisch freigegeben, wenn die Form beendet wird. Mein try-finally-Block von oben ist eben genau dafür da

Und bzgl. dem Fehler bei deinem Self: du wirst sehr wahrscheinlich wohl keine Methode der TForm1 (oder wie deine Klasse sonst heißt) aufrufen, sondern eine, die mit keiner Klasse was zu tun hat. Daher ist auch das Self nicht definiert -- was sollte denn Self in der Methode darstellen, nachdem es nicht innerhalb eines Klasse-Kontexts implementiert ist?
Delphi-Quellcode:
type
TForm1 = class(TForm)
public
  procedure Foo();
  procedure Bar();
end;

procedure DoSomething();
begin
  // Hier kann es kein Self geben, da es keine Klassemethode
  // ist. Du müsstest dann einen Parameter Self definieren,
  // der eben dann diese Rolle übernimmt.
end;

procedure TForm1.Foo();
begin
  DoSomething();
end;

procedure TForm1.Bar();
begin
  // Hier gibt es Self, da es eine Methode einer Klasse ist
  Self.Foo();
end;
PS: Wenn du eine Klassenmethode Foo() hast, denn erzeugt der Compiler diese so, dass es einen versteckten Parameter Self gibt, d.h. Foo(Self: TObject) (bzw. evtl. TForm anstatt TObject), wovon du aber gar nichts mitbekommst. Daher kannst du dort auch ohne Probleme Self verwenden.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (20. Apr 2011 um 13:13 Uhr)
  Mit Zitat antworten Zitat