AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular im Thread neu erzeugen

Ein Thema von khh · begonnen am 24. Jul 2015 · letzter Beitrag vom 27. Jul 2015
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Formular im Thread neu erzeugen

  Alt 24. Jul 2015, 12:37
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.165 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Formular im Thread neu erzeugen

  Alt 24. Jul 2015, 12:44
MS := T als Millisekunden (bin jetzt nicht sicher, wie man das umrechnen muss)
if (MS > MaxInt) then Und in der nächsten Timerbehandlung das gleiche wieder.
Dann feuert der Timer nicht unnötig oft.
Echt? Weil ein Timer ja auch nur ein Interval von 49 Tagen kann?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Formular im Thread neu erzeugen

  Alt 24. Jul 2015, 12:50
[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]
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Formular im Thread neu erzeugen

  Alt 24. Jul 2015, 13:17
[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]
und es wäre besser verständlich was gemeint ist
Karl-Heinz
  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: Formular im Thread neu erzeugen

  Alt 24. Jul 2015, 13:19
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:
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.
Simpel und robust
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)

Geändert von Sir Rufo (24. Jul 2015 um 14:26 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#6

AW: Formular im Thread neu erzeugen

  Alt 25. Jul 2015, 07:17
Hallo zusammen,

die Antworten finde ich alle richtig und schlüssig.
Ich verstehe auch nicht ganz warum die Form neu geladen werden soll.

Aber wenn es denn sein muss könnte man die Form in ein Panel bauen und per Runtime nachladen oder auswechseln:

Ungefähr so:
Code:
// AForm is newly created externally and then can be embedded to a control, such as a panel or a tabsheet.
procedure Form_EmbedTo(const AForm:TCustomForm; const AParent:TControl);
begin
  while AForm.ChildrenCount>0 do
    AForm.Children[0].Parent:=AParent;
end;

// Und der Aufruf in Etwa

  mxNewForm := TMyNewForm.Create(nil);

  Form_EmbedTo(myNewForm, MyTargetPanel);
Das ist zwar für Fmx gedacht, sollte aber auch mit VCL Laufen.

Damit könnte
- die neue Form im Thread erzeugt werden (warum auch immer)
- die neue Form erzeugt werden
- auf das Panel geworfen werden (das solte recht schnell gehen)
- und danach die alte Form wieder entsorgt werden

So sollte der Wechsel recht schnell gehen.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Formular im Thread neu erzeugen

  Alt 25. Jul 2015, 08:54
Die Idee hat Karl-Heinz ja schon wieder verworfen.

Ein Formular aus einen Thread heraus zu erzeugen wird wegen späterer Zugriffskonflikte m.E. immer schief gehen.

Wenn man das will, kann man Formulare auch direkt einbetten - z.B. so: http://www.delphipraxis.net/1138047-post24.html


Aber eigentlich ist das Problem ja offenbar schon gelöst.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Formular im Thread neu erzeugen

  Alt 25. Jul 2015, 09:27
Mal so als Anmerkung,
meine Begeisterung für eine (tiefgreifende) Oberflächenänderung würde sich doch in engen Grenzen halten, wenn sie während eines Arbeitsvorgangs stattfindet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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 08: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-2025 by Thomas Breitkreuz