以程序設計方式修改 Visual FoxPro 中的報表欄位

本文介紹如何以程序設計方式修改報表檔案,以變更欄位的字型色彩。

原始產品版本: Visual FoxPro
原始 KB 編號: 188403

摘要

建議您以程式設計方式變更報表欄位,以區分值,或根據條件修改格式。 本文示範如何根據個別銷售人員的銷售總額,變更報表字段的字型色彩。 雖然這項技術適用於 Microsoft Visual FoxPro 9.0 Professional Edition,但您可以使用報表接聽程式和事件驅動列印來取得相同的結果。

其他相關資訊

下列程式代碼會建立數據表、填入數據表並執行銷售報表,並變更字型色彩以反映銷售總額。 若要變更報表欄位的色彩,會修改報表欄位記錄的 PenRed、PenGreen 和 PenBlue 字段。 這個方法也可以用來變更字型樣式、字型大小,甚至是重新定位欄位。 此外,可以使用 REPLACE ALL <屬性欄位> WITH <屬性值> FOR objtype = 8 來變更物件的整個類別,例如。

  1. 將下列程式代碼儲存在名為 Maketabs.prg 的程式檔中,然後執行程式來建立和填入數據表。

    範例程式碼

     *-- 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. 建立報表。 在 [頁首] 群組中,新增報表字段,並讓表達式 salestot.id。在 [詳細數據] 區段中,新增報表字段,並將表達式設為 salestot.invamt。 在 [頁尾] 區段中,新增報表字段,並建立salestot.invamt表達式。 按兩下 [報表表示式] 對話框中的 [計算] 按鈕。 選取 [總和],按兩下 [確定],然後再按兩下 [確定]。 將報表儲存為 Sales.frx。

  3. 將下列程式代碼儲存在名為 Sales.prg 的程式檔中,然後執行程式:

     *-- 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. 當每個報表都預覽時,捲動至底部以查看摘要,並觀察每個銷售人員的色彩變更方式。