I'm no longer just dancing a jig... I'm doing a one man riverdance show 
This is what I got and it works wonders:
I enclose jsut the important snippets of code:
From the script that calls the GUI, I pass 2 variables to the script 0=Spell ID and 1=Spell name from the StrRef.
string sSpellLvl = Get2DAString("spells", "Wiz_Sorc", n);
string sSpellIcon = Get2DAString("spells", "IconResRef", n);
sTexts = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", n)));
sIcons = "LISTBOX_LVL"+sSpellLvl+"_ITEM_1="+sSpellIcon+".tga";
AddListBoxRow(oArcher, "SCREEN_IMBUEARROW_SPELLS", "LISTBOX_"+sSpellLvl, "ROW_"+IntToString(n), "", sIcons, "0="+IntToString(n)+";1="+sTexts, "");
Then I use the method you showed me to retrieve those variables and pass them in two different ways.
local:0 forwards the spell id to the script that will eventually deliver the arcane payload via pointy arrow to it's intended target.
local:1 gets used on the OnTooltip event so I get the spell name when I hover the mouse over the spell icon on my gui.
Both are tested and are working. 
<!-- LEVEL 1 SPELL LIST -->
<UIListBox name="LISTBOX_1" x=47 y=0 yPadding=0 xPadding=0 showpartialchild=true width=32 height=440 unequalcontrols=true capturemouseclicks="false" update=true >
<UIPane name="LISTBOX_LVL1_ITEM" x=32 y=0 height=32 width=32 yPadding=0 xPadding=0 tupple=true draggable=false prototype=true
OnLeftClick=UIObject_Misc_ExtractData(self:,string,0,local:0)
OnLeftClick0=UIObject_Misc_ExecuteServerScript("gui_testmessage",local:0,"GIVEDATA")
OnLeftClick1=UIButton_Input_ScreenClose()
OnMouseEnter=UIObject_Misc_ExtractData(self:,string,1,local:1)
OnToolTip='UIObject_Tooltip_DisplayTooltipString(local:1,"OBJECT_X","OBJECT_Y","SCREEN_TOOLTIP_2")'>
<UIButton name="LISTBOX_LVL1_ITEM_1" x=0 y=0 height=32 width=32 prototype=true draggable=false >
<UIText align=right valign=bottom fontfamily="Special_Font" style="1" />
<UIFrame state=base fill="b_emptyframe.tga" />
<UIFrame state=up fill="b_empty.tga" />
<UIFrame state=down fill="b_overlay_active.tga" />
<UIFrame state=focused fill="b_overlay_active.tga" />
<UIFrame state=hilited fill="b_overlay.tga" />
<UIFrame state=hifocus fill="b_overlay_active.tga" />
<UIFrame state=disabled fill="b_emptyframe.tga" />
</UIButton>
</UIPane>
</UIListBox>
gui_testmessage correctly receives GIVEDATA and shows the correct spellID on the chatbox:)
void main (string GIVEDATA)
{
SendMessageToPC(OBJECT_SELF, GIVEDATA);
}
Thanks for the help Lance. This might have taken a hell of a lot longer had you not helped out 
Now I'm off to some well deserved sleep. I still have a lot to do but I got a feeling from now on it's mostly the easy but tedious work. But at least I know all I want to do now seems perfectly possible 
Cheers 