Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehr als 31 Zeichen bei Printer.Title möglich? (https://www.delphipraxis.net/136637-mehr-als-31-zeichen-bei-printer-title-moeglich.html)

Lannes 4. Jul 2009 21:21


Mehr als 31 Zeichen bei Printer.Title möglich?
 
Hallo,

der Titel sagt eigentlich schon alles. :wink:

Man kann mehr Zeichen an Printer.Title übergeben, aber nur 31 werden weitergeleitet.
In meinem Programm werden mehrere, zusammengehörige Dokumente(Bilder, RTf, Datenlisten) direkt hintereinander ausgegeben,
einige auch mehrfach(Kopie 1 bis x, je nach Benutzerangabe). Über Printer.Title möchte ich eine aussagekräftige Bezeichnung vergeben, u.A. auch deshalb weil Printer.Title durch den FreePDF etc. genutzt wird um den Dateinamen zu bilden. Durch die Begrenzung auf 31 Zeichen komme ich so langsam an meine Grenzen, eine eindeutige Bezeichnung zu finden.

BackOrifice 4. Jul 2009 21:39

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Ich weiß, dass ist alles andere als aussagekräftig; aber ich bilde unwichtige, einmalige Dateinamen immer mit dem Datum und der Uhrzeit mit Millisekunden :D
ddmmyyhhmmssnnn.xyz

Satty67 4. Jul 2009 21:48

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Also in der WinApi ist der Titel eines Druckjobs theoretisch nicht begrenzt (#0 terminiert).

Aber an vielen Stellen, wo ein Titel auch ein Dateiname sein kann (Hier PrintToFile), begrenzt MS die Länge auf 31 Zeichen (wie beim MAC :mrgreen: ). Interessant wäre, wo die Kürzung passiert und ob man das von Delphi aus (noch mit vertretbaren Mitteln) was ändern kann.

Andererseits sollte man vielleicht wirklich auch überlegen, ob man wirklich so lange Dateinamen nimmt. Je nachdem wo man speichert, kommt man ganz schnell an die nächste Grenze (Max_Path).

Luckie 4. Jul 2009 21:52

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Das nächste Hindernis könnte dann der Treiber sein, der die Dateinamenlänge begrenzt. Und spätestens da kommt man nicht mehr weiter.

Lannes 4. Jul 2009 22:34

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Hallo,

Zitat:

Zitat von Satty67
Interessant wäre, wo die Kürzung passiert und ob man das von Delphi aus (noch mit vertretbaren Mitteln) was ändern kann.

Genau dort wollte ich hin :wink:

Zitat:

Zitat von Satty67
Andererseits sollte man vielleicht wirklich auch überlegen, ob man wirklich so lange Dateinamen nimmt. Je nachdem wo man speichert, kommt man ganz schnell an die nächste Grenze (Max_Path).

bis Max-Path wollte ich eigentlich nicht, ein paar Zeichen, sagen wir mal 10 mehr würden mir ausreichen.

Zitat:

Zitat von Luckie
Das nächste Hindernis könnte dann der Treiber sein, der die Dateinamenlänge begrenzt. Und spätestens da kommt man nicht mehr weiter.

Also meine Drucker und FreePDF grenzen nicht weiter ein, wenn es dann ein anderer Treiber macht, kann man es nicht ändern.
Im Zusammenhang mit langen Bezeichnungen, optimalöe Länge, zu lang, liest eh keiner mehr, zu kurz, liest auch keiner -da nicht interpretierbar-, läuft es eben immer auf einen Kompromiss aus. Die 31 Zeichen zwingen mich zu einen -von mir nicht gewollten- Kompromiss. :(

Lannes 6. Jul 2009 12:53

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Hallo,

hab keinen Weg gefunden die Zeichenanzahl zu erhöhen.

Mein aktueller Kompromiss:
Ich kürze die Bezeichnungen auf 31 Zeichen und gebe in der Programm-Dokumentation Hinweise zur Interpretation der Bezeichnungen.

Aber wenn noch jemand einen Tipp hat ... :)

jaenicke 6. Jul 2009 13:50

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Das ist eine Einschränkung von Windows, nicht von Delphi. Ich vermute um mehr als 31 Zeichen zu verwenden müsste man StartDocPrinter statt StartDoc verwenden (wie es in der Unit Printers verwendet wird).

Lannes 6. Jul 2009 14:42

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Hallo,

ein Auszug aus Printers.pas von D3, in Delphi Turbo wird dort nicht eingegrenzt.

Delphi-Quellcode:
TPrinter = class(TObject)
//...
  FTitle: string;

//...
procedure TPrinter.BeginDoc;
var CTitle : array[o..31] of Char;//<----!
begin
//...
  StrPLCopy(CTitle, Title, SizeOf(CTitle) - 1);
//...
  with docInfo do
//...
   lpszDocName := CTitle;
Greift Delphi da Windows vor oder wie muss man das interpretieren.

An welcher Stelle schränkt Windows dann ein, wo müsste ich da suchen?

jaenicke 6. Jul 2009 14:47

Re: Mehr als 31 Zeichen bei Printer.Title möglich?
 
Es steht auf anderen Seiten, dass nur 31 Zeichen möglich seien. Und da in Turbo Delphi die Beschränkung von Delphi aus nicht drin ist, muss das ja auch so sein.

Wie gesagt: Ich vermute, dass das bei StartDoc tatsächlich so ist und bei der genannten Alternative StartDocPrinter vielleicht nicht. Ausprobiert habe ich es nicht. Funktionieren muss es jedenfalls irgendwie, da andere Programme die Beschränkung ja auch nicht haben (bzw. neuere nicht, ältere schon).


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz