How to find the column and row of a basic tableField

Niggemann, Bernd Bernd.Niggemann at uni-wh.de
Wed Apr 1 15:22:24 EDT 2020


There was a long thread regarding the dataGrid which somehow touched getting the row and column of a basic tableField.
I posted this solution also there. Mike Doub found some problems that turned out to be due to the fact that "cellEdit" was set to true for the table object.
If "cellEdit" is true then a front script takes over and creates a temporary field.

To post my solution to the problem again I start this new thread for clarity. The script is an elaboration on a sketchy script by Jacque.

The basic tableField is a regular field which has the option of "cellEditing". Apart from that it is a field that uses tab-delimited data to display it in a table form. 
hGrid and vGrid show horizontal and vertical dividers.

To get at the column number and the row number to determine the cell the user clicked on when the field's lockText is true here is a script that works well for me.

To test this make a regular field, name it "tf" and a second field for the result named "fRes". Make sure that "cellEdit" of the field is set to false (tab "table" in Properties Inspector)

set the script of field "tf" to 

---------------------------------------------------------------
on mouseUp
   put word 2 of the clickLine into tLine
   put getColumn(the clickH) into tItem
   put "Row:" && tLine into tRow
   put "Col:" && tItem into tColumn
   set the itemDelimiter to tab
   if tItem is not empty then
      put tRow &cr& tColumn & cr & "ClickH: " & the clickH & cr & "content: " & item tItem of line tLine of me & cr  into field "fRes"
   else
      put "No Item" into tItem
      put tRow &cr& tColumn & cr & "ClickH: " & the clickH & cr & "content: " & tItem  into field "fRes"
   end if
end mouseUp

function getColumn pClickH
   put the tabstops of me into tTabs
   put the num of items in tTabs into tNumStops
   if tNumStops > 1 then
      put last item of tTabs - item -2 of tTabs into tTabWidth
   else
      put item 1 of tTabs into tTabWidth
   end if
   set the itemdel to tab
   put the num of items in line 1 of me into tColumns
   if tNumStops < tColumns then -- add missing tabstops
      repeat with x = tNumStops+1 to tColumns
         put comma & (tTabWidth * x) after tTabs
      end repeat
   end if
   set the itemdel to comma
   put the hScroll of me into tHScroll
   put the borderwidth of me into tBrdr -- tested from 0 to 4
   put the leftMargin of me - 3 into tLeftMarg -- tested from 4 to 12
   put the left of me + tBrdr into tLeftAndBorder
   put tLeftAndBorder - tHScroll - tLeftMarg into tLeftOfItem
   put tLeftAndBorder - tHScroll + tLeftMarg + 1 into tRightOfItem
   put 0 & comma before tTabs
   repeat with x = 1 to the num of items in tTabs
      if pClickH > (item x of tTabs) + tLeftOfItem and \
            pClickH < (item x+1 of tTabs) + tRightOfItem then
         return x
      end if
   end repeat
   return empty
end getColumn
--------------------------------------------------------------------------

add a button to the card with the following script for test data

--------------------------------------------------------------------------
on mouseUp
   put "1,2,3,4,5,6" into tLine
   put empty into field "tf"
   replace comma with tab in tLine
   set the itemDelimiter to tab
   repeat 6
      put tLine & cr after tCollect
      repeat with i = 1 to 6
         add 6 to item i of tLine
      end repeat
   end repeat
   delete last char of tCollect
   lock screen
   put tCollect into field "tf"
   set the hGrid of field "tf" to true
   set the vGrid of field "tf" to true
   set the vScrollbar of field "tf" to true
   set the tabStops of field "tf" to 77
   set the lockText of field "tf" to true
   unlock screen
end mouseUp

--------------------------------------------------------------------------

Kind regards
Bernd	



More information about the use-livecode mailing list