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

Я не знаю, есть ли другой способ сделать это, и не могу сказать, будет ли подход, который вы используете в своем уме, будет неэффективным. Тем не менее, вы можете захотеть взглянуть на эту ветку, в которой обсуждается почти тот же вопрос, что и у вас, а также кратко упоминается в некоторой степени то же решение, что и задуманное вами.

Другие вопросы по тегам