Frage

Ich habe nur eine einzige Zeile CEikLabel in meiner Anwendung, den Text muss blättern.

Die einfache Lösung, die den Sinn kommt (aber möglicherweise naiv) wäre so etwas wie ..

[begin pseduo code]

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

[end pseudo code]

Mit einer CPeriodic Klasse, die als Timer und label.DrawDeferred () auf jedes Update.

Glauben Sie, dass dies der beste Weg ist, kann es ziemlich ineffizient sein Nachziehen das Etikett zwei oder drei Mal pro Sekunde .. aber ist es eine andere Möglichkeit?

Danke:)

War es hilfreich?

Lösung

Ich habe die Timer-basierte Lösung für das Scrollen Elementnamen in Listboxen verwendet gesehen.

Ein paar Dinge zu achten gilt, dass es ein wenig flackern könnte beim Scrollen und dass Sie vornehmen müssen, dass der Text, den Sie auf dem Etikett setzen ist nicht zu lange, sonst wird es automatisch die String-Clip und eine Elipsis hinzufügen (...)

Verwenden Sie TextUtils::ClipToFit eine Zeichenfolge zu erhalten, die auf dem Etikett passt und entfernen Sie die Elipsis es hinzufügt, bevor Sie den Text auf dem Etikett setzen (für KTextUtilClipEndChar in Ihrem abgeschnitten Zeichenfolge suchen). Sie werden, wie viele Zeichen arbeiten müssen aus am Anfang des Strings zu überspringen, bevor es auf die Clip-Funktion übergeben.

Andere Tipps

Ich weiß nicht, ob es einen anderen Weg, es zu tun ist, und kann nicht sagen, ob der Ansatz, den Sie in Ihrem Geist ineffizient sein wird. Sie können jedoch einen Blick auf diesen Thread nehmen wollen die so ziemlich die gleiche Frage wie bei Ihnen diskutiert und auch kurz erwähnt etwas die gleiche Lösung wie die, die Sie erdacht haben.

Ich habe es so gemacht

TTimeIntervalMicroSeconds32 scrolltime(70000);
iPeriodicScroll = CPeriodic::NewL(CActive::EPriorityIdle);
iPeriodicScroll->Start(scrolltime, scrolltime, TCallBack(CVisTagContainerView::ScrollTextL, this));

und dann in der wiederholten Funktion

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();

So Text bewegt sich von rechts nach links, und wenn alles weg, das Etikett von DownloadMoreTextL neu besiedelt wird

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top