Symbian S60 - Прокрутка текста в CEikLabel - PullRequest
1 голос
/ 02 декабря 2008

У меня в приложении одна строка CEikLabel, для которой требуется прокрутить текст.

Простое решение, которое приходит на ум (но, возможно, наивно), было бы что-то вроде ..

[begin pseduo code]

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

[end pseudo code]

Использование класса CPeriodic в качестве таймера и метки .rawDeferred () при каждом обновлении.

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

Спасибо:)

Ответы [ 3 ]

1 голос
/ 02 декабря 2008

Я видел решение на основе таймера, используемое для прокрутки имен элементов в списках.

Несколько вещей, на которые следует обратить внимание, это то, что они могут немного мерцать при прокрутке, и вам нужно убедиться, что текст, который вы поместили на метку, не слишком длинный, иначе он автоматически обрезает строку и добавляет elipsis (...)

Используйте TextUtils::ClipToFit, чтобы получить строку, которая умещается на метке, и удалите элипсис, который он добавляет, прежде чем поместить текст на метку (найдите KTextUtilClipEndChar в вашей обрезанной строке). Вам нужно будет определить, сколько символов пропустить в начале строки, прежде чем передать ее в функцию clip.

1 голос
/ 04 декабря 2008

Я сделал это так

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

1 голос
/ 02 декабря 2008

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

...