網上的演算法很多,但我只提供一個最笨,最簡單,但最有效方法去做:
比如你要一行要顯示4個字母的長度,顯示的資訊為"ABCDE",1秒鐘為其更新速度
那麼我們可以緊挨著放置4個LABEL,LABEL1,LABEL2,LABEL3,LABEL4設定好他們的位置
然後演算法如下:
1.擷取要顯示的資訊並存入數組裡
TBuf<10> iSourceData = _L("ABCDE");
CDesCArray* aDataArray = new (Eleave) CDesCArrayFlat(10);
CleanupStack::PushL(aDataArray);
for(TInt i = 0; i< P>
{
aDataArray->AppendL(iSourceData[i]);
}
2.以下為跑馬燈的具體實現:
在標頭檔定義:
TInt j = 0;
TInt a=0;b=1;c=2;d=3;
以下需放在使用中的物件的RunL()裡執行
if(a < aDataArray->Count())
{
LABEL1->SetTextL((*aDataArray)[a]);
}
else
{
LABEL1->SetTextL(_L(""));
}
if(a < aDataArray->Count()+2)
{
a++;
}
else
{
a=0;
}
if(b < aDataArray->Count())
{
LABEL2->SetTextL((*aDataArray)[b]);
}
else
{
LABEL2->SetTextL(_L(""));
}
if(b< aDataArray->Count()+2)
{
b++;
}
else
{
b=0;
}
if(c< aDataArray->Count())
{
LABEL3->SetTextL((*aDataArray)[c]);
}
else
{
LABEL3->SetTextL(_L(""));
}
if(c< aDataArray->Count()+2)
{
c++;
}
else
{
c=0;
}
if(d< aDataArray->Count())
{
LABEL4->SetTextL((*aDataArray)[d]);
}
else
{
LABEL4->SetTextL(_L(""));
}
if(d< aDataArray->Count()+2)
{
d++;
}
else
{
d=0;
}
waitOneSend(); //等待一秒鐘的操作
記得退出頁面得調用使用中的物件Cancel()方法