4.15 PageSizeControl

Das 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.

...


Abstammung:

...


Spezielle Instance-Variablen:

Variable Syntax im UI-Code Im BASIC-Code
pageSize -- lesen, schreiben
pageMargins -- lesen, schreiben
pageLayout -- lesen, schreiben
pscFeatures pscFeatures = featuresWert lesen, schreiben


Methoden:

Methode Aufgabe
ShowDialog PageSize-Dialogbox anzeigen

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.

pscFeatures

Die 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:

Konstante Wert Anzuzeigende UI
PSCF_MARGINS 16 Eingabefelder für die Ränder
PSCF_CUSTOM_SIZE 8 Breite und Höhe des Dokuments
PSCF_LAYOUT 4 Hoch- oder Querformat
PSCF_SIZE_LIST 2 Liste verfügbarer Papiersorten
PSCF_PAGE_TYPE 1 Papier oder Umschlag
PSC_DEFAULT_FEATURES 15 CustomSize, Layout, Liste, PageType


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


pageSize

Die 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.

Konstante Wert Information
PS_WIDTH 4 Breite des Dokuments
PS_HEIGHT 5 Höhe des Dokuments


pageMargins

Die 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.

Konstante Wert Information
PS_LEFT_MARGIN 0 Linker Rand
PS_TOP_MARGIN 1 Oberer Rand
PS_RIGHT_MARGIN 2 Rechter Rand
PS_BOTTOM_MARGIN 3 Unterer Rand


pageLayout

Die 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


ShowDialog

Wenn 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

^

Weiter...