Symbian S60 - Прокрутка текста в CEikLabel
У меня есть одна строка CEikLabel в моем приложении, которая должна прокручивать текст.
Простое решение, которое приходит на ум (но, возможно, наивно), будет примерно таким...
[begin pseduo code]
on timer.fire {
set slightly shifted text in label
redraw label
}
start timer
[end pseudo code]
Использование класса CPeriodic в качестве таймера и метки.DrawDeferred() при каждом обновлении.
Как вы думаете, это лучший способ, может быть довольно неэффективно перерисовывать метку два или три раза в секунду... но есть ли другой способ?
Спасибо:)
3 ответа
Я видел решение на основе таймера, используемое для прокрутки имен элементов в списках.
Несколько вещей, на которые следует обратить внимание, это то, что они могут немного мигать при прокрутке, и что вам нужно убедиться, что текст, который вы помещаете на ярлык, не слишком длинный, в противном случае он автоматически обрезает строку и добавляет elipsis (...)
использование TextUtils::ClipToFit
чтобы получить строку, которая помещается на этикетке, и удалить добавляемый елипсис перед размещением текста на этикетке (найдите KTextUtilClipEndChar
в вашей обрезанной строке). Вам нужно будет определить, сколько символов пропустить в начале строки, прежде чем передать ее в функцию clip.
Я сделал это так
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
Я не знаю, есть ли другой способ сделать это, и не могу сказать, будет ли подход, который вы используете в своем уме, будет неэффективным. Тем не менее, вы можете захотеть взглянуть на эту ветку, в которой обсуждается почти тот же вопрос, что и у вас, а также кратко упоминается в некоторой степени то же решение, что и задуманное вами.