Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleife abbrechen... (https://www.delphipraxis.net/11803-schleife-abbrechen.html)

horst 14. Nov 2003 08:24

Re: Schleife abbrechen...
 
hai ;)
danke. was ist
Delphi-Quellcode:
inc(ndx);?
?
wenn ich kein Application.Processmessages verwende krieg ich den button nicht geklickt.
Update funktioniert auch nicht.
was kann ich sonst tun?
grüße...

ims 14. Nov 2003 08:35

Re: Schleife abbrechen...
 
inc(variable) zählt die angegebene variable um 1 hoch, also z.B. von 2 auf 3...

application.processmessages wird benötigt, damit deine anwendung in rechenintensiven operationen weiterhin auf den benutzer reagiert.

Zitat:

Mit der Methode ProcessMessages können Sie eine Anwendung unterbrechen, sodass die Ereigniswarteschlange verarbeitet werden kann.
-> aus der OH

horst 14. Nov 2003 10:52

Re: Schleife abbrechen...
 
irgendwie klappt das nicht auch wenn ich den button anklicke:

habe es so gemacht:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  ndx: Integer;
begin
  ndx := 1;
  abbruch := true;
  while (ndx < StringGrid1.RowCount - 1) and (not abbruch) do
  begin
    inc(ndx);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileName: OleVariant;
  i, j: Integer;
  s: string;
begin
  Application.ProcessMessages;
  for i := 0 to StringGrid1.RowCount - 1 do
  begin
    s := StringGrid1.Cells[8, i];
    with TRegistry.Create do
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey('\Software\VB and VBA Program Settings\FRITZ!fax\Print', True) then
      begin
        WriteString('Microsoft Word - test.doc', s);
      end;
    finally
      CloseKey;
      Free;
      WordApplication1.Connect;
      FileName := 'C:\test.doc';
      WordApplication1.Documents.Open(FileName, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam);
      WordDocument1.Close;
      WordApplication1.PrintOut;
      sleep(3000);
      WordDocument1.Disconnect;
    end;
  end;
end;

Sharky 14. Nov 2003 11:17

Re: Schleife abbrechen...
 
Zitat:

Zitat von horst
irgendwie klappt das nicht auch wenn ich den button anklicke:

Hai horst,

so kann das auch nicht gehen.

Vergleiche mal meinen Code mit deinem
Delphi-Quellcode:
procedure Delay(msecs:integer);
var
  FirstTickCount:longint;
begin
  FirstTickCount:=GetTickCount;
  repeat
    Application.ProcessMessages; {allowing access to other controls, etc.}
  until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;

{****************************************************}

procedure TForm1.Button1Click(Sender: TObject);
var
  ndx              : Integer;
  FileName: OleVariant;
  i, j: Integer;
  s: string;
begin
  Button1.Enabled := False;
  ndx := 1;
  abbruch := false;
  while (ndx < StringGrid1.RowCount - 1) and (not abbruch) do
    begin
      s := StringGrid1.Cells[8, i];
      with TRegistry.Create do
        try
          RootKey := HKEY_CURRENT_USER;
          if OpenKey('\Software\VB and VBA Program Settings\FRITZ!fax\Print', True) then
            begin
              WriteString('Microsoft Word - test.doc', s);
            end;
        finally
          CloseKey;
          Free;
          WordApplication1.Connect;
          Application.ProcessMessages;
          FileName := 'C:\test.doc';
          WordApplication1.Documents.Open(FileName, EmptyParam, EmptyParam, EmptyParam,
            EmptyParam, EmptyParam, EmptyParam, EmptyParam,
            EmptyParam, EmptyParam);
          WordDocument1.Close;
          WordApplication1.PrintOut;
          Delay (3000);
          WordDocument1.Disconnect;
          inc(ndx);
          Application.ProcessMessages;
        end;
    end;
end;

{****************************************************}

procedure TForm1.Button2Click(Sender: TObject);
begin
  abbruch := True;
  Button1.Enabled := True;
end;

horst 14. Nov 2003 11:34

Re: Schleife abbrechen...
 
wow...das funktioniert 100%.
ich verstehe aber nur die hälfte, könntest du evt. dazu ein paar kommentare zu schreiben?
Code:
procedure Delay(msecs:integer);
var
  FirstTickCount:longint;
begin
  FirstTickCount:=GetTickCount;
  repeat
    Application.ProcessMessages; {allowing access to other controls, etc.}
  until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;
meins war ja nicht nur ein wenig falsch.
nur ist es nun so, dass immer nur die erste nummer übergeben wird und nicht mehr alle anderen aus dem stringgrid.

kann den fehler nicht finden.

Sharky 14. Nov 2003 11:41

Re: Schleife abbrechen...
 
Zitat:

Zitat von horst
ich verstehe aber nur die hälfte, könntest du evt. dazu ein paar kommentare zu schreiben?

Du hattest bei dir die Funktion Sleep verwendet. Diese hält den aktuelle Thread an. (Es werden also in dieser Zeit auch keine Nachrichten verarbeitet.

Die Funktion Delay die ich aus der Code-Library genommen habe macht nichts anderes als in einer Schleife zu waren bis seit der aktuellen "Zeit" (wird mit GetTickCount ermittelt) die angegebene Anzahl von millisekunden verstrichen ist. Wobei Zeit eigentlich falsch ist. Aber das steht in der OnlineHilfe.

Ups... mein Fehler.

Delphi-Quellcode:
  s := StringGrid1.Cells[8, i]; // das i durch ndx ersetzen!!!

horst 14. Nov 2003 11:44

Re: Schleife abbrechen...
 
funktioniert perfekt!
du hast mir damit sehr weiter geholfen, danke.

horst 14. Nov 2003 11:47

Re: Schleife abbrechen...
 
war zu voreilig...
in meinem stringrid sind 9 reihen
es werden nur 7 übergeben, fällt dir spontan was dazu ein?

Sharky 14. Nov 2003 11:58

Re: Schleife abbrechen...
 
Hmmm... eigentlich nicht. Welche beiden werden denn nicht übergeben?

horst 14. Nov 2003 12:02

Re: Schleife abbrechen...
 
die ersten beiden fehlten
damit geht es:
Delphi-Quellcode:
  ndx := 0;
  abbruch := false;
  while (ndx < StringGrid1.RowCount - 0) and (not abbruch) do


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.
Seite 2 von 3     12 3      

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