I find the current table fields just too clunky. I am creating a table object based on grouped fields. After a recent fix of a few bugs, it seems to work quite well, and allows for much better control.
The advantage to this approach is that it allowed me to do things like allow for a simple scheme for moving columns, inserting columns, proper tabbing, automatic vertical scrolling, etc... If anyone wants a copy of this object, just e-mail me, and I will be happy to send it to you. It work well right now - but I plan to keep modifying it and adding in new capabilities. For a table that needs to hold several hundred (or even several hundred thousand) rows, I am thinking of creating a different design - one that holds the data for each row in a custom property, and creates the fields/groups from the appropriate custom property for each row on the fly as the user scrolls up or down, then destroys those fields/groups as the row dissappears from view when it is scrolled past. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Bill Sent: Friday, May 20, 2005 9:27 AM To: How to use Revolution Subject: Re: Table field behavior Wow -- can't we make this any more complicated? Thanks a whole lot. I will put your code in right now and start in as that automatic scroll thing is annoying as ^([EMAIL PROTECTED] (if you curse in unicode than no one will see). On 5/20/05 9:17 AM, "Eric Chatonet" <[EMAIL PROTECTED]> wrote: > Hello Bill, > > I am working on a How-To stack about table fields. > It's not finished but here is an excerpt from this stack which might > help you without waiting for the release :-) > As you will see it, it's a little bit dry and tricky :-( > But fully commented :-) > Following scripts are placed in the card script. > >> By default, a table has no limits: you can use the arrowkeys or the >> tabkey to navigate as far as you wish. >> Practically, you will often need to display a x*y cells table >> without scrollbars as a matrix where all cells are visible and let >> the user navigate in carousel (go from the last cell in a row to >> the first cell in the next row and so on) through the limits you >> have set. >> In order to set these limits, you will trigger the keyboard events >> within a rawKeyDown handler. >> Here the limits which are integers are stored as custom properties >> named xLimit and yLimit in the table field named "MyTable": >> >> on rawKeyDown pKey >> -- allows tabbing and arrowkeys to act in carousel >> -- horizontal and vertical limits are stored in 2 custom >> properties (xLimit and yLimit) in the table field >> >> if "revCell" is in the target then >> -- when editing a table field, target function returns >> something like: field "revCell-1,1" >> if the xLimit of fld "MyTable" = "None" or the xLimit of fld >> "MyTable" is empty then pass rawKeyDown -- no limits >> ----- >> switch pKey >> case 65363 -- arrow key right >> case 65289 -- tab key >> if the cRevTable["currentxcell"] of fld "MyTable" = the >> xLimit of fld "MyTable" then >> if the cRevTable["currentycell"] of fld "MyTable" = the >> yLimit of fld "MyTable" then >> SelectCell "MyTable",1,1 -- the first table cell >> else >> SelectCell "MyTable",1,the cRevTable["currentycell"] of >> fld "MyTable" + 1 -- the first table cell in the next line >> end if >> else pass rawKeyDown >> break >> ----- >> case 65361 -- arrow key left >> if the cRevTable["currentxcell"] of fld "MyTable" = 1 then >> if the cRevTable["currentycell"] of fld "MyTable" <> 1 then >> SelectCell "MyTable",the xLimit of fld "MyTable",the >> cRevTable["currentycell"] of fld "MyTable" - 1 -- � >> -- the last allowed table cell in the previous line >> else >> SelectCell "MyTable",the xLimit of fld "MyTable",the >> yLimit of fld "MyTable" -- � >> -- the last allowed table cell >> end if >> else pass rawKeyDown >> break >> ----- >> case 65364 -- arrow key down >> if the cRevTable["currentycell"] of fld "MyTable" = the >> yLimit of fld "MyTable" then >> if the cRevTable["currentxcell"] of fld "MyTable" = the >> xLimit of fld "MyTable" then >> SelectCell "MyTable",1,1 -- the first table cell >> else SelectCell "MyTable",the cRevTable["currentxcell"] of >> fld "MyTable" + 1,1 -- � >> -- the first table cell in the next column >> else pass rawKeyDown >> break >> ----- >> case 65362 -- arrow key up >> if the cRevTable["currentycell"] of fld "MyTable" = 1 then >> if the cRevTable["currentxcell"] of fld "MyTable" <> 1 then >> SelectCell "MyTable",the cRevTable["currentxcell"] of fld >> "MyTable" - 1,the yLimit of fld "MyTable" -- � >> -- the last allowed table cell in the previous column >> else SelectCell "MyTable",the xLimit of fld "MyTable",the >> yLimit of fld "MyTable" -- � >> -- the last allowed table cell >> else pass rawKeyDown >> break >> ----- >> default >> pass rawKeyDown -- lets the engine do it >> end switch >> else pass rawKeyDown >> end rawKeyDown >> ---------------------------------------------------------------- >> >> on SelectCell pFieldName,pColumn,pRow >> -- select a cell >> >> -- pFieldName parameter is the short name of the table field >> -- pColumn parameter is the column number (an integer) >> -- pRow parameter is the row number (an integer) >> >> SetCurXCell pFieldName,pColumn -- � >> SetCurYCell pFieldName,pRow -- � >> ----- >> SetScroll "hScroll",the cRevTable["cellxspacing"] of fld >> pFieldName * (pColumn - 1),pFieldName,"Header" -- � >> SetScroll "vScroll",the cRevTable["cellyspacing"] of fld >> pFieldName * (pRow - 1),pFieldName,"Rows" -- � >> ----- >> click at CellLoc(pFieldName,pColumn,pRow) -- � >> ----- >> -- to select again the current cell, you can use: >> -- click at the cRevTable["currentxmouseloc"] of fld >> pFieldName,the cRevTable["currentymouseloc"] of fld pFieldName >> end SelectCell >> >> ---------------------------------------------------------------- >> >> function CellLoc pFieldName,pColumn,pRow >> -- returns the loc of any cell >> >> -- pFieldName parameter is the short name of the table field >> -- pColumn parameter is the column number (an integer) >> -- pRow parameter is the row number (an integer) >> >> local >> tLeft,tTop,tCellxspacing,tCellyspacing,tCurrenthscroll,tCurrentvscroll >> ----- >> put the left of fld pFieldName into tLeft >> put the top of fld pFieldName into tTop >> put the cRevTable["cellxspacing"] of fld pFieldName into >> tCellxspacing >> put the cRevTable["cellyspacing"] of fld pFieldName into >> tCellyspacing >> put the hScroll of fld pFieldName into tCurrenthscroll >> put the vScroll of fld pFieldName into tCurrentvscroll >> return ((pColumn - 1) * tCellxspacing) + (tCellxspacing div 2) + >> tLeft - tCurrenthscroll, \ >> ((pRow - 1) * tCellyspacing) + (tCellyspacing div 2) + tTop - >> tCurrentvscroll >> end CellLoc >> ---------------------------------------------------------------- >> >> on SetCurXCell pFieldName,pValue >> -- updates prop in the cRevTable of the table field >> >> -- pFieldName parameter is the short name of the table field >> -- pValue parameter is the column number (an integer) >> >> set the cRevTable["currentxcell"] of fld pFieldName to pValue >> end SetCurXCell >> >> ---------------------------------------------------------------- >> >> on SetCurYCell pFieldName,pValue >> -- updates prop in the cRevTable of the table field >> >> -- pFieldName parameter is the short name of the table field >> -- pValue parameter is the row number (an integer) >> >> set the cRevTable["currentycell"] of fld pFieldName to pValue >> end SetCurYCell >> >> ---------------------------------------------------------------- >> >> on SetScroll >> -- sets the table field and header fields scrolls if they are any >> -- the syntax is not very comprehensible since this handler can >> set the scroll of an unknown number of fields >> -- then it refers to parameters by order/number and not by name >> using the do command >> >> lock screen >> lock messages >> repeat with i = 3 to the paramcount >> do "put there is a fld" && param(i) && "into tFlag" >> if tFlag then do "set the" && param(1) && "of fld" && param(i) >> && "to" && param(2) >> -- param (3) to param(x) are the names of the fields >> end repeat >> unlock messages >> unlock screen >> end SetScroll > > That's all! > Is it enough? > LOL > > Le 20 mai 05 � 14:58, Bill a �crit : > >> The docs on table fields is rather sparse. >> >> An example table field has six cells across. It is unlocked on Mac >> OSX. When >> you enter data and tab across to the next cell and enter data for >> that cell >> and tab it works fine until you get to the last cell then it >> automatically >> scrolls to the right (there are no scroll bars set for either >> vertical or >> horizontal). This automatic scroll to the right makes all the >> previously >> entered data not visible and is a behavior I want to prevent. I tried >> locking position and that didn't work. >> >> How do I do this? > > > Best regards from Paris, > > Eric Chatonet. > ---------------------------------------------------------------- > So Smart Software > > For institutions, companies and associations > Built-to-order applications: management, multimedia, internet, etc. > Windows, Mac OS and Linux... With the French touch > > Plugins, tutorials and more on our website > ---------------------------------------------------------------- > Web site http://www.sosmartsoftware.com/ > Email [EMAIL PROTECTED]/ > Phone 33 (0)1 43 31 77 62 > Mobile 33 (0)6 20 74 50 86 > ---------------------------------------------------------------- > > _______________________________________________ > use-revolution mailing list > [email protected] > http://lists.runrev.com/mailman/listinfo/use-revolution > > | | | )_) )_) )_) )___))___))___)\ )____)____)_____)\\ _____|____|____|____\\\__ -------\ /--------- http://www.bluewatermaritime.com ^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^ ^^^ ^^ ^^^^ ^^^ 24 hour cell: (787) 378-6190 fax: (787) 809-8426 Blue Water Maritime P.O. Box 91 Puerto Real, PR 00740 _______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution _______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution
