Symbian的S60 - 在CEikLabel滚动文本
题
我在我的申请单行CEikLabel需要滚动文本。
,想到(但可能幼稚)简单的解决方案会是这样..
[begin pseduo code]
on timer.fire {
set slightly shifted text in label
redraw label
}
start timer
[end pseudo code]
使用CPeriodic类作为每个更新定时器和label.DrawDeferred()。
你认为这是最好的方式,它可能是相当低效重绘标签两,三次第二..但是否有其他办法吗?
感谢:)
解决方案
我看到用于列表框滚动项名称基于定时器的解决方案。
几件事情需要注意的是,它会闪烁了一下,同时滚动和你需要确保你把标签上的文字不要太长,否则会自动剪辑字符串,并添加省略号(...)
使用TextUtils::ClipToFit
得到适合的标签上的字符串,并删除它把文本标签上加上之前的省略号(搜索KTextUtilClipEndChar
您裁剪字符串)。你需要将它传递给夹功能之前制定出有多少个字符的字符串的开头跳过。
其他提示
我不知道是否有另一种方式来做到这一点,不能说在你的心中,你有办法是否会是低效的。然而,你可能想看看这个线程其中讨论了几乎同样的问题,因为你的,还简要提到有些相同的解决方案为您设想的一个。
我已经做了这样的
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重新填充
不隶属于 StackOverflow