RRe: Continues flds

Andre.Bisseret Andre.Bisseret at inria.fr
Sun May 11 12:06:21 EDT 2008


>>
>>
>>> I'm trying to have text in a field and in the next page (like a
>>> book) or
>>> card it should start where the previous page left off.
>>> Hershel
>>>

Hi Hershel (and others in this thread),

A solution could be to use the same trick as one uses in cases of  
complex printing.

1 - create a new stack (named "niceBook")

2 - put 4 fields on the first card
- one field named "leTexte" (only on the first card) ; it is a  
scrolling field

- Three other fields, grouped with the backgroundbehavior of the group  
set to true. They are not scrolling fields
one is name "theBuffer"; it receives the content of field "leTexte"  
temporarily and is then emptied line by line into the fields "onePage"

the other is name "onePage"; it is completed line by line from the  
field "theBuffer" ; when the field  "onePage" on card 1 is completed,  
then a new card is created, and the field "onePage" on it is competed,  
and so on until the field "theBuffer" be empty

and the third field in the group is a small one at the bottom of the  
card named "champNoPage" (it receives the number of each page)

4 - put any long text in field "leTexte" on the first card of the  
stack; with paragraphs beginning with titles in bold (to test one of  
the cases of the handler "avoidOrphanLines" (if a title is isolated as  
a last line of field "onePage" this line is reported at the beginning  
of the next field "onePage")

Ex.:
------------
Part 1 (in bold)
Msdlkf mllsjd lmq mlsdf mljsf mljmlkj s flopiuoem ml ln mmqf oi xxx  
luoxu sooisdf o diofqmmfu if mqi mfiq imsdlkf mllsjd lmq mlsdf mljsf  
mljmlkj s flopiuoem ml ln mmqf oi xxx luoxu sooisdf o diofqmmfu if mqi  
mfiq imsdlkf mllsjd lmq mlsdf mljsf mljmlkj s flopiuoem ml ln mmqf oi  
xxx luoxu sooisdf o diofqmmfu if mqi mfiq.
Part 2 (in bold)
Msdlkf mllsjd lmq mlsdf mljsf mljmlkj s flopiuoem ml ln mmqf oi xxx  
luoxu sooisdf o diofqmmfu if mqi mfiq imsdlkf mllsjd lmq mlsdf mljsf  
mljmlkj s flopiuoem ml ln mmqf oi xxx luoxu sooisdf o diofqmmfu if mqi  
mfiq ivp.
Part 3 (in bold)
...
etc etc
------------

5 - on the first card of the stack put a button ("transfer" for  
exemple) whose script is
on mouseUp
transferText
end mouseUp

6 - set the script of the stack "niceBook" to the set of handlers at  
the bottom of this message.

7 - click on the button "transfer"
Also, you can try it after changing the size of the field "onePage"

Excuse me for the french words which are remaining ;-))

This set of handlers result of a quick adaptation I just made of a set  
I am using to print textual reports in a couple of my stacks.
Not sure it is optimized (sure it is not :-). When rereading some  
parts, I am not sure why I wrote them (or why I wrote them this  
way) ;-)))
But it works here.

If I have well understood what your are trying to do, normally, this  
script should do what you wanted to (or could approach it :-)

At least seems a way to explore

Best regards from Grenoble
André

-----------------------------------------------
To be placed in the script of the stack :
----------------------------------------------------------------------------------------------------------------
ON transferText
    local truc,
    global lineToAdd,cardNum,gPrintHeight
    ------------------
    put fld "leTexte" into fld  "theBuffer" of stack "niceBook"
    set the htmltext of fld "theBuffer" of stack "niceBook" to the  
htmltext of fld "leTexte" of this stack
    put the number of lines of fld "theBuffer" of stack "niceBook"  
into truc
    set the cursor to watch
    reduceStackToOneCard
    --set the printmargins to 72,50,50,72
    put field "leTexte" into field "theBuffer" of card 1 of stack  
"niceBook"
    set the htmltext of fld "theBuffer" of cd 1 of stack "niceBook" to  
the htmltext of fld "leTexte"
    put the height of field "onePage" of stack "niceBook" into  
gPrintHeight -- - 15 into gPrintHeight
    put empty into fld "onePage"
    put empty into cardNum
    REPEAT until fld "theBuffer" is empty
        put cardNum + 1 into cardNum
        fillOnePage
        put "Page" && cardNum into fld "champNoPage"
    END repeat	#
    go to last card of stack "niceBook"
    IF the number of this cd is not "1" THEN
        IF fld "onePage" is empty THEN delete this cd
    END IF
    reset cursors
END transferText

ON reduceStackToOneCard
    local NbrDeCartes,
    ----------------
    put the number of cds of stack "niceBook" - 1 into NbrDeCartes
    REPEAT NbrDeCartes
        delete cd 2 of stack "niceBook"
    END repeat
END reduceStackToOneCard

ON fillOnePage --remplirUnePage
  global CARDNUM,LINETOADD,GPRINTHEIGHT
  ----------
  go TO CARD CARDNUM
  put the number of lines of fld "onePage" + 1 into lineToAdd
  create card
  go previous
  REPEAT UNTIL the formattedheight of fld "onePage" of cd cardNum >=  
gPrintHeight
    IF the number of lines of fld "theBuffer" = 0 THEN exit repeat
    IF line 1 of fld "theBuffer" is empty THEN put cr after fld  
"onePage" of cd cardNum
    copy line 1 of fld "theBuffer" -- IT KEEPS THE FORMAT WITHOUT  
USING HTML
    select line lineToAdd of fld "onePage" of cd cardNum --FIRST EMPTY  
LINE
    paste
    set the clipboarddata to empty
    delete line 1 of fld "theBuffer"
    put lineToAdd + 1 into lineToAdd
  END repeat
  formatAgain
  avoidOrphanLines
END fillOnePage

ON formatAgain
  IF the formattedheight of fld "onePage" >= the height of field  
"onePage" THEN
    REPEAT until the formattedheight of fld "onePage" < the height of  
fld "onePage"
      --IF the mouseclick THEN exit repeat
      copy last line of fld "onePage"
      go next
      IF the clipboarddata is empty THEN
        put cr before fld "onePage"
      ELSE
        select before fld "onePage"
        paste
        set the clipboarddata to empty
        go previous
        delete last line of fld "onePage"
      END IF
    END repeat
  END IF
END formatAgain

ON avoidOrphanLines
  SWITCH
  CASE the textstyle of last line of fld "onePage" is "bold"\
    AND the foregroundcolor of last line of fld "onePage" is empty  
--"0,0,0"
    copy last line of fld "onePage"
    go next
    select before fld "onePage"
    paste
    set the clipboarddata to empty
    go previous
    delete last line of fld "onePage"
    break
  CASE the foregroundcolor of last line of fld "onePage" is "0,0,255"
    copy last line of fld "onePage"
    go next
    put cr before fld "onePage"
    select before fld "onePage"
    paste
    go previous
    delete last line of fld "onePage"
    break
  CASE first char of last line of fld "onePage" is "*" and\
    the number of chars of last line of fld "onePage" < 50
    copy last line of fld "onePage"
    go next
    put cr before fld "onePage"
    select before fld "onePage"
    paste
    go previous
    delete last line of fld "onePage"
    break
  END switch
END avoidOrphanLines
------------------------------------------------------------------------------------------



More information about the use-livecode mailing list