Seite 1 von 1

SetFormSize

Verfasst: Mo, 05. Aug 2013 10:51
von Koverhage
Wenn ich für einen Nadeldrucker ein benutzerdefiniertes Formular anlege,
bekomme ich diese nicht in der Auswahl. Wie kann ich die Nummer feststellen ?
Die pauschale Defintion #define XBPPRN_FORM_USER 256
ist meistens ja nicht richtig.

Re: SetFormSize

Verfasst: Mo, 05. Aug 2013 12:40
von brandelh
Nadeldrucker, da war doch was ... ;-)

Eventuell mußt du das Papierfach ermitteln:

Code: Alles auswählen

aPaperBins := oHBPrinter:paperBins()
nLdfNr := 1
aeval(aPaperBins,{| oBin| qout(alltrim(str(nLdfNr++))+":   ID:",str(oBin[1],4),"Name:",oBin[2]) })
und laut Hilfe bekommt man so die Papierformate:

Code: Alles auswählen

:forms() --> aForms | NIL 

// Die Methode gibt ein zweidimensionales Array mit zwei Spalten zurück. 
// Die linke Spalte des Arrays enthält numerische Werte, mit denen ein Papierformat identifiziert wird, 
// während die rechte Spalte den Namen für ein Format als Zeichenkette enthält:  { {<nFormId>, <cFormName>}, { <...> , <...>      }  } 
// Falls ein Drucker keine unterschiedlichen Papierformate unterstützt, wird NIL zurückgegeben. 

:setFormSize( <nFormId>  ) übergeben werden, um ein bestimmtes Papierformat auszuwählen. 

// Die aktuelle Größe eines Papierformats wird durch die Methode :paperSize() festgestellt. 
ob allerdings ein NADELDRUCKER wirklich das Papierfach über die Papiergröße ermittelt, oder einfach nur der Traktor oder Einzelblatteinzug gewählt werden muss weiß ich nicht.
Mein Canon iP7200 kann jedenfalls per Papiergrößenauswahl in Word die Umschläge aus einem der Fächer ziehen, die Nadler die ich kannte konnten sowas nicht.

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 11:27
von Koverhage
ich muss nochmals auf dieses Thema kommen.

Wie bekomme ich die richtige Bezeichnung des Papierformates in der Xbasee++ Anwendung
angezeigt?
Beispiel: Ich stelle beim Drucker generic / text only das Papierformat

German Std Endlospapier

ein.

Wenn ich mit

oPrinter := XbpPrinter():New()
oPrinter:create( m_drucker ) // need this to keep from crashing, m_drucker = ausgewählter Drucker
aBin := oPrinter:Forms()
oPrinter:destroy()

die verfügbaren Papierformate anzeige ist German Std Endlospapier nicht dabei.
Wie bekomme ich die (richtigen) Werte des Druckertreibers und nicht die
komischen Vorgaben/Konstanten von Xbase++ ?

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 13:51
von Bertram Hansen
Hallo Klaus,

ich benutze dafür die Methode

Code: Alles auswählen

:paperSize()

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 14:27
von brandelh
Die Werte für Fächer und Papiergrößen musst du vom Drucker direkt abfragen, meist haben die eigene IDs / Nummern / Bezeichnungen ...
Papiergröße bzw. Art hängt nämlich je nach Drucker auch vom richtigen Fach ab. Anstatt der Konstanten kann man mit :forms() auch die Druckergrößen ermitteln.

Code: Alles auswählen

:paperBins() --> aPaperBins | NIL =>    { {<nBinId>, <cBinName>}, 
:setFormSize( [<nFormID>] ) --> nFormIDOld | NIL 
:forms() --> aForms | NIL =>    { {<nFormId>, <cFormName>}, ; 
Doku zu :forms() hat geschrieben: Die Methode gibt ein zweidimensionales Array mit zwei Spalten zurück. Die linke Spalte des Arrays enthält numerische Werte, mit denen ein Papierformat identifiziert wird, während die rechte Spalte den Namen für ein Format als Zeichenkette enthält
Ich selbst habe damit aber keine Erfahrung, da ich immer auf A4 drucke.

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 16:04
von Koverhage
Hubert,

der Anwender soll doch einstellen was er möchte. Hierfür zeige ich die möglichen Papierformate "aBin gefüllt via oPrinter:Forms()"
Die Bezeichnungen die Xbase++ zurück gibt sind nicht identisch mit dem was mir der Druckertreiber anzeigt.
z.B. der Druckertreiber zeigt mir German Std Endlospapier (leider nicht die ID dazu) und Xbase++ zeigt mir zwar eine ID an
aber mit Fantasiebezeichnungen.

Rückgabe von :Forms()

Die Methode gibt ein zweidimensionales Array mit zwei Spalten zurück. Die linke Spalte des Arrays enthält numerische Werte, mit denen ein Papierformat identifiziert wird, während die rechte Spalte den Namen für ein Format als Zeichenkette enthält:

{ {<nFormId>, <cFormName>}, ;

{ <...> , <...> } }

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 16:16
von Koverhage
Bertram,

das nützt mir nichts, es wird ja nur die Größe des gewählten Papierformats zurückgegeben.
Der Anwender soll das Papierformat aus den möglichen ja erst wählen.

Beispiel: HP LaserJet A3, in das Fach können verschiedene Papierformate eingelegt werden, A3, A4, etc.

Bei unseren Anwendungen läuft das so. Der Anwender legt für Rechnungen eine Drucker fest, mit Schacht, Papierformat, Duplex, etc.
Wenn er dann auf das Drucken Symbol klickt (wie in Word Direktdruck ohne nochmals die Einstellungen zu bemühen) wird der Ausdruck
mit den festgelegten Einstellungen gedruckt. Wenn der Anwender jedoch den Druckerdialog eingestellt hat (wie in Word, Datei, drucken)
kann bzw. muss er die Einstellungen manuell vornehmen.
Das ist in den meisten Fällen einfach nur lästig, da es meines Erachtens ein effizientes Arbeiten verhindert.

Re: SetFormSize

Verfasst: Di, 08. Okt 2013 17:08
von Bertram Hansen
Hallo Klaus,

wäre es eventuell möglich (und nicht zu unübersichtlich) pro Schacht bzw. pro Papierformat einen eigenen Druckertreiber zu installieren.

Beispiel: "Laserdrucker_xyz_Schacht1", "Laserdrucker_xyz_Schacht2", "Nadeldrucker_xyz_Din_A4" oder "Nadeldrucker_xyz_Endlos"