DOCUMENT #718 ======================================================================= DRAW LINES AROUND VARIABLE LENGTH FIELDS ======================================================================= PRODUCT: R:BASE VERSION : 3.1 or Higher ======================================================================= CATALOG: Reports AREA : Drawing Lines ======================================================================= Lines are often used in a report to emphasize a section of text and set it apart from the rest of the report. It's easy to draw lines in R:BASE reports using the Draw option on the menu. The lines are placed in the report definition as text; they are not part of the field location. This works fine for fields that are located for a specific size. But when you locate a TEXT or NOTE field using just the W marking to indicate wrap for as many lines as there is data, the lines are only printed for the first and last lines of data. R:BASE only wraps the data, it does not wrap other text on the line. To have the report "draw lines" around all of a variable length TEXT or NOTE field use a TEXT variable instead of the line draw character on each end of the field location. The variable contains one line draw character for each line of data that wraps. The variable is itself wrapped and thus prints alongside the data. Step 1 ======= Create a lookup table to hold the line draw characters. The lookup table has two columns, an INTEGER column for the number of lines and a TEXT column to hold that number of line draw characters. For example: CREATE TABLE Borders (numline INTEGER, border TEXT 20) The TEXT column length must match the maximum number of lines printed for the field to be wrapped. The table defined above draws lines around fields wrapped up to 20 lines long. Step 2 ======= Next, determine the ASCII code of the line draw character. If the lines are single line borders, use ASCII code 179, for double line borders, use ASCII code 186. Step 3 ======= Load the Borders table with data. Enter consecutive numbers (to number each row) in the numline column. Enter that many line draw characters in the border column. Make sure you enter enough rows. For a single-line border around a field that will be a maximum of 10 lines long, load the Borders table with this data: numline border ------- ------- 1 | 2 || 3 ||| 4 |||| 5 ||||| 6 |||||| 7 ||||||| 8 |||||||| 9 ||||||||| 10 |||||||||| The data can be loaded by selecting the Borders table from the Info menu. To enter the single line character, hold down the [Alt] key and press 179 on the number pad. The Copy data option can be used to make data entry quicker. Alternatively, the LOAD command can be used from the R> prompt. Step 4 ======= Modify the report. Define two new variables in the report, one to compute how many lines the field wraps on, and one to lookup the matching number of line draw characters. For example, vnumline INTEGER = ((SLEN(note_column)) / 40 + 1) vborder = border IN borders WHERE numline = .vnumline The variable vnumline equals the number of lines required to print the note_column column for a given row. It is calculated as follows: SLEN finds the number of characters of data in the column for that particular row, that value is divided by the located width (40) and one is added to account for the last line. The variable vborder contains the same number of line draw characters as there are lines to print. Locate vborder at both ends of the location for the note_column column. You can locate vborder on top of the existing line draw characters. Locate vborder only one character wide by pressing S to mark the beginning, backspace, press W (on top of the S) to wrap, and then press [ESC] twice. This wraps the border lines as the text is being wrapped. The report format might look like this: two locations for vborder / \ / \ | | D +-----------------------------------+ D WS WW D +--------------|--------------------+ | location of the wrapping column If you have data that still doesn't print a complete box for some rows of data try SET WRAP OFF. With WRAP ON, fields may wrap with extra spaces causing the line count to be wrong.