Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Formular im Thread neu erzeugen (https://www.delphipraxis.net/185984-formular-im-thread-neu-erzeugen.html)

khh 24. Jul 2015 10:11

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.

baumina 24. Jul 2015 10:16

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.

Der schöne Günther 24. Jul 2015 10:21

AW: Formular im Thread neu erzeugen
 
Was kann denn ein Thread in diesem Fall besser als ein simpler Timer?

Sir Rufo 24. Jul 2015 10:47

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:
procedure TFooForm.SetDate( const Value : TDate );
begin
  if FDate <> Value then
  begin
    FDate := Value;
    GetData(); // Daten holen und präsentieren
  end;
end;
Jetzt kann man auch ganz gemütlich einen Timer nehmen, der - egal in welchem Intervall - das aktuelle Tagesdatum dort reinhämmert.

khh 24. Jul 2015 11:02

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?

Sir Rufo 24. Jul 2015 11:10

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?

khh 24. Jul 2015 11:11

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 :-)

Sir Rufo 24. Jul 2015 11:25

AW: Formular im Thread neu erzeugen
 
Wenn du befürchtest, dass der Refresh zu lange dauert, dann schau dir mal
http://www.delphipraxis.net/185749-f...-callback.html
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:
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;
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.

Bernhard Geyer 24. Jul 2015 11:31

AW: Formular im Thread neu erzeugen
 
Zitat:

Zitat von khh (Beitrag 1309718)
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?

Ganz Schlecht. VCL-Formulare und Threads! Da mag der Teufel schon eher das Weihwasser.
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.

frankyboy1974 24. Jul 2015 11:33

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 21:28 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz