Creating an auto-updating button icon thumbnail image from card snapshot

J. Landman Gay jacque at hyperactivesw.com
Fri Apr 1 13:09:23 EDT 2011


On 4/1/11 11:14 AM, J. Landman Gay wrote:
>
> Since you are taking snapshots of other cards and the "preopen" is for
> the control, I'm not sure you need to wait for the control to load. I
> think the issue is the ID of the icon.
>

I just tried the handler you posted and there's more wrong than just the 
icon ID.

on preOpenControl
    import snapshot from the rect of card "Example"
    set the icon of me to it
end preOpenControl

It might be a typo, but the first line will error without the "rect" 
keyword:  import snapshot from rect (the rect of cd "example"). Also, 
snapshots use the 0,0 point of the monitor (not the stack) for 
coordinates when dealing with cards, so the rect of a card will result 
in the snapshot containing the top left portion of whatever's on the 
monitor at that position. You'll need to translate the coordinates from 
global to local coords. You can either do that using the globalloc 
function or you can just use the rect of the stack instead of the rect 
of the card. The second method won't always work if you have a menubar 
on a Mac (which makes the stack shorter than the card.)

After either an import or an export, the "it" variable is not given a 
value, so it becomes the string literal "it". You can't set an icon to a 
string literal, you need an ID number.

While you can take snapshots of objects that aren't open, you can't take 
them of cards that aren't open. Cards are not objects. I was unable to 
get a snapshot of another card unless I went there first. This did work:

on test
   get the rect of this cd
   put globalloc(item 1 to 2 of it) into tRect
   put globalLoc(item 3 to 4 of it) into item 3 to 4 of tRect
   go cd 2
   import snapshot from rect tRect
   go back
   set the icon of me to the short id of last img of cd 2
end test

The "export snapshot" offers more options. You can export a snapshot to 
a variable and then put that variable into an image object. However, I 
was still unable to get a snapshot without going to the card. This works:

on test2
   lock screen
   go cd 2
   export snapshot from cd 2 to tVar as JPEG
   go back
   unlock screen
   create img "iconImg"
   set the text of img "iconImg" to tVar
   set the icon of me to the short id of img "iconImg"
end test2

-- 
Jacqueline Landman Gay         |     jacque at hyperactivesw.com
HyperActive Software           |     http://www.hyperactivesw.com




More information about the use-livecode mailing list