Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Externes Programm (https://www.delphipraxis.net/216572-externes-programm.html)

oldmann 20. Jan 2025 16:43

Externes Programm
 
Hallo,
in meinem Programm wird ein externes Programm gestartet.
Ich starte es nicht mit shellexecute, es startet sich durch den vorhandenen Code selbt.
Wie kann ich dem Programm trotzdem einen Pfad für ein Verzeichnis übergeben, das beim Start geöffnet wird.
mfg Oldmann

himitsu 20. Jan 2025 16:58

AW: Externes Programm
 
Und wie startet es sich denn nun?


Vielleicht vorher das Arbeitsverzerichnis (WorkingDir) setzen.

oldmann 20. Jan 2025 19:05

AW: Externes Programm
 
Hallo,

ich rufe diese Programmzeilen auf.
Dabei startet das externe Programm und stellt ein PDF her.
Gruss Oldmann

Delphi-Quellcode:
   GetDefaultPrinter;
   printer.printerindex := printer.printers.indexof ('StepOver PDF Converter');
   NicePreview1.PrintAll;
   printer.printerindex := printer.printers.indexof (GetDefaultPrinter);


procedure TNicePreview.PrintAll;
var
  Wmf: TMetafile;
  x: Integer;
begin
  if (Pages.Count > 0) then
  begin
    with Printer do
    begin
      Title := filename;
      BeginDoc;
      for x := 0 to Pages.Count-1 do
      begin
        Wmf := TMetafile(Pages[x]);
        Canvas.StretchDraw(Rect(0, 0, PageWidth, PageHeight), Wmf);
        if (x <> Pages.Count-1)
          then NewPage;
      end;
      EndDoc;
    end;
  end;
end;

jaenicke 20. Jan 2025 20:04

AW: Externes Programm
 
Du startest da gar nichts, sondern schickst lediglich einen Inhalt an einen PDF-Drucker. Was der dann macht, kannst du nur in dem Druckertreiber selbst konfigurieren, sofern dieser nicht eine eigene Schnittstelle anbietet.

Was möchstest du denn erreichen? Für eine PDF-Generierung gibt es auch Möglichkeiten, die direkt im Programm verwendet werden können. Dann muss auch kein Druckertreiber mit dem passenden Namen vorhanden sein.

oldmann 21. Jan 2025 09:29

AW: Externes Programm
 
Hallo,
danke für die Antworten.
Das erstellen des PDF klappt einwandfrei.
Nach dem Erstellen startet das Externe Programm.
Ich möchte erreichen, wenn ich dort 'Speichern unter...' drücke, vorher der richtige Pfad zum speichern des PDF eingestellt ist.
Wie kann ich das Problem lösen ???
Gruss Oldmann

Der schöne Günther 21. Jan 2025 09:41

AW: Externes Programm
 
Hast du den Beitrag über deinem jetzigen gelesen?

Zitat:

Zitat von jaenicke (Beitrag 1545452)
(...) schickst lediglich einen Inhalt an einen PDF-Drucker. Was der dann macht, kannst du nur in dem Druckertreiber selbst konfigurieren

Das "Speichern Unter" ist etwas, das dein "StepOver PDF Converter" macht, nicht dein Delphi-Programm. Steht auch bei denen auf der Homepage:
Zitat:

Standardmäßig öffnet sich beim Starten des PDF Converters ein “Datei speichern unter…” Dialog. Es ist jedoch auch möglich, die erzeugten Dateien automatisch in ein bestimmtes Verzeichnis zu kopieren oder den Dateinamen bei Bedarf mit Zahlen zu erweitern. (...) Alle benötigten Einstellungen können über die Konfiguration des PDF Converter eingestellt und übernommen werden.
https://stepover.com/produkte/software/pdf-converter/

oldmann 24. Jan 2025 10:17

AW: Externes Programm
 
Hallo,
ich habe mich mit StepOver in Verbindung gesetzt.
Der StepOver PDF Converter erstellt ein normales Windows Direktory Fenster.
Ich habe bis jetzt noch keine Möglichkeit gefunden, dass Arbeitsverzeichnis zu ändern.
Auch nicht mit WorkingDir.
Leider.
Trotzdem danke an alle die sich beteiligt haben.
Gruss Oldmann

jaenicke 24. Jan 2025 10:40

AW: Externes Programm
 
Für ein veröffentlichtes Programm, das andere nutzen, macht der Weg über einen solchen Druckertreiber ja keinen Sinn. Deshalb vermute ich mal, dass es um ein nur von dir verwendetes Programm geht?

Dann könnte man vielleicht den dreckigen Weg gehen und das aufgehende Fenster schlicht fernsteuern. Das ist nicht schön, wäre aber für ein kleines internes Tool ein möglicher Weg.

oldmann 24. Jan 2025 11:54

AW: Externes Programm
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich will ja auch nicht in den Druckertreiber eingreifen, sondern nur den angezeigten Pfad ändern.
Ich habe mal das Bild angehängt.
Gruss Oldmann

peterbelow 24. Jan 2025 11:57

AW: Externes Programm
 
Zitat:

Zitat von oldmann (Beitrag 1545465)
Hallo,
danke für die Antworten.
Das erstellen des PDF klappt einwandfrei.
Nach dem Erstellen startet das Externe Programm.
Ich möchte erreichen, wenn ich dort 'Speichern unter...' drücke, vorher der richtige Pfad zum speichern des PDF eingestellt ist.
Wie kann ich das Problem lösen ???
Gruss Oldmann

Ich habe da ein uraltes Kodefragment gefunden, das zeigt, wie man für einen Druckjob einen Dateinamen für print to file setzen kann. Vielleicht funktioniert das ja auch für den von dir verwendeten PDF-Drucker.
ACHTUNG! Der Kode ist uralt und für eine nicht Unicode-fähige Delphi Version. Braucht also eventuell Anpassungen.
Delphi-Quellcode:
Print to file:

uses printers;

Procedure StartPrintToFile( filename: String );
var
  CTitle: array[0..31] of Char;
  DocInfo: TDocInfo;
begin
  With Printer Do Begin
    BeginDoc;
    { Abort job just started on API level. }
    EndPage( Canvas.handle );
    Windows.AbortDoc( Canvas.handle );

    { Restart it with a print file as destination. }
    StrPLCopy(CTitle, Title, SizeOf(CTitle) - 1);
    FillChar(DocInfo, SizeOf(DocInfo), 0);
    with DocInfo do
    begin
      cbSize := SizeOf(DocInfo);
      lpszDocName := CTitle;
      lpszOutput := PChar(filename);
    end;
    StartDoc(Canvas.handle, DocInfo);
    StartPage(Canvas.handle);
  End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StartPrintToFile('C:\temp\temp.prn');
  try
    Printer.Canvas.TextOut( 100, 100, 'Hello World.' );
  finally
    Printer.endDoc;
  end;  
end;
Der Kode wiederholt praktisch einen Teil von BeginDoc, um in der Lage zu
sein, lpszOutput auf den Dateinamen der zu erzeugenden Datei zu setzen.


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

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