Help: Id's can be completly unreliable
Claudi Cornaz
claudi.c at fiberworld.nl
Wed Nov 10 08:15:03 EST 2010
Hallo all,
I have a big, and as yet, unsolvable problem.
I use quite some tmplt's (groups) I keep in a seperate stack and when
I need one
I copy this tmplt to the card or group where I need it. So far all
works as expected.
Now comes the problem: Very often one or more controls of this copyed
tmplt or the copyed tmplt itself will get an ID of 0.
This is more than a nuisance as I keep discovering more and more
problems with controls with an ID of 0.
The first problem is the long id the IDE/engine places in the it
variable. If there is a ID of 0 in it, it will be invalid.
Which means if you do the following it will throw a error saying the
control doesn't exist.
on mouseUp
copy grp "myTmplt" of cd 1 of this stack to grp "myGrp" of cd 2 of
this stack
set the name of it to "test" -- it: group id 0 of group id
1012 of cd id 1002 of stack "myStack"
end mouseUp
I had to change a lot of code because of this. I couldn't be sure the
long id in the it var was reliable,
because it might contain a ID of 0.
This problem can be solved as follows:
on MouseUp
put the number of controls of grp "myGrp" of cd 2 of this stack +
1 into tCount
copy grp "myTmplt" of cd 1 of this stack to grp "myGrp" of cd 2 of
this stack
set the name of control tCount of grp "myGrp" of cd 2 of this
stack to "test"
end mouseUp
Now it doesn't matter if I copy a image/field or a group consisting of
many controls,
since tCount will point to the next layer within the destination,
which will be the group in case a group get's copyed.
(you can't use the last control of grp "myGrp" it will throw a error
on compiling and anyway if you copy a grp
the last control will point to the control with the highest layer
within the copyed grp)
Further if you use tmplt's which you copy, always and I mean always,
use long names
to point to a specific control, as you just can't trust the ID or the
long ID. (a major rewrite of my code)
Ok this is a nuisance, but there is at least a solution/workaround to
it.
Now I discovered a new problem with a control which has gotten the ill
fated ID of 0.
If it happens to be a field you can't get it's formattedWith/Height etc.
I simply can't find a way to get at this, it always returns 0
put the width of fld myLongNameFieldReference gives: 220
put the value of yLongNameFieldReference gives: This is some text
put the formattedWidth of fld myLongNameFieldReference gives: 0
So the field exists (with a ID of 0) and it has text in it. But I just
can't get the formattedWidth of it .
I found in a rev lib stack a comment that the engine sometimes returns
0 as ID for controls and that they leave it at the moment.
The problem is I now have a card with sometimes 10 or more controls
with a ID of 0 which gives all kinds of problems.
Does anyone know a trick or workaround to get the formattedWidth of my
field? Please.
This is a complete stopper for me at the moment since I can't format
my field and I use dozens of them which need to be
formatted depending on there content.
Hoping someone of you bright minds knows/finds something clever to
solve my problem.
Best wishes,
Claudi
More information about the use-livecode
mailing list