![]() |
AW: Formular im Thread neu erzeugen
Du hast Doch sicherlich im FormCreate die Abfrage nach dem Wochentag...
Dann brauchst Du doch nur daraus eine procedure machen und die Aufrufen... Mavarik |
AW: Formular im Thread neu erzeugen
alsoo,
ich habe jetzt einen Timer den ich alle 45 Sekunden aufrufe. im OnTimer frage ich einfach ab, ob es 00:01 Uhr ist. wenn ja gebe ich die alten Panels frei und erzeuge sie neu. Klappt in einem ersten Test wunderbar. ;-) Ich überlege nur, ob die Abfrage alle 45 Sekunden, also einmal pro Minute nötig ist. ich denke schon, denn bei einem längeren Intervall "verpasst" der Timer die passende Uhrzeit, oder ? |
AW: Formular im Thread neu erzeugen
Du kannst auch die Differenzzeit bis 00:01 ermitteln und das Ergebnis in das Timerintervall schreiben (bzw. Maxint wenn die Millisekunden sonst zu viele wären).
|
AW: Formular im Thread neu erzeugen
Zitat:
Du meinst ich ermittle im Timer die Differenz bis 00:01 und setze damit den Timerintervall jedesmal neu? |
AW: Formular im Thread neu erzeugen
So etwa wie Wecker stellen:
T: TTime; MS: Real; I: Integer; ... T := (Morgen, 00:00:01) - Now; MS := T als Millisekunden (bin jetzt nicht sicher, wie man das umrechnen muss) if (MS > MaxInt) then I := MaxInt else I := Round(MS); Timer.Interval := I; Und in der nächsten Timerbehandlung das gleiche wieder. Dann feuert der Timer nicht unnötig oft. |
AW: Formular im Thread neu erzeugen
hallo,
du ermittelst wieviel Zeit noch bis 00:01 benötigt wird und setzt deinen Timer entsprechend neu. Wenn du also um 22:10 nachschaust, brauchst du nicht alle 45 Sekunden neu prüfen, ob bereits Mitternacht ist. Ich würde an dieser Stelle aber die allgemeine Relativitäts Theorie anführen. Wenn es bir jetzt 22:10 ist, und bei dir eine Sekunden vergangen ist, heisst dies nicht, dass bei mir auch nur eine Sekunde verganganen ist.:roll: mfg frank |
AW: Formular im Thread neu erzeugen
Zitat:
|
AW: Formular im Thread neu erzeugen
[OT]
kleiner Vorschlag: Ändere Deine Antwort in "ein Timer kann ein Intervall von 49 Tagen, dann braucht es in dem Fall keine MaxInt-Prüfung" (das klänge etwas netter) [/OT] |
AW: Formular im Thread neu erzeugen
Zitat:
|
AW: Formular im Thread neu erzeugen
Warum macht ihr euch das Leben so schwer? Ihr tut gerade so, als ob so ein Timer-Event die Monster-Performance-Bremse ist.
Delphi-Quellcode:
Simpel und robust
unit Form.MainForm;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; type TForm1 = class( TForm ) EnsureCurrentDateTimer: TTimer; CurrentDateLabel: TLabel; procedure FormShow( Sender: TObject ); procedure EnsureCurrentDateTimerTimer( Sender: TObject ); procedure FormHide( Sender: TObject ); private FCurrentDate: TDate; procedure SetCurrentDate( const Value: TDate ); procedure DoRefreshFormData( ); procedure DoEnsureCurrentDate( ); protected property CurrentDate: TDate read FCurrentDate write SetCurrentDate; public end; var Form1: TForm1; implementation {$R *.dfm} uses System.DateUtils; procedure TForm1.DoEnsureCurrentDate; begin CurrentDate := Date; end; procedure TForm1.DoRefreshFormData; begin CurrentDateLabel.Caption := DateToStr( CurrentDate ); end; procedure TForm1.EnsureCurrentDateTimerTimer( Sender: TObject ); begin DoEnsureCurrentDate( ); end; procedure TForm1.FormHide( Sender: TObject ); begin EnsureCurrentDateTimer.Enabled := False; end; procedure TForm1.FormShow( Sender: TObject ); begin DoEnsureCurrentDate( ); EnsureCurrentDateTimer.Enabled := True; end; procedure TForm1.SetCurrentDate( const Value: TDate ); var LValue: TDate; begin LValue := DateOf( Value ); if FCurrentDate <> LValue then begin FCurrentDate := LValue; DoRefreshFormData( ); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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