AW: Abfragemenü
Zitat:
Frage am Rande, wie kann man in einer eigenen procedure oder function einen SaveDialog erstellen? Er meckert immer über den Parameter self,
Delphi-Quellcode:
.
SpeicherDialog := TSaveDialog.Create(self);
|
AW: Abfragemenü
Warum willst du ihn selber erstellen? Zieh die Komponente auf das Formular und rufe ihn auf.
|
AW: Abfragemenü
Hm, ja stimmt... das sollte ich tun.
Aber wie würde es trotzdem gehen? Geht es überhaupt? |
AW: Abfragemenü
Zitat:
|
AW: Abfragemenü
Also bei Speicherdialog := TSaveDialog.Create(self) erkennt er das self als undeklarierten Bezeichner und bei
Speicherdialog := TSaveDialog.Create; fehlen ihm Parameter. (Es handelt sich hierbei um eine eigene Procedure und kein Ereignis) |
AW: Abfragemenü
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:
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.
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; |
AW: Abfragemenü
Aha, gut zu wissen.
Ich hab jetzt aber einfach die Dialoge aufs Formular gezogen, wie Luckie gesagt hat, und damit haufenweise Quelltext gespart ;) Danke für deine Mühe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz