Question

J'ai une seule ligne CEikLabel dans mon application qui doit faire défiler le texte.

La solution simple qui me vient à l’esprit (mais peut-être naïve) serait quelque chose du genre ..

[begin pseduo code]

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

[end pseudo code]

Utilisation d'une classe CPeriodic comme minuteur et label.DrawDeferred () à chaque mise à jour.

Pensez-vous que c’est la meilleure façon, il peut être assez inefficace de redessiner l’étiquette deux ou trois fois par seconde .. mais existe-t-il un autre moyen?

Merci :))

Était-ce utile?

La solution

J'ai vu la solution basée sur le minuteur utilisée pour faire défiler les noms d'éléments dans les listes déroulantes.

Il convient de se méfier du fait que le texte scintille légèrement pendant le défilement et que vous devez vous assurer que le texte que vous mettez sur l’étiquette n’est pas trop long. Sinon, il coupera automatiquement la chaîne et ajoutera un elipsis. (...)

Utilisez TextUtils :: ClipToFit pour obtenir une chaîne qui tient sur l'étiquette et supprimez les élipsis qu'elle ajoute avant de placer le texte sur l'étiquette (recherchez KTextUtilClipEndChar dans votre chaîne coupée). Vous devrez déterminer le nombre de caractères à ignorer au début de la chaîne avant de la transmettre à la fonction Clip.

Autres conseils

Je ne sais pas s’il existe une autre façon de procéder et je ne peux pas dire si l’approche que vous avez en tête sera inefficace. Cependant, vous pouvez consulter ce fil . qui aborde à peu près la même question que la vôtre et mentionne brièvement la même solution que celle que vous avez conçue.

Je l'ai fait comme ça

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

puis dans la fonction répétée

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

Donc, le texte se déplace de droite à gauche et quand tout est fini, l'étiquette est remplie par DownloadMoreTextL

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top