![]() |
Im OI zugewiesener Wert wird nach Progr.-Start überschrieben
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe mit einer meiner Komponenten ein kleines Problem, was mir allerdings schon öfters auch bei anderen Komponenten aufgefallen ist. Es handelt sich um eine von TCustomLabel abgeleitete Komponente, welche in einem Label das Datum/Uhzeit in diversen Formaten anzeigt. So, nun zum Problem. Ändere ich im OI die Art der Anzeige wird ein gewisses TimerIntervall zugewiesen. Möchte man dies (Intervall) aber danach verändern, kann man dann im OI den entsprechenden Wert eingeben (sinnvoll z.B. bei eigenem "Custom" Format). Startet man nun das Programm, dann wird im Konstruktor der Wert allerdings wieder durch den "Standardwert" überschrieben. Dass es im Konstruktor passieren muss, ist mir bewusst, allerdings sind sämtliche Versuche fehlgeschlagen, den Fehler zu beheben. Hoffe einer von Euch kann mir weiterhelfen. Den Source habe ich angehängt - wer ihn selber benutzen möchte, nur zu :thumb: Grüsse, SCRaT |
Re: Im OI zugewiesener Wert wird nach Progr.-Start überschri
Das Problem dabei liegt darin, dass dein ShowTimeAs Eigenschaft beim Laden deinen Timerintervall wieder überschreibt - schliesslich legst du bei "Custom" wieder 500 ms fest. Entweder - oder. Du musst dich von daher entscheiden. Die ShowTimeAs wird einfach nur später geladen als deine Intervall-Eigenschaft.
Problemlösung: Verhindere das Setzen des Intervalls auf 500, wenn es csLoading gesetzt ist in ComponentState und der Value der Eigenschaft ShowTimeAs als "Custom" geladen wird. |
Re: Im OI zugewiesener Wert wird nach Progr.-Start überschri
Ah! Vielen Dank für den Tip mit csLoading...
Habe es nun so gelöst, scheint prima zu funktionieren:
Delphi-Quellcode:
Noch eine Verständnis-Frage: Wann genau (von wann--bis wann) liegt denn der Status "csLoading" eigentlich vor?
procedure TDateTimeLabel.SetDateTimePresentation(Value: TDateTimePresentation);
begin if not (csloading in ComponentState) then Begin; If FDateTimePresentation <> Value Then begin FDateTimePresentation := Value; // TimerIntervall festlegen case FDateTimePresentation of dtpCustom: SetfTimerIntervall(500); dtpTime: SetfTimerIntervall(500); dtpDateTime: SetfTimerIntervall(30000); dtpLongDate: SetfTimerIntervall(30000); dtpWeekdayDate: SetfTimerIntervall(30000); dtpWeekdayDateTime: SetfTimerIntervall(30000); end; ShowTheTime(self); end; end; end; SCRaT |
Re: Im OI zugewiesener Wert wird nach Progr.-Start überschri
Grob gesagt, wenn die Komponenten aus den Resourcen bzw. der DFM "gestreamed" werden. Näheres dazu in der Hilfe zu TComponentState
|
Re: Im OI zugewiesener Wert wird nach Progr.-Start überschri
Zitat:
Vielen Dank nochmals! SCRaT |
Re: Im OI zugewiesener Wert wird nach Progr.-Start überschri
Habe dazu noch eine Verständnisfrage:
Weise ich aber die Variable im Konstruktor direkt zu, z.B.
Delphi-Quellcode:
... dann wird der im OI zugewiesene Wert beim Start dennoch NICHT überschrieben. Warum?
FDateTimePresentation := dtpTime;
SCRaT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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-2025 by Thomas Breitkreuz