![]() |
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... |
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:
|
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; |
Re: Schleife abbrechen...
Zitat:
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; |
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:
meins war ja nicht nur ein wenig falsch.
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; 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. |
Re: Schleife abbrechen...
Zitat:
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!!!
|
Re: Schleife abbrechen...
funktioniert perfekt!
du hast mir damit sehr weiter geholfen, danke. |
Re: Schleife abbrechen...
war zu voreilig...
in meinem stringrid sind 9 reihen es werden nur 7 übergeben, fällt dir spontan was dazu ein? |
Re: Schleife abbrechen...
Hmmm... eigentlich nicht. Welche beiden werden denn nicht übergeben?
|
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 13:04 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