Verhalten von Fenster "Druckausgabe Speichern unter"

Guten Tag Allerseits

Wir haben bei uns aktuell LL28 und haben folgendes Problem.
Wenn ich einen PDF Drucker ausgewählt habe, und dann Drucke, erscheint das Fenster Druckausgabe Speichern unter. Früher (LL20) war das so, dass dieses Fenster Modal im Vordergrund erschien und ich im Hintergrund nichts mehr bearbeiten konnte, was so richtig war. Jedoch jetzt bei LL28 erscheint es teilweise im Hintergrund und ich kann den Dialog welcher nicht bearbeitbar sein sollte, editieren. Auch kann ich dann keinen Dateinamen zum Speichern eingeben. Für mich ist das eine BlackBox, da die Anzeige des Speichern unter Fenster von LL ausgeführt wird. Hat da jemand eine Lösung oder evtl. eine Info dazu ob sich da was geändert hat? Vielen Dank.
Codeaufruf welcher danach das Speichern unter Fenster anzeigt:

Result := cmbTLl28.LlPrintEnd(hTheJob, AdditionalPages);

Guten Morgen Christian, könntest mal deinen ganzen Aufruf posten, also PrintStart oder PrintWithBox usw. hast du ein LlPrintOptionsDialog etc.

**procedure TReportSystemListLabel.Print(OutputType: TReportOutputType;** doPrint: Boolean = True);
begin
  if (FCopies = 0) then
    OutputType := rotNone;

  if (OutputType = rotNone) then
    FHasPrinted := True;

  try
    DoPrintStart(OutputType);

    PrintListOrLabel();
    if doPrint then
      FLL.LlPrintEnd(0);
  except
    on Ex: Exception do
    begin
      try
        FLL.LlPrintAbort();
      except
      end;

      raise Exception(AcquireExceptionObject());
    end;
  end;

  CreateArchiveFile(OutputType);

  if (OutputType = rotPreview) or (OutputType = rotOnlyPreview) then
    ShowPreview();
end;

**procedure TReportSystemListLabel.DoPrintStart(OutputType: TReportOutputType);**
begin
  if (OutputType = rotNone)
  or (FArchiveFilename <> '') then  //  Zum archivieren ist eine LL erfoderlich...
    PrintStart(LL_PRINT_PREVIEW)
  else
  if OutputType = rotPrint then
    PrintStart(LL_PRINT_NORMAL)
  else
  if OutputType = rotPreview then
    PrintStart(LL_PRINT_PREVIEW)
end;

**procedure TReportSystemListLabel.PrintStart(PrintOptions: Integer);**
var
  ReturnValue: Integer;
begin
  if (IsListe()) then
    PropagateTables();

  FLL.LlDefineVariableStart();
  PropagateVars();

  if (IsListe()) then
  begin
    if (not Assigned(FOnDefineFields)) then
      raise Exception.Create('Dem Ereignis OnDefineFields ist keine Ereignisbehandlungsroutine zugewiesen.');
    if (not Assigned(FOnSetFields)) then
      raise Exception.Create('Dem Ereignis OnSetFields ist keine Ereignisbehandlungsroutine zugewiesen.');

    FLL.LlDefineFieldStart();
    CallOnDefineFields();
    CallOnSetFields(True);
    PropagateFields();
  end;

  if (FTextWaitingDialog = '') then
    Check(FLL.LlPrintStart(FProjectType, FFileName, PrintOptions),
      'LlPrintStart(' + IntToStr(FProjectType) + ', ''' + FFileName + ''', ' + IntToStr(PrintOptions) + ')')
  else
    Check(FLL.LlPrintWithBoxStart(FProjectType, FFileName, PrintOptions,
      LL_BOXTYPE_EMPTYWAIT, 0, FTextWaitingDialog),
      Format('LlPrintWithBoxStart(%d, ''%s'', %d)',
        [FProjectType, FFileName, PrintOptions]));

  ReturnValue := FLL.LlPrintGetOption(LL_PRNOPT_COPIES_SUPPORTED);
  Check(ReturnValue, 'LlPrintGetOption(LL_PRNOPT_COPIES_SUPPORTED)');
  if (ReturnValue = 1) then
    Check(FLL.LlPrintSetOption(LL_PRNOPT_COPIES, IfThen(FCopies <= 0, 1 , FCopies)),
      Format('LlPrintSetOption(LL_PRNOPT_COPIES, %d)', [IfThen(FCopies <= 0, 1 , FCopies)]));
end;

Der vorletzte Parameter hier definiert an sich das Parent-Handle für Dialoge. Kannst du mal versuchen, hier dein Form-Handle anzugeben?

1 Like

Vielen Dank für deinen Input. Da FTextWaitingDialog = ‘’ ist, wird dieser Code jedoch nicht ausgeführt und somit wird dieser Code stattdessen ausgeführt.

 Check(FLL.LlPrintStart(FProjectType, FFileName, PrintOptions),
      'LlPrintStart(' + IntToStr(FProjectType) + ', ''' + FFileName + ''', ' + IntToStr(PrintOptions) + ')')

Ich habe nun zu Testzwecken FTextWaitingDialog gesetzt damit der besagte Code mit PrintwithBoxStart ausgeführt wird und damit klappt es, somit habe ich schonmal eine mögliche Lösung.

Gibt es auch einen Weg damit es mit diesem Aufruf funktioniert?

    Check(FLL.LlPrintStart(FProjectType, FFileName, PrintOptions),
      'LlPrintStart(' + IntToStr(FProjectType) + ', ''' + FFileName + ''', ' + IntToStr(PrintOptions) + ')')

Wenn der Dialog zum Abbruch nicht angezeigt werden soll könntest du einmal versuchen, dennoch LlPrintWithBoxStart zu verwenden, aber als boxtype-Parameter LL_BOXTYPE_NONE zu übergeben. Das sollte eigentlich das gleiche Ergebnis liefern.

1 Like

Das Problem wurde soweit gelöst, jedoch gibt es noch eine kleine Unschönheit.

Die WaitBox erscheint vor dem “Speichern unter” Dialog. Gibt es eine Möglichkeit dass diese Box im Hintergrund erscheint?