Theo ist der Meister der voreiligen unzulässigen Vereinfachung. Ich bin als Advocatus Diaboli immer eher für vorsorgliche VerkomplizierungChristian hat geschrieben:1+ für Theo an dieser Stelle
-Michael
Theo ist der Meister der voreiligen unzulässigen Vereinfachung. Ich bin als Advocatus Diaboli immer eher für vorsorgliche VerkomplizierungChristian hat geschrieben:1+ für Theo an dieser Stelle
Durch "Anwendung" oder "Programm" und ähnliche Vorgaben sowie durch das aktuelle Betriebssystem beim Erzeugen des Projekts werden unterschiedliche "Widget Type" (aka "Interface") Einstellungen für das Projekt definiert und auch festgelegt,m ob überhaupt eine TApplication-Instanz angelegt wird.Aries hat geschrieben:Hängt davon ab, ob man unter "Neu" auf "Anwendung" oder "Programm" klickt, obwohl da im Code gar keine Ursache für ersichtlich ist. mse hat Recht, mit "{$apptype gui}" erscheint keine Konsole.
Durch "Anwendung" oder "Programm" und ähnliche Vorgaben sowie durch das aktuelle Betriebssystem beim Erzeugen des Projekts werden unterschiedliche "Widget Type" (aka "Interface") Einstellungen für das Projekt definiert und auch festgelegt,m ob überhaupt eine TApplication-Instanz angelegt wird.Aries hat geschrieben:Hängt davon ab, ob man unter "Neu" auf "Anwendung" oder "Programm" klickt, obwohl da im Code gar keine Ursache für ersichtlich ist. mse hat Recht, mit "{$apptype gui}" erscheint keine Konsole.
Vereinfachung? Ja, unbedingt. Wo immer es möglich ist.mschnell hat geschrieben: Theo ist der Meister der voreiligen unzulässigen Vereinfachung.
Das scheint mir auch so.mschnell hat geschrieben:Ich bin als Advocatus Diaboli immer eher für vorsorgliche Verkomplizierung
Nun scheint es tatsächlich notwendig, dass du dir etwas Grundwissen über Object Pascal aneignest. Wie Theo schon schrieb, können dazu auch für Delphi geschriebene Texte verwendet werden. Auch FPC hat eine umfangreiche Dokumentation. Hier nochmals ein link:Aries hat geschrieben:Was bewirkt "Application.Free;"?
Ich vermute, dass Application.Free Application.Terminate aufruft und wartet, bis das Queue-Event, dass die Event-Queue stoppt bearbeitet wurde und erst dann die TApplicastion Instanz wirklich freigibt. Sicher bin ich da aber nicht.Aries hat geschrieben:Was bewirkt "Application.Free;"?
Die Methode Free macht das gleich wie bei allen anderen Objekten: Wenn die Objektvariable nil ist, passiert gar nichts, ansonsten (man hat ein gültiges Objekt) wird der Destruktor aufgerufen und das Objekt (hier Application) wird freigegeben.mschnell hat geschrieben:Ich vermute, dass Application.Free Application.Terminate aufruft und wartet, bis das Queue-Event, dass die Event-Queue stoppt bearbeitet wurde und erst dann die TApplicastion Instanz wirklich freigibt. Sicher bin ich da aber nicht.Aries hat geschrieben:Was bewirkt "Application.Free;"?
Application.Free würde man benutzen, wenn man aus einer "Application" während des Ablaufs ein "Program" machen möchte.
Verstehe ich nicht. Ich habe in früheren Tests schonmal mit einer eigenen TApplication Klasse experimentiert und bin auf so ein Problem nicht gestoßen.Christian hat geschrieben: Da man die Default Klasse leider nicht vorgeben kann muss man sie erst freen und kann dann seine eigene zuweisen.
Ja, das mag vielleicht die "korrekte" Herangehensweise sein, damit kein unnötiger Code im Programm vorliegt oder ausgeführt wird. Nur ist der Weg ein neues Widgetset zu erstellen nicht gerade trivial -- auch wenn fast alles von einem vorhandenen Widgetset übernommen werden kann. Bei vielen Projekten die darauf aufbauen, kann der Aufwand gerechtfertigt sein. Für alles anderes erstelle ich meine eigene Klasse und ersetze das bereits instantiierte Objekt.mschnell hat geschrieben:Außerdem passieren die wichtigen Sachen auch nicht in der Unit, die die TApplication Klasse als solche definiert, sondern in den mit §Include und anderen Methoden verwendeten Dateien, die sich mit dem Build-Macro "WidgetType" auswählen lassen. Die "korrekte" Methode für eine alternative TApplication ist also einen neuen WidgetType zu definierenund die Passenden include- und andere Dateien zum Kompilieren zur Verfügung zu stellen.
Dann kann man die neue Application - Art in der IDE mit den Projekt Optionen auswählen.
In der Unit Forms wird immer ein Objekt der Klasse TApplication erstellt und in der Variablen Application abgelegt. Will man dieses Objekt austauschen sollte man wie folgt vorgehen:mschnell hat geschrieben:Verstehe ich nicht. Ich habe in früheren Tests schonmal mit einer eigenen TApplication Klasse experimentiert und bin auf so ein Problem nicht gestoßen.Christian hat geschrieben: Da man die Default Klasse leider nicht vorgeben kann muss man sie erst freen und kann dann seine eigene zuweisen.
Code: Alles auswählen
uses Forms;
type TMyApplication = class(TApplication)
function myfunc(); // Was man auch immer haben möchte
end;
begin
Application.Free; // Objekt freigeben
Application := TMyApplication.Create(nil);
end.
Als ich das ausprobiert hatte, gab es die noch nicht. Prinzipiell sind sie aber auch für solche Dinge geeignet (mit den bekannten Einschränkungen).mschnell hat geschrieben:Könnte das (bereits instanziierte Klasse um neue Eigenschaften erweitern) nicht auch mit einem "Class Helper" o. ä. gehen?