2008-12-02 14 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 в своей обрезанной строке). Вам нужно будет определить, сколько символов пропустить в начале строки перед передачей ее функции клипа.

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

 Смежные вопросы

  • Нет связанных вопросов^_^