![]() |
Formular im Thread neu erzeugen
Hallo zusammen,
ich habe eine Form auf der diverse Felder tagesabhängig dargestellt werden. Beim Programmstart werden die Felder in Abhängigkeit des entsprechenden Tages erzeugt. Jetzt kommt der Kunde auf die Idee, das Programm nicht mehr täglich neu zu starten, sondern durchlaufen zu lassen. Also werden die Felder auch dauernd so, wie beim Programmstart der Ausgangspunkt war, dargestellt. Ich habe nun die Idee in einem Thread die Uhrzeit abzufragen und bei 00:01 Uhr die Form neu zu erzeugen und wieder anzuzeigen. Was meint ihr zu dieser Lösung? Danke für eure Meinungen. |
AW: Formular im Thread neu erzeugen
Ich würde die Form nicht neu erzeugen, sondern nur die Procedure aufrufen, in der die Captions/Texte/Visibles entsprechend geändert werden.
|
AW: Formular im Thread neu erzeugen
Was kann denn ein Thread in diesem Fall besser als ein simpler Timer?
|
AW: Formular im Thread neu erzeugen
Eine ganz billige Lösung ist das verwenden einer Eigenschaft, die das Datum beinhaltet zu dem diese Form die Daten anzeigt.
Eine Änderung des Datums führt zum Laden der neuen Werte für eben dieses Datum.
Delphi-Quellcode:
Jetzt kann man auch ganz gemütlich einen Timer nehmen, der - egal in welchem Intervall - das aktuelle Tagesdatum dort reinhämmert.
procedure TFooForm.SetDate( const Value : TDate );
begin if FDate <> Value then begin FDate := Value; GetData(); // Daten holen und präsentieren end; end; |
AW: Formular im Thread neu erzeugen
Es geht darum, dass nicht nur das neue Datum angezeigt werden muss.
Abhängig vom Datum werden beim Erstellen der Form verschiedene Labels und deren Beschriftung geändert. Und was meint Ihr dazu, eben diesen angesprochenen Timer zu verwenden, um die Form neu zu erzeugen? Ich denke, ich komme um die Neuerstellung der Form nicht drum rum ? EDIT: oder eben im Timer die Procedure neu aufrufen wie Baumina meinte? |
AW: Formular im Thread neu erzeugen
Du hast eine Form (also eine Anzeige) und diese Anzeige soll etwas anderes anzeigen und dafür willst du die Form neu erstellen lassen?
Wenn du das Programm am Fernseher wechselt, schmeisst du dann auch den alten Fernseher weg und kaufst dir einen neuen? |
AW: Formular im Thread neu erzeugen
>> Wenn du das Programm am Fernseher wechselt, schmeisst du dann auch den alten Fernseher weg und kaufst dir einen neuen?
Guter Vergleich :-) |
AW: Formular im Thread neu erzeugen
Wenn du befürchtest, dass der Refresh zu lange dauert, dann schau dir mal
![]() an. Da habe ich genau so ein Szenario aufgezeigt. Gib der Form einfach einen Service an die Hand, wo diese einfach nachfragen kann.
Delphi-Quellcode:
Ob diese Daten vom Service jetzt im Thread oder nicht geholt werden, entscheidet der Service bzw. die Implementierung des Services. Der Form ist es so egal wie das dort bewerkstelligt wird.
procedure TFooForm.GetData();
begin RetrieveData := True; // Kreisenden Kringel anzeigen ;o) FSomeService.GetFooDataByDate( FDate, FooDataCallback ); end; procedure TFooForm.FooDataCallback( AResult: TFooData; AException: Exception; var ADispose : Boolean ); begin RetrieveData := False; if Assigned( AException ) then begin // Exception-Meldung in der Form anzeigen ErrorMessageLabel.Caption := AException.Message; end else begin ErrorMessageLabel.Caption := ''; PresentFooData( AResult ); // Daten im Formular anzeigen lassen end; end; |
AW: Formular im Thread neu erzeugen
Zitat:
Alles was mit der GUI zu tun hat muss im Hauptthread erfolgen! Ansonsten krachts an unmöglichen Stellen zu irgendeiner Zeit. Das Grundproblem ist hier das Win32-Controls nur im erzeugenden Thread gültig sind. |
AW: Formular im Thread neu erzeugen
Hallo,
wenn du nach dem MVC programmieren würdest, sollte dies eigentlich kein Problem darstellen. In meinem MVC-Framwork fragt jede GUI-Komponente das Model ob Sie gerade sichtbar ist, hier könntest du auch leicht dies vom aktuellen Datum abhängig machen, ob eine Komponente sichtbar ist oder nicht. mfg frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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