Fragen zu TApplication
Fragen zu TApplication
Ich habe einige Fragen zu TApplication:
- Was ist eine TAppilcation? englisch Application = deutsch Anwendung. Eine Konsolenanwendung ist auch eine Anwendung, scheint aber keine TApplication zu sein.
- Warum muss man eine TAppilcation nicht deklarieren?
- Was bewirkt "Application.Initialize;"?
- Was bewirkt "Application.Run;"?
- Wenn ich eine TApplication benutze, wie kann ich dann die Konsole ausschalten oder ausblenden?
- Welchen Nutzen hat der Befehl "RequireDerivedFormResource := True;"?
- Was ist eine TAppilcation? englisch Application = deutsch Anwendung. Eine Konsolenanwendung ist auch eine Anwendung, scheint aber keine TApplication zu sein.
- Warum muss man eine TAppilcation nicht deklarieren?
- Was bewirkt "Application.Initialize;"?
- Was bewirkt "Application.Run;"?
- Wenn ich eine TApplication benutze, wie kann ich dann die Konsole ausschalten oder ausblenden?
- Welchen Nutzen hat der Befehl "RequireDerivedFormResource := True;"?
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Fragen zu TApplication
In Lazarus kenne ich mich nicht so gut aus, die folgenden Aussagen gelten für MSEgui, dürften aber auch für Lazarus zutreffen.
http://www.freepascal.org/docs-html/pro ... 850001.2.3
Martin
tapplication ist eine Klasse, welche die Programminstanz darstellt und "managed". Z.B. verteilt tapplication die vom Betriebssystem eintreffenden Botschaften und besorgt das geordnete Beenden bei Programmende.Aries hat geschrieben: - Was ist eine TAppilcation? englisch Application = deutsch Anwendung. Eine Konsolenanwendung ist auch eine Anwendung, scheint aber keine TApplication zu sein.
Weil eine Instanzvariable bereits in einer Bibliotheks-unit angelegt ist. In MSEgui beispielsweise in der unit msegui oder in msenogui für nicht visuelle Programme.- Warum muss man eine TAppilcation nicht deklarieren?
Erzeugt die tapplication Instanz falls nicht bereits geschehen und initialisiert alle notwendigen Listen und verwendeten Bibliotheken und dergleichen. Bei MSEgui muss diese Funktion nicht explizit aufgerufen werden.- Was bewirkt "Application.Initialize;"?
Startet eine "main event loop". Das heisst, es werden Ereignisse (Mausbewegungen, Tastendrücke...) vom Betriebssystem abgeholt und auf die interessierten Klasseninstanzen verteilt bis das Programm z.B. durch setzen von "application.terminated:= true;" beendet wird.- Was bewirkt "Application.Run;"?
Unter Windows wird das Anzeigen einer Konsole durch Angabe "{$apptype console}" in der Program-Pascal-Datei bewirkt, "{$apptype gui}" hat keine Konsole.- Wenn ich eine TApplication benutze, wie kann ich dann die Konsole ausschalten oder ausblenden?
http://www.freepascal.org/docs-html/pro ... 850001.2.3
Vermutlich erzeugt er eine Exception beim Versuch ein Formularklasse zu instantiieren, für die keine *.lfm Resourcen eingelinkt sind. In MSEgui wird das durch die Klasse selbst bestimmt.- Welchen Nutzen hat der Befehl "RequireDerivedFormResource := True;"?
Martin
Zuletzt geändert von mse am So 9. Dez 2012, 12:07, insgesamt 3-mal geändert.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Fragen zu TApplication
Bei "Applications", nicht aber z.B. bei "Command line Tools" wird die TApplication Klasse verwendet.Aries hat geschrieben:- Was ist eine TAppilcation? englisch Application = deutsch Anwendung. Eine Konsolenanwendung ist auch eine Anwendung, scheint aber keine TApplication zu sein.
Die Hauptaufgabe der Klasse ist, eine Event-Queue für den Mainthread des Programms zur Verfügung zu stellen. Hierdurch wird die "normale" Object-Pascal Programmier-Mehtodik - das "Eventgesteuerte Programmieren" - möglich, bei dem der Applikations-Programmierer (fast) alle Aktivitäten im "run-to-completion"-Stil in "Events" unterbringt, die durch irgendwelche Ereignisse ausgelöst werden. Die Ereignisse (GUI-Aktivitäten wie Mouse und Keyboard, TTimer, Meldungen von anderen Threads, ...) werden (auch) außerhalb des Mainthreads generiert, in der Queue zwischengespeichert bis der Mainthread dafür Zeit hat, und dann in den Event-Handlern im Mainthread bearbeitet.
Je nachdem wie der Build-Mode-Macro "LCL-Widget-Typ" gesetzt ist, werden beim Kompilieren unterschiedliche Implementierungen der Klasse TApplication eingebaut (durch die "Interface" Unit angelinkt).
Alle momentanen Implementierungen ("LCL-Widget-Typen") erlauben nur eine einzige Instanz von TApplication in einem Programm, die mit dem Mainthread verheiratet sein muss, weil der Code nicht threadfest ("reentrant") geschrieben ist (was ihn deutlich verkomplizieren würde). Theoretisch wären auch Implementierungen möglich, bei denen jeder Thread über ein TApplication Objekt und damit über eine eigene Event-Queue verfügen würde. Damit könnte dann z.B. TTimer auch in Threads verwendet werden. Da hat sich aber noch keiner rangegeben (ich glaube, in mse geht das.)
Außerdem gibt es momentan in Lazarus (wohl aber in mse) keine Implementierung von TApplication, die nicht die Anbindung an eine GUI voraussetzt. Deshalb kann man z.B. in Linux "Daemons", CGI-Programmen etc., Verfahren wie TTimer, TThread.Synchronize, TApplication.QueuAsyncCall etc. nicht verwenden. Die Verwendung von Lazarus für komplexe "embedded" Anwendungen wird dadurch erheblich erschwert.
Das macht die Automatische Pascal-Code Generierung in Lazarus, wenn man ein entsprechendes Projekt aufsetzt. Du kannst aber natürlich auch ein neues "Programm" - Projekt aufsetzen und Tapplication "von Hand" einbauen.Aries hat geschrieben:- Warum muss man eine TAppilcation nicht deklarieren?
Die TApplication-Instanz mit Namen Application wird initialisiert, also die Event-Queue Betriebssystem-/GUI-System-spezifisch eingerichtet und mit der GUI (als eine der Event-Sourcen) und dem aktuellen (Main-) Thread (als Event-Handler) verheiratet.)Aries hat geschrieben:- Was bewirkt "Application.Initialize;"?
Die Event-Queue wird als "normalerweise-no-return" Unterprogramm von Application.Run (im MainThread) gestartet. Damit sind alle "Events" Unterprogramme von Application.Run. Ein spezieller Event-Aufruf (der durch "Application.Terminate" erzeugt wird), bewirkt (bei Bearbeitung durch die Queue)statt des Aufrufs eines Event-Handlers ein Return aus Application.Run.Aries hat geschrieben:- Was bewirkt "Application.Run;"?
Was genau meinst Du mit "Konsole" ? Ich denke Form1.Hide versteckt die GUI. Eine Text-Konsole (für Standard-In und Standard-Out) wird für GUI-Progaramme doch sowieso normalerweise nicht angezeigt (kann man - glaube ich - aber aktivieren).Aries hat geschrieben:- Wenn ich eine TApplication benutze, wie kann ich dann die Konsole ausschalten oder ausblenden?
Keine Ahnung. Tut mir LeidAries hat geschrieben:- Welchen Nutzen hat der Befehl "RequireDerivedFormResource := True;"?

Was hast Du eigentlich vor ? (Anscheinend willst Du einen Daemon o.ä. schreiben. Da gibt es die genannten Einschränkungen ...)
-Michael
Re: Fragen zu TApplication
http://lazarus-ccr.sourceforge.net/docs ... ource.htmlmschnell hat geschrieben:Keine Ahnung. Tut mir LeidAries hat geschrieben:- Welchen Nutzen hat der Befehl "RequireDerivedFormResource := True;"?![]()
@Aries: Ich nehme an du bist ein Einsteiger. Dafür suchst du viel zu weit. Das muss man alles nicht unbedingt wissen, jedenfalls nicht am Anfang.
Deshalb "versteckt" Lazarus auch die eigentliche Programmdatei "*.lpr"
Gewöhne dich einfach erst einmal an das System mit den Formularen, Komponenten und Ereignisbehandlungsmethoden.
Der Rest leuchtet dir dann mit der Zeit ein.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Fragen zu TApplication
Diese Aussage finde ich gefährlich. Auch als Einsteiger darf man sich schon in die Tiefen eines Programms hinabbegeben -- mit dem Risiko, dass man hinterher mehr weiß als vorher. Fremden Quelltext zu lesen kann wirklich hilfreich sein, eine Programmiersprache besser zu verstehen.theo hat geschrieben:@Aries: Ich nehme an du bist ein Einsteiger. Dafür suchst du viel zu weit. Das muss man alles nicht unbedingt wissen, jedenfalls nicht am Anfang.
Deshalb "versteckt" Lazarus auch die eigentliche Programmdatei "*.lpr"
Gewöhne dich einfach erst einmal an das System mit den Formularen, Komponenten und Ereignisbehandlungsmethoden.
Der Rest leuchtet dir dann mit der Zeit ein.
Unter Lazarus gibt es die Klasse TCustomApplication (in der Unit custapp). Davon wird auch die "Standard-"Klasse TApplication (mit dem ganzen GUI-Kram) abgeleitet. Man kann aber auch seine eigenen (eher komplexen) Konsolenanwendungen darauf aufbauen (über das Menü: Neu -> Konsolenanwendung).mschnell hat geschrieben:Außerdem gibt es momentan in Lazarus (wohl aber in mse) keine Implementierung von TApplication, die nicht die Anbindung an eine GUI voraussetzt. Deshalb kann man z.B. in Linux "Daemons", CGI-Programmen etc., Verfahren wie TTimer, TThread.Synchronize, TApplication.QueuAsyncCall etc. nicht verwenden. Die Verwendung von Lazarus für komplexe "embedded" Anwendungen wird dadurch erheblich erschwert.
TTimer ist ein Widgetset und arbeitet nicht direkt mit dem Betriebssystem. Daher geht es wie TThread.Synchronize und TApplication.QueueAsyncCall immer über die Hauptbotschaftenschleife. Diese gibt es in TCustomApplication aber gar nicht (man müsste dies also selbst implementieren).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Fragen zu TApplication
Ich weiss nicht, bei Aries sehe ich im Moment die Gefahr eher darin, dass er sich in Details verzettelt (RequireDerivedFormResource etc.) und dabei den Wald vor lauter Bäumen nicht mehr sieht, oder die Lust an Lazarus verliert.Socke hat geschrieben: Diese Aussage finde ich gefährlich.
Man lernt ja auch nicht Autofahren, indem man zuerst die Technik der Benzineinspritzung büffelt.
Hier fehlt mMn in diesem Forum manchmal etwas das Gespür für den Kenntnisstand des Fragenden.
Es kann natürlich sein, dass ich mich da bei Aries täusche, er sagt ja nicht viel über sich oder seine Ziele.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Fragen zu TApplication
Der Zusammenhang "Ohne Gaspedal kein Autofahren" finde ich schon recht wichtigtheo hat geschrieben:Man lernt ja auch nicht Autofahren, indem man zuerst die Technik der Benzineinspritzung büffelt.

Wie gut, dass wir dich haben und du darauf aufpasst. Ich versuche für meinen Teil aufkommende Fragen qualitativ hochwertig (und hoffentlich verständlich) zu beantworten.theo hat geschrieben:Hier fehlt mMn in diesem Forum manchmal etwas das Gespür für den Kenntnisstand des Fragenden.
Es kann natürlich sein, dass ich mich da bei Aries täusche, er sagt ja nicht viel über sich oder seine Ziele.
Um zu der Aussage zurückzukehren: Für meinen Teil finde ich eine Aussage: "Finde dich damit ab, du verstehst es eh nicht" (so lese ich den Text) äußerst abweisend und sehr demotivierend. Wenn ich auf eine Frage eine solche Antwort erhalte, bin ich weg und suche mir meine Antwort woanders -- oder wende mich ganz ab.theo hat geschrieben:Gewöhne dich einfach erst einmal an das System mit den Formularen, Komponenten und Ereignisbehandlungsmethoden.
Der Rest leuchtet dir dann mit der Zeit ein.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Fragen zu TApplication
@Socke: Was ist denn mit dir los?
Ich glaube wir reden besser morgen weiter.
Ich glaube wir reden besser morgen weiter.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Fragen zu TApplication
Ich finde Aries stellt genau die richtigen Fragen und verdient auch richtige Antworten.
Martin
Martin
Re: Fragen zu TApplication
Danke für die Antworten. Das war schon sehr hilfreich.
Erfolgreich benutzt habe ich auch schon:
- OnCreate
- OnActivate
- OnTimer
- OnKeyDown
- OnKeyUp
- OnMouseMove
- OnMouseWheel
- OnEditingDone
Was meinst Du mit Komponentensystem?
Sowas: http://www.csharpme.de/Bilder/konsole.jpgmschnell hat geschrieben: Was genau meinst Du mit "Konsole" ?
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.mschnell hat geschrieben:Ich denke Form1.Hide versteckt die GUI. Eine Text-Konsole (für Standard-In und Standard-Out) wird für GUI-Progaramme doch sowieso normalerweise nicht angezeigt (kann man - glaube ich - aber aktivieren).
Verstehen wie Lazarus funktioniert und Lazarus beherrschen. Anwendungen erstellen kann man ja sehr schnell auch als Einsteiger, mit dem Verstehen ist es schwieriger. Viel Code wird automatisch erzeugt und in zig verschiedene Dateien aufgeteilt. Teilweise kann gleicher Code zu unterschiedlichen Ergebnissen führen, was natürlich daran liegen muss, das in irgendwelchen verdeckten Dateien sich der Code doch unterscheidet. Ich versuche da ein Verständnis für zu entwickeln. Beispiel: Wenn man über den Projektinspektor das LCL-Package hinzufügt oder entfernt, in welcher Datei wird das dann festgehalten? Am sichtbaren Programmcode ändert sich nichts.mschnell hat geschrieben:Was hast Du eigentlich vor ?
Jein. In manchen Gebieten bin ich schon relativ weit, in anderen liege ich ziemlich zurück, wie mir scheint. Z. B. bei der Fachwortkenntnis. Ich verstehe z. B. nicht genau, was mit Programminstanz, Event-Queue, Build-Mode-Macro, LCL-Widget-Typ und Widgetset gemeint ist, was jedoch nicht unbedingt bedeutet, das ich sowas nicht schonmal angewandt habe.theo hat geschrieben: @Aries: Ich nehme an du bist ein Einsteiger.
Formulare kann ich benutzen.theo hat geschrieben: Gewöhne dich einfach erst einmal an das System mit den Formularen, Komponenten und Ereignisbehandlungsmethoden.
Erfolgreich benutzt habe ich auch schon:
- OnCreate
- OnActivate
- OnTimer
- OnKeyDown
- OnKeyUp
- OnMouseMove
- OnMouseWheel
- OnEditingDone
Was meinst Du mit Komponentensystem?
Eine Analogie wäre eher das Autobauen. Wenn einem die Motoren geliefert werden, kann man Autos auch bauen, ohne selbst Motoren zu bauen. Aber in der Schule lernt man auch erst einmal Rechnen, bevor man einen Taschenrechner benutzen darf. Ich würde diese ganzen Programmierautomatismen in Lazarus gerne erst einmal verstehen, bevor ich sie anwende (Anwenden tue ich sie jetzt lange genug ohne Verständnis).theo hat geschrieben:Man lernt ja auch nicht Autofahren, indem man zuerst die Technik der Benzineinspritzung büffelt.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Fragen zu TApplication
Programminstanz meint alles was zu einem laufenden Programm gehört (Speicher, Ausführungszustand...). Event-Queue ist eine Warteschlange, worin Ereignisse in ihrer zeitlichen Reihenfolge zwischengespeichert werden.Aries hat geschrieben: Jein. In manchen Gebieten bin ich schon relativ weit, in anderen liege ich ziemlich zurück, wie mir scheint. Z. B. bei der Fachwortkenntnis. Ich verstehe z. B. nicht genau, was mit Programminstanz, Event-Queue, Build-Mode-Macro, LCL-Widget-Typ und Widgetset gemeint ist, was jedoch nicht unbedingt bedeutet, das ich sowas nicht schonmal angewandt habe.
Lazarus -und MSEide, die hatte sie sogar ein paar Jahre früher-

Ein Widgetset ist eine Bibliothek, welche die Basis-Funktionen und visuellen Komponenten eines GUI-Programmes zur Verfügung stellt. Lazarus kann verschiedene Widgetsets verwenden, die Windows-eigene Schnitstelle, Qt, GTK+ und Carbon (und/oder Cocoa?) (=LCL-Widget-Typ).
Im Gegensatz dazu benutzt MSEgui eine eigene von mir in Pascal geschriebene Plattform-unabhängige Widgetset-Bibliothek.
Genau. Und darum verzichtet MSEide wenn immer möglich auf Automatismen und stellt stattdessen die bequeme Möglichkeit des bewussten Einrichtens und Bearbeitens des Projektes zur Verfügung.Ich würde diese ganzen Programmierautomatismen in Lazarus gerne erst einmal verstehen, bevor ich sie anwende (Anwenden tue ich sie jetzt lange genug ohne Verständnis).
Martin
Re: Fragen zu TApplication
Ich wollte dir sicher nicht zu Nahe treten und du hast das wahrscheinlich auch nicht so aufgefasst.Aries hat geschrieben:Jein. In manchen Gebieten bin ich schon relativ weit, in anderen liege ich ziemlich zurück, wie mir scheint. Z. B. bei der Fachwortkenntnis. Ich verstehe z. B. nicht genau, was mit Programminstanz, Event-Queue, Build-Mode-Macro, LCL-Widget-Typ und Widgetset gemeint ist, was jedoch nicht unbedingt bedeutet, das ich sowas nicht schonmal angewandt habe.theo hat geschrieben: @Aries: Ich nehme an du bist ein Einsteiger.
Diese Information, die du uns jetzt gibst, finde ich wichtig.
Man kann Fragen beantworten wie ein Lexikon, oder man kann versuchen den Fragenden dort abzuholen wo er ist und eine passende aber vielleicht nicht allumfassende Antwort zu geben. Ich bevorzuge auch aus effizienzgründen die zweite Variante.
Jetzt ist mir klar, was du wissen möchtest. Die konkreten Fragen hier hat dir mse ja schon beantwortet.
Das ist gut. Der Satz in Klammern ist aber auch wichtig um zu erkennen was dir schon klar ist.Aries hat geschrieben: Ich würde diese ganzen Programmierautomatismen in Lazarus gerne erst einmal verstehen, bevor ich sie anwende (Anwenden tue ich sie jetzt lange genug ohne Verständnis).
Hintergrundinformationen kann übrigens man oft auch von Quellen, die sich mit Delphi befassen übernehmen.
Es ist vlllt. nicht alles 100%ig identisch, aber für die grossen Fragen reicht es meistens.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Fragen zu TApplication
Für Einsteiger ist es natürlich absolut sinnvoll, zunächst mit "normalen" GUI-Programmen anzufangen, weil die sich leicht testen lassen.theo hat geschrieben: Gewöhne dich einfach erst einmal an das System mit den Formularen, Komponenten und Ereignisbehandlungsmethoden.
Der Rest leuchtet dir dann mit der Zeit ein.
Dass bei "embedded" und "Daemon" Projekten dann vieles nicht so gut unterstützt ist wie bei GUI-Projekten stellt sich dann erst später heraus.
Aber auch hier ist es oft sinnvoll zuerst ein GUI-Projekt zu machen, und dabei den GUI Code und den Programm-Logik-Code sauber in einzelne Units zu trennen (ist sowieso der professionellere Stil als stumpfes RAD) und ein Arbeits-Projekt dann durch ersetzen der GUI-Uinits zu erzeugen.
-Michael
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Fragen zu TApplication
In einer Open Source-Umgebung kann man glücklicherweise alles machenSocke hat geschrieben:Unter Lazarus gibt es die Klasse TCustomApplication (in der Unit custapp). Davon wird auch die "Standard-"Klasse TApplication (mit dem ganzen GUI-Kram) abgeleitet. Man kann aber auch seine eigenen (eher komplexen) Konsolenanwendungen darauf aufbauen (über das Menü: Neu -> Konsolenanwendung).

Allerdings ein komplettes neues "Interface" (aka "LCL Widget Type" zu bauen, das (z.B. ohne eine GUI-Anbindung) eine voll funktionsfähige Event-Queue installiert (also z.B. TTimer, Procedure...Message..., TThread.Synchronize und Application.QueueAsyncCall unterstützt), ist eine Aufgabe, die kaum lösbar ist ohne auf jede Menge schlecht dokumentierte Interna der RTL/LCL zurückzugreifen oder "das Rad neu zu erfinden".
Hab ich 'mal angefangen. Kann ich nicht empfehlen

-Michael