2008-12-02 79 views
1

我的應用程序中有一行CEikLabel需要滾動文本。Symbian S60 - 在CEikLabel中滾動文本

想到的(但可能是幼稚)簡單的解決方案會是這樣的..

[begin pseduo code] 

on timer.fire { 
    set slightly shifted text in label 
    redraw label 
} 
start timer 

[end pseudo code] 

使用CPeriodic類的每次更新計時器和label.DrawDeferred()。

你認爲這是最好的方法,它可能是效率低下重繪每秒兩三次的標籤..但有沒有其他方式?

謝謝:)

回答

1

我見過用於在列表框中滾動項目名稱的基於計時器的解決方案。

有幾件事值得注意的是,它在滾動時可能會閃爍一點,並且您需要確保放在標籤上的文本不會太長,否則會自動剪切字符串並添加elipsis(...)

使用TextUtils::ClipToFit獲得一個符合標籤的字符串,並在將文本放在標籤上(在您的剪輯字符串中搜索KTextUtilClipEndChar)之前刪除它添加的elipsis。在將字符串傳遞給剪輯函數之前,您需要確定要在字符串的開頭跳過多少個字符。

1

我不知道是否有另一種方式來做到這一點,不能說在你的心中,你有辦法是否會是低效的。但是,您可能需要查看this thread,其中討論了幾乎與您的問題相同的問題,並簡要提及了與您所設想的方法相同的解決方案。

+0

本主題中的討論實際上並不適用於將文本插入CEikLabel對象 – adam 2008-12-02 15:08:32

1

我已經做了這樣的

TTimeIntervalMicroSeconds32 scrolltime(70000); 
iPeriodicScroll = CPeriodic::NewL(CActive::EPriorityIdle); 
iPeriodicScroll->Start(scrolltime, scrolltime, TCallBack(CVisTagContainerView::ScrollTextL, this)); 

,然後在重複功能

CEikLabel *label = iContainer->Label(); 
const TDesC16 *temp = label->Text(); 
if (temp->Length() <= 0) { 
    if (iTextState != ETextIdle) { return; } 
    DownloadMoreTextL(); 
    return; 
} 
TPtrC16 right = temp->Right(temp->Length()-1); 
label->SetTextL(right); 
label->DrawDeferred(); 

所以文字從右至左移動,當全沒了,該標籤由DownloadMoreTextL

重新填充