문제

응용 프로그램에는 텍스트를 스크롤 해야하는 한 줄의 ceiklabel이 있습니다.

떠오르는 간단한 솔루션 (그러나 순진함)은 ..

[begin pseduo code]

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

[end pseudo code]

각 업데이트에서 cperiodic 클래스를 타이머 및 label.drawdeferred ()로 사용합니다.

이것이 가장 좋은 방법이라고 생각하십니까? 레이블을 2 ~ 3 배에 2 ~ 3 배나 비효율적으로 다시 그리는 것일 수 있습니다. 그러나 다른 방법이 있습니까?

감사 :)

도움이 되었습니까?

해결책

ListBoxes에서 항목 이름을 스크롤하는 데 사용되는 타이머 기반 솔루션을 보았습니다.

조심해야 할 몇 가지 사항은 스크롤하는 동안 약간 깜박일 수 있으며 레이블에 넣은 텍스트가 너무 길지 않아야한다는 것입니다. 그렇지 않으면 String을 자동으로 클립하고 ELIPSIS를 추가합니다 (.. .))

사용 TextUtils::ClipToFit 레이블에 맞는 문자열을 얻고 라벨에 텍스트를 넣기 전에 추가하는 elipsis를 제거하려면 (검색 KTextUtilClipEndChar 잘린 문자열에서). 문자열의 시작 부분에서 건너 뛰기 위해 얼마나 많은 문자가 클립 함수에 전달하기 전에 얼마나 많은 문자를 작성해야합니다.

다른 팁

나는 그것을 할 수있는 또 다른 방법이 있는지 여부를 모르고 당신의 마음 속에있는 접근 방식이 비효율적인지 말할 수 없습니다. 그러나, 당신은 이 스레드 그것은 당신과 거의 같은 질문에 대해 논의하고 당신이 생각한 것과 다소 같은 해결책을 간략하게 언급합니다.

나는 이렇게했다

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에 의해 다시 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top