AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komponenten initialisieren

Ein Thema von blablab · begonnen am 10. Nov 2012 · letzter Beitrag vom 11. Nov 2012
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Komponenten initialisieren

  Alt 10. Nov 2012, 11:23
Hallo!

Manchmal ist es doch so, dass man beim Programmstart bestimmte Eigenschaften von Komponenten initialisiert. Diese Eigenschaften rufen aber Methoden auf, die beim Programmstart noch nicht ausgeführt werden dürfen.

Also ich hab gerade zum Beispiel eine Scrollbar. Ich möchte beim Programmende die alte ScrollBar.Position speichern und beim Programmstart wiederherstellen. Dabei wird aber ScrollBar.OnChange() ausgelöst und dadurch krieg ich dann beim Start einen Fehler, weil OnChange() auf Variablen zugreift, die zu dem Zeitpunkt noch nicht initialisiert sind.

Wie macht man das am geschicktesten?

Ich kann jetzt eine globale Variable "Startup: Boolean" benutzen, die nur beim Programmstart True ist. Und dann muss ich in jede Methode, die solch ein Problem hat "if not Startup then begin [...] end" schreiben.

Gibt es da vielleicht eine schönere Lösung?

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 11:41
Wann musst du denn spätestens die Scrollbar-Eigenschaft gesetzt haben?

Wenn die Form angezeigt wird - also macht man das im OnShow Event
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.603 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 12:08
Wann musst du denn spätestens die Scrollbar-Eigenschaft gesetzt haben?

Wenn die Form angezeigt wird - also macht man das im OnShow Event
Das wird aber bei jedem Show ausgeführt und man muss dort womöglich auch auf das erste Mal abprüfen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 13:08
... Ich möchte beim Programmende die alte ScrollBar.Position speichern und beim Programmstart wiederherstellen. ... Wie macht man das am geschicktesten?
Meine Initialisierungen finden gewöhnlich im Hauptformular unter OnActivate statt (OnShow verwende ich nur selten). Bei Sub-Forms lese ich aus der zugehörigen Ini, der Registry oder einer Datenbank die entsprechenden Werte aus, wenn die Form angezeigt wird, ebenfalls in OnActivate. Beim Schließen der Sub-Forms kannst du entweder gleich im CloseQuery- oder im OnClose-Ereignis der jeweiligen Form deine Daten zurückschreiben, oder erst beim Programm-Ende im OnClose- oder im CloseQuery-Ereignis der Mainform. So speichere und lade ich z.B. komplexe benutzerseitige VirtualTreeView-Einstellungen ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 13:20
Hmmm, OnActivate wird ja wesentlich häufiger als OnShow gefeuert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 13:28
Hmmm, OnActivate wird ja wesentlich häufiger als OnShow gefeuert
Generell? Bei jedem Programm? Und wenn schon ... Man kann doch dafür sorgen, daß OnActivate nur einmal am Start ausgeführt wird: In OnCreate wird das Flag StartModus auf True gesetzt, am Ende von OnActivate auf False. Am Beginn von OnActivate heißt es dann: if not StartModus then exit; Manche Initialisierungen machten in OnShow Probleme, weil zu diesem Zeitpunkt noch nicht alle Units verfügbar sind, wie mir scheint. Daher mache ich seit Jahren alles in OnActivate. Siehst du darin ein Problem?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 13:35
Es gibt dann ein Problem, wenn die Form nicht aktiviert wird. Ist allerdings wohl mehr theoretisch, denn um das zu bewerkstelligen, muss man die Create-Parameter der Form entsprechend anpassen

BTW Bei OnShow sind alle Units da, aber die Form u.U. noch nicht sichtbar und das macht teilweise Probleme
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Komponenten initialisieren

  Alt 10. Nov 2012, 13:41
Es gibt dann ein Problem, wenn die Form nicht aktiviert wird. Ist allerdings wohl mehr theoretisch, denn um das zu bewerkstelligen, muss man die Create-Parameter der Form entsprechend anpassen
BTW Bei OnShow sind alle Units da, aber die Form u.U. noch nicht sichtbar und das macht teilweise Probleme
Dann lieg ich wohl doch nicht so falsch mit meiner Gewohnheit, notwendige Initialisierungen in FormActivate zu belassen ...

Ich kann's jetzt gerade nicht ausprobieren, weil auf meinem Entwicklungsrechner gerade ein Virenscan läuft, den ich nicht unterbrechen möchte – aber soweit ich mich erinnere, lassen sich auch Datenbank-Komponenten im Datenmodul nicht fehlerlos zum OnCreate-Zeitpunkt initialisieren.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz