Freigeben über


Programmgesteuertes Ändern von Berichtsfeldern in Visual FoxPro

In diesem Artikel wird erläutert, wie Sie eine Berichtsdatei programmgesteuert ändern, um die Schriftfarbe eines Felds zu ändern.

Originalproduktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 188403

Übersicht

Es kann wünschenswert sein, Berichtsfelder programmgesteuert zu ändern, um Werte zu unterscheiden oder das Format je nach Bedingung anderweitig zu ändern. In diesem Artikel wird veranschaulicht, wie Die Schriftfarbe eines Berichtsfelds basierend auf den Gesamtumsatzsummen eines einzelnen Verkäufers geändert wird. Während diese Technik in Microsoft Visual FoxPro 9.0 Professional Edition funktioniert, können Sie dieselben Ergebnisse mithilfe von Report Listener und ereignisgesteuertem Drucken abrufen.

Weitere Informationen

Im Folgenden wird eine Tabelle erstellt, die Tabelle aufgefüllt und ein Umsatzbericht ausgeführt, wobei die Schriftfarbe so geändert wird, dass sie die Gesamtsummen des Umsatzes widerspiegelt. Um die Farbe eines Berichtsfelds zu ändern, werden die Felder PenRed, PenGreen und PenBlue des Datensatzes des Berichtsfelds geändert. Diese Methode kann auch verwendet werden, um den Schriftschnitt, den Schriftgrad oder sogar die Position des Felds zu ändern. Darüber hinaus kann eine gesamte Klasse von Objekten geändert werden, indem ALLE <Eigenschaftsfelder> DURCH <Eigenschaftswerte> FÜR objtype = 8 ersetzt werden.

  1. Speichern Sie den folgenden Code in einer Programmdatei namens Maketabs.prg , und führen Sie das Programm aus, um eine Tabelle zu erstellen und aufzufüllen.

    Beispielcode

     *-- Code begins here.
     CREATE TABLE sales (ID c(10), invamt N(8,2))
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1000)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2000)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 500)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1001)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2001)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 501)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1002)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2002)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 502)
     *-- Code ends here
    
  2. Erstellt einen Bericht. Fügen Sie im Seitenkopfband ein Berichtsfeld hinzu, und erstellen Sie den Ausdruck salestot.id. Fügen Sie im Bereich "Detail" ein Berichtsfeld hinzu, und erstellen Sie den Ausdruck "salestot.invamt". Fügen Sie im Bereich "Seitenfuß" ein Berichtsfeld hinzu, und erstellen Sie den Ausdruck "salestot.invamt". Klicken Sie im Dialogfeld "Berichtsausdruck" auf die Schaltfläche "Berechnungen". Wählen Sie "Summe" aus, klicken Sie auf "OK", und klicken Sie dann erneut auf "OK". Speichern Sie den Bericht als Sales.frx.

  3. Speichern Sie den folgenden Code in einer Programmdatei namens "Sales.prg", und führen Sie das Programm aus:

     *-- Code begins here.
     SET TALK OFF
     *-- Get a list of salespersons.
     SELECT DISTINCT id FROM sales INTO CURSOR list
    
     *-- Step through the list and print sales results for each
     *-- salesperson.
     SCAN
     SELECT * FROM sales WHERE id = list.id INTO CURSOR salestot
    
    *-- Get the total sales for this person.
     SUM invamt TO lnTotal
     SELECT 0
    
    *-- Open the report file as a table.
     USE sales.frx
    
     *-- We're looking for a field (objtype) that is
     *-- calculated (totaltype) and whose expression
     *-- (expr) is equal to table field we're calculating.
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("salestot.invamt", expr) > 0
    
    *-- Save the values for the pen and fill fields.
     lnPenRed = penred
     lnPenGreen = pengreen
     lnPenBlue = penblue
    
    *-- Modify the font color for the sales total.
     DO CASE
     CASE lnTotal > 3000 AND lnTotal < 6000 && Print green
     REPLACE penred WITH 0, pengreen WITH 255, penblue WITH 0
     CASE lnTotal > 6000 && Print blue
     REPLACE penred WITH 0, pengreen WITH 0, penblue WITH 255
     OTHERWISE && Print dark red on white
     REPLACE penred WITH 128, pengreen WITH 0, penblue WITH 0
     ENDCASE
     USE
     SELECT salestot
    
    *-- Change PREVIEW to TO PRINTER to print the report.
     REPORT FORM sales PREVIEW
     ENDSCAN()
    
    *-- Restore the original values.
     USE sales.frx
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("sales.invamt", expr) > 0
     REPLACE penred WITH lnPenRed, pengreen WITH lnPenGreen,;
     penblue WITH lnPenBlue
     USE
     CLOSE DATA
     *-- Code ends here.
    
  4. Wenn jeder Bericht in der Vorschau angezeigt wird, scrollen Sie nach unten, um die Zusammenfassung anzuzeigen und zu beobachten, wie sich die Farbe für jeden Vertriebsmitarbeiter ändert.