4.15 PageSizeControlDas PageSizeControl-Objekt stellt in einer Dialogbox die UI bereit, um Größe, Ränder und Layout eines Dokuments auszuwählen. Das PageSizeControl-Objekt stellt nur die UI bereit, es ist Aufgabe des Programmierers die Werte auch zu verwenden.
Methoden:
Beim Programmstart lädt das PageSizeControl-Objekt Seitengröße, Ränder und Layout vom Treiber des Standarddruckers des Systems (auch wenn der Drucker nicht angeschlossen ist). Es ist deshalb nicht möglich, die Werte für pageSize, pageMargins, und pageLayout im UI-Code zu setzen. pscFeaturesDie Instancevariable pscFeatures enthält die Information, welche der möglichen UI-Elemente des PageSizeControl-Objekts angezeigt werden sollen.
Syntax UI-Code: <obj>.pscFeatures = featuresWert
Lesen: <numVar> = <obj>.pscFeatures
Schreiben: <obj>.pscFeatures = featuresWert
featuresWert: Anzuzeigende UI, siehe Tabelle
Der Wert für pscFeatures enthält Bitflags. Jedes Bit schaltet ein UI-Element ein oder aus. Wichtig! das Bit PSCF_CUSTOM_SIZE muss immer gesetzt sein, sonst crasht das System. Es sind folgende Konstanten definiert:
Beispiel: Ein PageSizeControl-Objekt, dass die Eingabefelder für die Ränder anzeigt, aber die Auswahl Papier/Umschlag nicht zulässt. Beachten Sie, dass das PageSizeControl-Objekt einen Caption-Wert benötigt. In vielen Fällen wird das PageSizeControl-Objekt als FileMenuChild eines Primary-Objekts in der generic Tree eingebunden. | ||||||||||||||||||||||||||||||||||||||||
PageSizeControl DemoPageSizeControl
Caption$ = "Seitengröße"
pscFeatures = PSC_DEFAULT_FEATURES \
+ PSCF_MARGINS - PSCF_PAGE_TYPE
End OBJECT
| ||||||||||||||||||||||||||||||||||||||||
pageSizeDie Instancevariable pageSize enthält die Größe des zu druckenden Dokuments, angegeben in typografischen Punkt (pt). Sie können die Größe des Dokuments völlig unabhängig vom Papier im Drucker wählen, allerdings ist es oft eine gute Idee, die Dokumentgröße an die Papiergröße anzupassen. Deswegen initialisiert das PageSizeControl-Objekt die Werte für pageSize mit der Papiergröße im Standarddrucker.PageSize kann im UI-Code nicht gesetzt werden. Wenn Sie einen von der Papiergröße im Standarddrucker abweichenden Wert einstellen wollen müssen Sie das im OnStartup-Handler ihres Programms tun (siehe Beispiel unten).
Synatx Schreiben: <obj>.pageSize = width, height
Lesen: <numVar> = <obj>.pageSize ( n )
n: Information, welcher Wert gelesen werden soll, siehe
Tabelle (PS steht für Page-Size)
Tabelle: Mögliche Parameter beim Lesen von pageSize. Alle Werte werden in typografischen Punkt (pt) angegeben.
pageMarginsDie Instancevariable pageMargins enthält die Ränder des zu druckenden Dokuments, angegeben in typografischen Punkt (pt). Das PageSizeControl-Objekt initialisiert die Werte für pageMargins mit den Rändern des Papiers im Standarddrucker.PageMargins kann im UI-Code nicht gesetzt werden. Wenn Sie einen von den Rändern im Standarddrucker abweichenden Wert einstellen wollen, müssen Sie das im OnStartup-Handler ihres Programms tun (siehe Beispiel unten).
Synatx Schreiben: <obj>.pageMargins = left, top, right, bottom
Lesen: <numVar> = <obj>.pageMargins ( n )
n: Information, welcher Wert gelesen werden soll, siehe
Tabelle (PS steht für Page-Size)
Tabelle: Mögliche Parameter beim Lesen von pageMargins. Alle Werte werden in typografischen Punkt (pt) angegeben.
pageLayoutDie Instancevariable pageLayout enthält die Layoutinformationen des zu druckenden Dokuments. Detaillierte Informationen zur Bedeutung des Werts von pageLayout finden Sie weiter oben, bei der Instancevariablen pcLayout des PrintControl-Objekts. Das PageSizeControl-Objekt unterstützt die Layouttypen PL_PAPER und PL_ENVELOPE. PL_LABEL wird nicht unterstützt.
Synatx Schreiben: <obj>.pageLayout = layoutWert
Lesen: <numVar> = <obj>.pageLayout
layoutWert: Siehe pcLayout des PrintControl-Objekts
Beispiel: Verwendung eines PageSizeControl-Objekts zur Einstellung der Dokument-Größe. Den kompletten Sourcecode finden Sie im Ordner R-BASIC\ Beispiel\Objekte\Drucken. UI-Code: Wir wollen auch die Seitenränder einstellen. Die logische OR-Operation setzt das Bit PSCF_MARGINS ohne die anderen Bits zu beeinflussen. Zur Demonstration haben wir auch noch ein Tastenkürzel (Strg-e) vergeben. | ||||||||||||||||||||||||||||||||||||||||
PageSizeControl DemoPageSizeControl
Caption$ = "Seitengröße" , 1
kbdShortcut = ASC("e") + KSM_CTRL + KSM_PHYSICAL
pscFeatures = PSC_DEFAULT_FEATURES OR PSCF_MARGINS
End OBJECT
| ||||||||||||||||||||||||||||||||||||||||
|
Wir möchten, dass unser PageSizeControl die Werte von Standarddrucker durch eigene Werte ersetzt. Deswegen müssen wir einen OnStartup-Handler vereinbaren. | ||||||||||||||||||||||||||||||||||||||||
Application DemoApplication Children = DemoPrimary OnStartup = AppStartupHander END Object | ||||||||||||||||||||||||||||||||||||||||
|
Im AppStartupHander überschreiben wir die Werte, die unser PageSizeControl vom Standarddrucker gelesen hat. Der Faktor 72/2,54 rechnet einen cm-Wert in typografische Punt (pt) um. | ||||||||||||||||||||||||||||||||||||||||
SYSTEMACTION AppStartupHander ' Seitengröße: A4 (21,0 cm x 29,7 cm) ' Seitenränder: links 3 cm, sonst 1,5 cm ' Randgröße: 1,5 cm -> 1.5*72/2.54 = 42.52 pt DemoPageSizeControl.pageSize = 21*72/2.54, 29.7*72/2.54 DemoPageSizeControl.pageMargins = 85, 43, 43, 43 DemoPageSizeControl.pageLayout = PL_PAPER END ACTION | ||||||||||||||||||||||||||||||||||||||||
|
Vor dem Drucken müssen wir die Daten aus dem PageSizeControl-Objekt noch an das PrintControl-Objekt weiterrechen. Das passiert im Handler des "Drucken"-Buttons: | ||||||||||||||||||||||||||||||||||||||||
BUTTONACTION PrintButtonHandler
DemoPrintControl.pcDocSize = \
DemoPageSizeControl.pageSize(PS_WIDTH), \
DemoPageSizeControl.pageSize(PS_HEIGHT)
DemoPrintControl.pcDocMargins = \
DemoPageSizeControl.pagemargins(PS_LEFT_MARGIN), \
DemoPageSizeControl.pagemargins(PS_TOP_MARGIN), \
DemoPageSizeControl.pagemargins(PS_RIGHT_MARGIN), \
DemoPageSizeControl.pagemargins(PS_BOTTOM_MARGIN)
DemoPrintControl.pcLayout = DemoPageSizeControl.pagelayout
DemoPrintControl.printJobName$ = "PageSizeControl Demo"
DemoPrintControl.InitiatePrint
END ACTION
| ||||||||||||||||||||||||||||||||||||||||
ShowDialogWenn Sie das PageSizeControl-Objekt in den generic Tree einbinden erzeugt es, wie bei einem Dialog, einen Button, mit dem man die Dialogbox des Objekts aufrufen kann. Die Methode ShowDialog wird nur benötigt, wenn Sie das PageSizeControl-Objekt von einer zweiten Stelle im Programm aus aufrufen wollen. Das kann zum Beispiel ein Tool-Button sein.Syntax: <obj>.ShowDialog Beispiel: | ||||||||||||||||||||||||||||||||||||||||
BUTTONACTION PageSizeToolButtonHandler DemoPageSizeControl.ShowDialog END ACTION | ||||||||||||||||||||||||||||||||||||||||
^ |