Variablen initialisieren
-
- Lazarusforum e. V.
- Beiträge: 208
- Registriert: Fr 11. Nov 2016, 14:09
- OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Variablen initialisieren
Hallo Zusammen
Es ist mir noch nicht richtig klar wann ich am besten meine Variablen initialisiere.
Ich habe das früher mit einer Timer komponente gemacht. Dann die Date auf die ganzen Tedit ausgegeben. Und den Timer gestoppt.
Funktioniert, ist aber etwas umständlich.
Im Moment mache ich das bei Form create und dann die Tedit ausgeben.
Klappt auch.
Aber ist es so richtig gemacht oder gibts noch eine elegantere Lösung?
Es ist mir noch nicht richtig klar wann ich am besten meine Variablen initialisiere.
Ich habe das früher mit einer Timer komponente gemacht. Dann die Date auf die ganzen Tedit ausgegeben. Und den Timer gestoppt.
Funktioniert, ist aber etwas umständlich.
Im Moment mache ich das bei Form create und dann die Tedit ausgeben.
Klappt auch.
Aber ist es so richtig gemacht oder gibts noch eine elegantere Lösung?
Good code comes from experience, experience comes from bad code.
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Variablen initialisieren
Das kann man nicht so allgemein sagen.
An und für sich sollte man die Initialisierungen im OnCreate einer Form machen. Alle Unterkomponenten der Form sind zu diesem Zeitpunkt bereits erstellt.
Wenn allerdings der Programmierer einer Komponente irgend welche Initialisierungen timergesteuert (oder im onIdle oder sonstwie verzögert) zu einem späteren Zeitpunkt macht, dann bist du im FormCreate zu früh dran, da ist dann diese Komponente noch nicht "fertig".
Wenn irgend welche Initialisierungen zeitaufwändig sind, ist es eine natürlich gute Idee, die zu einem späteren Zeitpunkt oder in einem parallel zum Hauptprozess gestartetem Prozess zu machen, und über ein Flag anzuzeigen, wenn die Komponente "betriebsbereit" ist.
An und für sich sollte man die Initialisierungen im OnCreate einer Form machen. Alle Unterkomponenten der Form sind zu diesem Zeitpunkt bereits erstellt.
Wenn allerdings der Programmierer einer Komponente irgend welche Initialisierungen timergesteuert (oder im onIdle oder sonstwie verzögert) zu einem späteren Zeitpunkt macht, dann bist du im FormCreate zu früh dran, da ist dann diese Komponente noch nicht "fertig".
Wenn irgend welche Initialisierungen zeitaufwändig sind, ist es eine natürlich gute Idee, die zu einem späteren Zeitpunkt oder in einem parallel zum Hauptprozess gestartetem Prozess zu machen, und über ein Flag anzuzeigen, wenn die Komponente "betriebsbereit" ist.
-
- Lazarusforum e. V.
- Beiträge: 208
- Registriert: Fr 11. Nov 2016, 14:09
- OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Variablen initialisieren
Danke für die Antwort.
Dann stimmt das so.
Das mit dem Timer hab ich nur zur Not gemacht weil ich Oncreate noch nicht kannte.
Dann stimmt das so.
Das mit dem Timer hab ich nur zur Not gemacht weil ich Oncreate noch nicht kannte.
Good code comes from experience, experience comes from bad code.
-
- Beiträge: 6916
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Variablen initialisieren
Das Gegenstück von OnCreate wäre dann OnDestroy. Wen du Klassen OnCreate erzeugst, gibt man diese in OnDestroy wieder frei.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 208
- Registriert: Fr 11. Nov 2016, 14:09
- OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Variablen initialisieren
Danke auch für diese Antwort.
Das mache ich bis jetzt noch gar nicht.
Ich schliesse die forms einfach mit close.
Wird der Speicher so nicht freigegeben?
Muss das mal ausprobieren.
Das mache ich bis jetzt noch gar nicht.
Ich schliesse die forms einfach mit close.
Wird der Speicher so nicht freigegeben?
Muss das mal ausprobieren.
Good code comes from experience, experience comes from bad code.
- af0815
- Lazarusforum e. V.
- Beiträge: 6777
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Variablen initialisieren
Dann probier mal gleich die Buildmodes aus, im Debugmodus siehst dann gleich deine Speicherleichen. Das ganze findet man in den Projekteinstellungen.Marc hat geschrieben:Wird der Speicher so nicht freigegeben?
Muss das mal ausprobieren.
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6916
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Variablen initialisieren
Wen man im HauptForm Close aufruft, wir in jedem Form das OnDestroy-Ereigniss aufgerufen.Ich schliesse die forms einfach mit close.
Wen man aber das Programm brutal mit "Halt" beendet, dann wird nichts mehr aufgerufen, aus diesem Grund sollte man nie so beenden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 208
- Registriert: Fr 11. Nov 2016, 14:09
- OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Variablen initialisieren
Danke für die vielen Antworten.
Ist schon fast zu viel Detail für Anfänger.
Ich beende die Fenster mit 'close' das müsste gut sein.
Wenn man die Fenster schliesst ist die Arbeit ja schon gemacht.
Riesen Speicherleichen kann ich nicht zurücklassen da ich mit Lazarus (wie es scheint) keine grossen Bilder (>100MB) verarbeiten kann.
Hat jetzt aber mit der Frage nichts mehr zu tun.
Zum 'debuggen' nehm ich ein Memo fenster, da geb ich aus was mich gerade interessiert.
Bestimmt ein Schenkelklopfer, aber für Anfänger reicht das.
Ist schon fast zu viel Detail für Anfänger.
Ich beende die Fenster mit 'close' das müsste gut sein.
Wenn man die Fenster schliesst ist die Arbeit ja schon gemacht.
Riesen Speicherleichen kann ich nicht zurücklassen da ich mit Lazarus (wie es scheint) keine grossen Bilder (>100MB) verarbeiten kann.
Hat jetzt aber mit der Frage nichts mehr zu tun.
Zum 'debuggen' nehm ich ein Memo fenster, da geb ich aus was mich gerade interessiert.
Bestimmt ein Schenkelklopfer, aber für Anfänger reicht das.
Good code comes from experience, experience comes from bad code.