![]() |
Virtueller Drucker mit Delphi
Ich arbeite mit Delphi7PRO und Delphi8Architect und habe mir ein Ziel gesetzt.
Ich kenne diese Funktionsweise von anderen Programmen (PDFCreator oder so ähnlich) und möchte frage, ob ich sie auch in Delphi anwenden kann. Mein Programm soll vom System als Drucker erkannt werden und jeder Befehl den man an diesen virtuellen Drucker sendet, soll automatisch an mein DP Programm und von da aus ins LAN geleitet werden. Ich währe sehr dankbar für CodeSnippets oder Verweise auf andere Seiten, die diese Thema behandeln. |
Re: Virtueller Drucker mit Delphi
Diese programme sind nichts anderes als Druckertreiber. Du wirst also einen Druckertreiber schreiben müssen und das ist mit Delphi nicht möglich.
|
Re: Virtueller Drucker mit Delphi
Soweit ich weiß fällt dein Delphi 8 doch komplett raus - ist doch nur .Net, oder irre ich mich da?!
Des weiteren ist es denke ich gar nicht so einfach einen eigenen Drucker zu schreiben. Du musst wohl einen eigenen Druckertreiber schreiben, nur wie das geht weiß ich pauschal nicht ;) Ich habe aber mal schnell ein bisschen gegoogelt und das hier gefunden (entnommen aus dem folgenden ![]() ![]() Ich hoffe es bringt dich etwas weiter! [edit] roter Kasten zu langsam, oder Luckie zu schnell :gruebel: [/edit] |
Re: Virtueller Drucker mit Delphi
![]() |
Re: Virtueller Drucker mit Delphi
hi
evt. helfen dir folgende links weiter zu kommen ![]() ![]() gruss capo |
Re: Virtueller Drucker mit Delphi
Gabs hier vielleicht schonmal einen ähnlichen Thread?
|
Re: Virtueller Drucker mit Delphi
Man kann einen IP-Server nehmen der RAW-Daten über Port 9100 empfängt und diesen dann entsprechend einrichten. Dann holt man sich einfach die Daten ab und macht damit was immer man will.
|
Re: Virtueller Drucker mit Delphi
Ich hab jetzt das DDK und es gibt mehrere Beispiele für PrintDriver. Ich blicke da leider überhauptnicht durch :(
Eigentlich will ich ja nur, dass wenn ich auf Print clicke die Datei gespeichert wir d und dann meine Anwendung mit dem Parameter, der den Pfad der Datei enthält aufgerufen wird. Kann mir jemand da vielleicht helfen ? |
Re: Virtueller Drucker mit Delphi
Die Idee von Union ist wohl die einfachste
|
Re: Virtueller Drucker mit Delphi
Könnte mir jemand Unions Idee an einem CodeBeispiel verdeutlichen ?
Ich muss doch trotzdem einen Treiber proggen, oder? |
Re: Virtueller Drucker mit Delphi
Auf vielfachen Wunsch ;)
1. TIdTcpServer auf das Formular bringen 2. DefaultPort auf 9100 setzen 3. Active auf True setzem 4. Event OnExecute erzeugen:
Delphi-Quellcode:
5. Generic Drucker auf Port 127.0.0.1 RAW erstellen
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var DataStream : TStream; begin DataStream := TMemoryStream.Create; AThread.Connection.ReadStream(DataStream, -1, true); ShowMessage(Format('Es wurden %d Byte empfangen', [DataStream.Size])); DataStream.Free; end; 6. Programm compilieren und starten [edit]Ach so, Du musst natürlich auch was drucken ;) [/edit] 7. Statt ShowMessage irgendwas mit den empfangenen Daten machen |
Re: Virtueller Drucker mit Delphi
Es muss nicht gleich ein eigener Treiber sein.
Wir haben so was ähnliches im Einsatz. Basis ist dieser ![]() Entweder so verwenden und das Verzeichniss überwachen oder eben den C Quelltext abändern das die eigne Anwendung gestartet wird. Bei uns als Faxdrucker im Einsatz der eigentliche Treiber für den Drucker ist ein ganz normaler Postscript Treiber z.B. Appel Laserwriter die ![]() Uwe |
Re: Virtueller Drucker mit Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kann kein C++ :cry:
Könnte mir jemand vielleicht helfen, den SOurce so umzuschreiben, dass er mein Programm mit dem Pfad der zuvor gespeicherten Datei als Parameter aufruft ? Frage : Wenn ich dieses Ding da kompiliere und einbinde, sieht das dann so aus, als währe es ein Drucker? Source ist im Anhang |
Re: Virtueller Drucker mit Delphi
Thx Union :)
Ich hab mal versucht dem Computer zu sagen 192.168.xx.x währe ein Drucker. Hat funktioniert. So jetzt muss ich nur noch ein App schreiben. |
Re: Virtueller Drucker mit Delphi
BTW, wie Deinem anderen Thread zu entnehmen, möchtest Du die Druckdaten zunächst in einer Datei speichern. Das geht dann wie folgt (natürlich den Dateinamen c:\temp... entsprechend ändern):
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var DataStream, FileStream : TStream; begin DataStream := TMemoryStream.Create; AThread.Connection.ReadStream(DataStream, -1, true); ShowMessage(Format('Es wurden %d Byte empfangen', [DataStream.Size])); FileStream := TFileStream.Create('c:\temp\test.prn', fmCreate); DataStream.Position := 0; FileStream.CopyFrom(DataStream, DataStream.Size); FileStream.Free; DataStream.Free; end; |
Re: Virtueller Drucker mit Delphi
Ja, vorerst wollte ich das auch. Aber ich hab mich dazu entschlossen, die Daten direkt an einen anderen PC weiterzuleiten. Dazu habe ich einen Server geschreiben der Port 9100 abhört. Wenn ich nun Drucke werden die zu druckenden Daten im RAW Format an den anderen PC auf Port 9100 übermittelt. Zumindest in der Theorie :(
Leider funktioniert es nicht Könnte mir jemand ein Beispiel schreiben ? (Es muss über das LAN funktionieren) UNION hat schon eins geschrieben, aber geht das mit dem LAN UNIONS BSP :
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var DataStream, FileStream : TStream; begin DataStream := TMemoryStream.Create; AThread.Connection.ReadStream(DataStream, -1, true); ShowMessage(Format('Es wurden %d Byte empfangen', [DataStream.Size])); FileStream := TFileStream.Create('c:\temp\test.prn', fmCreate); DataStream.Position := 0; FileStream.CopyFrom(DataStream, DataStream.Size); FileStream.Free; DataStream.Free; end; |
Re: Virtueller Drucker mit Delphi
Hast Du auf dem PC eine Firewall? Dann musst Du evtl. den Port erst freischalten.
|
Re: Virtueller Drucker mit Delphi
Ich hab nen Router. Die WIndows Firewall hab ich deaktiviert, muss ich auf dem Router PortForwarding aktivieren ?
|
Re: Virtueller Drucker mit Delphi
Wenn beide PCs im selben Netz sind, dann nicht.
|
Re: Virtueller Drucker mit Delphi
ICh hatte mal so einen ChatClient geproggt, der lief begrenzt(Er hat nur shr selten was übermittelt). Ich glaub ich programmiere des nochmal neu und schau obs geht. :)
|
Re: Virtueller Drucker mit Delphi
Thx Union ! Es läuft :)
Ich musste zwar Delphi neu installieren und Indy9 drüberhauen aber jetzt läufts :thumb: |
Re: Virtueller Drucker mit Delphi
Vielleicht trägst Du auch mal die von Dir benutzte Delphi-Version in Deinem
![]() |
Re: Virtueller Drucker mit Delphi
Hallo,
ich wollte dieses Beispiel auch gerade mal nachbauen, hab also einen Drucker eingerichtet, einen IDTCPSERVER auf 9100 gesetzt und etwas gedruckt. Ich empfange aber nur 1-3 Byte mit "kryptischen" Zeichen. Diesmal war es ein "weiblich"-Symbol. Ich musste allerdings den Quelltext an Indy10 anpassen. Habe ich da etwas falsch gemacht?
Delphi-Quellcode:
Woran könnte es liegen?
procedure TForm3.IdTCPServer1Execute(AContext: TIdContext);
var DataStream, FileStream : TStream; begin DataStream := TMemoryStream.Create; //Diese Zeile wurde geändert. Ich habe Indy10 AContext.Connection.IOHandler.ReadStream(DataStream, -1, true); ShowMessage(Format('Es wurden %d Byte empfangen', [DataStream.Size])); FileStream := TFileStream.Create('c:\teest.txt', fmCreate); DataStream.Position := 0; FileStream.CopyFrom(DataStream, DataStream.Size); FileStream.Free; DataStream.Free; end; Danke im Voraus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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