Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Warten, bis Registrywert fertig geschrieben wurde? (https://www.delphipraxis.net/30920-warten-bis-registrywert-fertig-geschrieben-wurde.html)

Nuclear-Ping 1. Okt 2004 08:04


Warten, bis Registrywert fertig geschrieben wurde?
 
Hallo,

ich drucke über eine Schleife unter Verwendung des TWebBrowsers mehrere von meinem Programm erstellte HTML-Reports hintereinander aus, wobei ich vor jedem neuen Dokument die entsprechenden Registry-Werte für den IE aktualisiere, damit auf dem Ausdruck der Titel des jeweiligen Dokuments erscheint.

Delphi-Quellcode:
  for a := 0 to PageSelect.Items.Count - 1 do
    begin
      ProgressFrm.UpdateProgressBar (a + 1, MaxPages);

      // Seite in die IE-Instanz laden (wartet auch bis ReadyState = READYSTATE_COMPLETE)
      ViewPage (GetTextFromToken (FPageList[a], 0, '|'));

      // Registry-Keys für IE aktualisieren
      Prepare_IE_PageSetup (PageSelect.Items[a], '');

      // Zwangspause
      Application.ProcessMessages;
      Sleep (500);

      // Dokument drucken lassen
      IEinstance.ExecWB (OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
    end;
Das Problem was sich nun dabei stellt ist, dass er in praktisch jeder Druck-Session mindestens ein oder zwei Titel, trotz der Zwangspause, verhaut und so auf dem Ausdruck eines neuen Dokuments noch der Titel des zuvor gedruckten steht.

Gibt es eine Möglichkeit, zu warten, bis die Registry-Werte auch tatsächlich aktualisiert wurden? Sozusagen ein READYSTATE_COMPLETE für die Registry oder ähnliches? :gruebel:

Oder hat jemand sogar einen besseren Vorschlag, wie man das lösen könnte?

Grüße,
Mario

Sharky 1. Okt 2004 09:17

Re: Warten, bis Registrywert fertig geschrieben wurde?
 
Hai Nuclear-Ping,

eine Idee wäre in einer Schleife (mit kurzer Pause drinnne) "endlos" zu prüfen ob sich der Wert in der Reg geändert hat. Dafür brauchst Du den Vorgängerwert ja nur in einer Variable zu speichern.

Delphi-Quellcode:
var
  zeit : Byte;
begin
// PseudoCode
  zeit = 0;
  while (oldvalue = ReadRegistry) AND (zeil < 10) do
  begin
    Delay (500); // Pause
    Inc (zeit); // Zusätzliche Abbruchbedingung (5 sekunden)
  end;
end;

Nuclear-Ping 1. Okt 2004 09:38

Re: Warten, bis Registrywert fertig geschrieben wurde?
 
Stimmt, danke, guter Tip! :thumb:

Werd ich mal umsetzen ... :coder:

Grüße,
Mario

Nuclear-Ping 1. Okt 2004 12:06

Re: Warten, bis Registrywert fertig geschrieben wurde?
 
OK, habs umgesetzt.

Das schaut schonmal gut aus. Habs gerade getestet und diesmal hat er nichts verhauen. :)
Hoffe, das wars auch jetzt, werde es aber noch paar mal testen.

[edit]
Alles klar, habs noch paar mal getestet. Läuft wie Butter. Vielen Dank nochmals für den Wink mit dem Zaunspfahl. :P
[/edit]

Grüße,
Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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