Hallo,
ich drucke mit ShellExecuteEx viele unterschiedliche Dokumente nacheinader (in einer Schleife) aus, möchte nun aber, dass der User die Möglichkeit hat, das Ausdrucken zu unterbrechen.
Bei sehr großen Dokumenten reagiert meine Applikation aber sehr träge auf jeden Knopfdruck.
Hat da jemande eine Idee?
Delphi-Quellcode:
PROCEDURE TForm1.Button2Click(Sender: TObject);
VAR
ShExecInfo : TShellExecuteInfo;
// alParam : ARRAY[0..99] OF Char;
i : Integer;
BEGIN
FOR i := 0 TO ListBox1.Items.Count - 1 DO
BEGIN
CloseIt := TRUE;
IF NOT FileExists(ListBox1.Items.Strings[i]) THEN
BEGIN
MessageDlg('File: ' + ListBox1.Items.Strings[i] + ' not found', mtError, [mbOk], 0);
Continue;
END;
FillChar(ShExecInfo, SizeOf(ShExecInfo), 0);
WITH ShExecInfo DO
BEGIN
cbSize := SizeOf(ShExecInfo);
fMask := SEE_MASK_NOCLOSEPROCESS; // SEE_MASK_NOCLOSEPROCESS OR SEE_MASK_FLAG_DDEWAIT;
lpFile := PChar(ListBox1.Items.Strings[i]);
lpVerb := 'print';
nShow := SW_SHOW;
END;
IF ShellExecuteEx(@ShExecInfo) THEN
BEGIN
WaitForSingleObject(ShExecInfo.hProcess, 0);
Application.ProcessMessages;
IF CloseIt = FALSE THEN Exit; // Wird vom ExitButton False gesetzt
END
ELSE
ShowMessage('Fehler beim Öffnen');
Application.ProcessMessages;
END;
showMessage('Ready');
END;