Question:
In Windows 95, all data represented in a tabular or table format can be sorted by clicking on the column heading. If you click once, it is in ascending order and if you click the same column again, it sorts in descending order.
Can this look and behavior be duplicated in Centura?
Answer:
First, I presume you know how to create a table window and how to populate it. If not, I would recommend you contact Centura Software Corporation and plan to attend one of its training courses. These courses are cost effective because you will learn in a week what would take you probably six months to learn on your own.
Second, the table window must be set up to capture for a click on a column header (gray area at top of each column). This is accomplished by setting a table flag on (TRUE); usually this is done at the time the child table window is created, but it could be done at any time you specify.
At the Message Action section of the table window:
Third, now that the table is able to capture for a click on a column header, you may use another message at the table window’s Message Action section. When the customer clicks on a column header, it will be directed to this block of code and we will call a function we have created named ColumnSort. This function is expecting a number as a parameter, and conveniently enough, wParam in this case contains the column’s window handle in the form of a number. (Window Handle is a unique address given to each window object such as a push button, data field, column and so on when they are created?Windows takes care of assigning this for you):On SAM_CreateComplete Call SalTblSetTableFlags(hWndForm, TBL_Flag_SelectableCols, TRUE)
Now we will turn our attention to creating the function. This should be defined as a local function within the table window:On SAM_ColumnSelectClick Call ColumnSort(wParam)
01 Function: ColumnSort 02 Description: Sample solution to question for inquiry.com 03 Returns 04 Parameters 05 Number: nColHandle 06 Static Variables 07 Boolean: bSortOrder 08 Number: nPreviousColumn 09 Local variables 10 Window Handle: hWndClickedCol 11 Number: nIdClickedCol 12 Actions 13 Set hWndClickedCol = SalNumberToWindowHandle( nColHandle 14 ) 15 Set nIdClickedCol = SalTblQueryColumnID( hWndClickedCol ) 16 ! the sort order is a numeric value of either 0 or 1. The 17 constants are 18 ! TBL_SortIncreasing (1) and TBL_SortDecreasing (0). 19 If nIdClickedCol = nPreviousColumn 20 Set bSortOrder = NOT bSortOrder 21 ! Don’t use FALSE – the code would not toggle 22 between Ascending and Descending. 23 Else 24 Set bSortOrder = TRUE 25 Call SalTblSortRows( hWndForm, nIdClickedCol, bSortOrder ) 26 Set nPreviousColumn = nIdClickedCol
Code review:
Line Explanation 05 – defines our parameter which is passed as wParam. 07 – defines a static Boolean that will toggle the sort sequence between Ascending and Descending 08 – defines a static numeric variable which will keep track of the previously used column id. 10 – defines a local window handle, used for conversion. 11 – defines a local number which will contain the column id. 13 – Take the number passed to the function and convert it to a window handle. 15 – take the window handle and find the column ID 19 – compare the column id clicked with the previous column id 20 – if they are the same – toggle the Boolean bSortOrder 24 – if they are NOT the same, set bSortOrder = TRUE 25 – Sort the column in Ascending order 26 – Move the value of the current column to the variable nPreviousColumnThis code is well suited to migration into a class library. This will allow all your table windows to have this type of functionality and you don’t ever have to think about this code again.